表约束 - mysql 中的主键

0 mysql constraints primary-key

我有一个下表:

CREATE TABLE `a` (
  `a1` int(11) NOT NULL,
  `a2` int(11) NOT NULL,
  PRIMARY KEY (`a1`,`a2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 
Run Code Online (Sandbox Code Playgroud)

这里当我赋值时,

insert into a values(1,2);
Run Code Online (Sandbox Code Playgroud)

之后,如果我给:

insert into a values(1,20);
insert into a values(10,2);
Run Code Online (Sandbox Code Playgroud)

在这里,我宣布A1和A2作为主键这意味着它uniquenot null默认。但它接受上面给出的重复项(对于 a1 - (1,2) 和 (1,20))。应该不对吧?只有当我给出时它才会出错:

insert into a values(1,2);

ERROR 1062 (23000): Duplicate entry '1-2' for key 'PRIMARY'
Run Code Online (Sandbox Code Playgroud)

而我不能将列(不是列的组合)保留为空。它像对一样执行主键,但not null在单独的列中。为什么会这样??谁能给我解释一下???

Der*_*ğlu 5

当您声明复合主键(a1 和 a2 一起)时,它们需要一起是唯一的。这意味着您不能插入(1,2)多次。

如果你需要 a1 和 a2 自己是唯一的,你需要在每一列上创建唯一的索引。

ALTER TABLE a
  ADD CONSTRAINT constraint_name UNIQUE KEY(a2);


ALTER TABLE a
  ADD CONSTRAINT constraint_name2 UNIQUE KEY(a1);
Run Code Online (Sandbox Code Playgroud)

主键的作用是为每个表行定义唯一性。