【发布时间】:2020-09-18 07:28:50
【问题描述】:
我有一张下表:
CREATE TABLE `a` (
`a1` int(11) NOT NULL,
`a2` int(11) NOT NULL,
PRIMARY KEY (`a1`,`a2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
这里当我赋值时,
insert into a values(1,2);
如果我给之后:
insert into a values(1,20);
insert into a values(10,2);
在这里,我将 a1 和 a2 声明为主键,这意味着默认情况下它是 unique 和 not null。但它接受上面给出的重复项(对于 a1 - (1,2) 和 (1,20))。应该不对吧?只有当我给出时它才会给出错误:
insert into a values(1,2);
ERROR 1062 (23000): Duplicate entry '1-2' for key 'PRIMARY'
而我不能将列(不是列的组合)保留为空。它像对一样执行主键,但在各个列中执行 not null。为什么会这样??谁能解释一下???
【问题讨论】:
-
主键是唯一键,您已经在 2 列中定义了它,当表中存在两个列值并且您尝试再次插入相同的 2 个值时会出现重复错误。
-
请参阅文档并证明为什么对是唯一的将意味着各个列是唯一的。 (事实并非如此。)不要只用“不是吗”来声明——如果你不给出你的推理,我们就无法指出你的推理错误。这也是一个常见问题解答。
标签: mysql constraints primary-key