首页 > 解决方案 > 表约束——mysql中的主键

问题描述

我有一个下表:

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在单独的列中。为什么会这样??谁能解释我???

标签: mysqlconstraintsprimary-key

解决方案


当您声明复合主键(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);

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


推荐阅读