MariaDB主键vs唯一键

时间:2014-03-16 04:59:36

标签: primary-key mariadb

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

2 个答案:

答案 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