在某些方面,这个问题来自this one。 MariaDB documnetation中的禁令之一表明,在没有主键的情况下在集群数据库上拥有表是不可取的。在我的应用程序中,我通常每个表使用一个UNIQUE键(VARCHAR(8)),没有PRIMARY键。我的理解是PRIMARY键只是一种特殊的UNIQUE键。问题 - 当前的UNIQUE密钥用法是否足以让MariaDB Galera满意或者我是否需要将我的UNIQUE转换为PRIMARY?从表面上看,这对我来说没有多大意义,但也许有理由这样做?
答案 0 :(得分:3)
如果没有PRIMARY
密钥,InnoDB / XtraDB将首先尝试使用UNIQUE
索引。如果两者都不存在,它将组成一个在galera节点之间不可靠的内部主键。
你是正确的PRIMARY
密钥基本上是UNIQUE
索引,唯一的区别是只能有一个PRIMARY
密钥。它也用于数据的物理布局,但在这里并不重要。
只要只有一个UNIQUE
索引,你应该没问题。但是,如果您添加另一个UNIQUE
索引,我认为这不可靠。因此,为了良好实践,您应该将UNIQUE
索引设为PRIMARY
密钥。
答案 1 :(得分:0)
PRIMARY KEY要求列为NOT NULL
表CREATE TABLE p (a INT, b INT, UNIQUE (a));
中的可以有2行,其中IS NULL。
在表CREATE TABLE p2 (a INT, b INT, PRIMARY KEY (a));
中,a列自动成为NOT NULL列。
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