Primary key MariaDB主键与唯一键

Primary key MariaDB主键与唯一键,primary-key,mariadb,Primary Key,Mariadb,从某种意义上说,这个问题源于。MariaDB documnetation中的一条禁令表明,在集群数据库上拥有没有主键的表是不可取的。在我的应用程序中,我通常在没有主键的情况下为每个表使用一个唯一键(VARCHAR(8))。我的理解是主键只是一种特殊的唯一键。问题-当前唯一的密钥用法是否足以让MariaDB Galera开心,或者我是否明确需要将我的UNIQUE转换为Primary?从表面上看,这对我来说没有多大意义,但也许有这样做的原因?在缺少主键的情况下,InnoDB/XtraDB将首先尝试使

从某种意义上说,这个问题源于。MariaDB documnetation中的一条禁令表明,在集群数据库上拥有没有主键的表是不可取的。在我的应用程序中,我通常在没有主键的情况下为每个表使用一个唯一键(VARCHAR(8))。我的理解是主键只是一种特殊的唯一键。问题-当前唯一的密钥用法是否足以让MariaDB Galera开心,或者我是否明确需要将我的UNIQUE转换为Primary?从表面上看,这对我来说没有多大意义,但也许有这样做的原因?

在缺少
主键的情况下,InnoDB/XtraDB将首先尝试使用
唯一的
索引。如果两者都不存在,它将构成galera节点之间不可靠的内部主键

您认为
键基本上是一个
唯一的
索引是正确的,唯一的区别是只能有一个
键。它还用于数据的物理布局,但这在这里并不重要


只要只有一个
UNIQUE
索引,就可以了。但是,如果您添加另一个
UNIQUE
索引,我认为这是不可靠的。因此,为了获得良好的实践效果,您可能应该使
唯一
索引
主键。

主键要求列不为空

在表
中创建表p(a INT,b INT,UNIQUE(a))可以有2行,其中a为空

在表
中创建表p2(a INT,b INT,主键(a))a列自动变为非空列

SHOW CREATE TABLE p2;
CREATE TABLE `p2` (
  `a` int(11) NOT NULL DEFAULT '0',
  `b` int(11) DEFAULT NULL,
  PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1