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作为主键这意味着它unique和not 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在单独的列中。为什么会这样??谁能给我解释一下???
当您声明复合主键(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)
主键的作用是为每个表行定义唯一性。