MySql多列作为主键不起作用

时间:2014-05-06 04:13:54

标签: mysql

我通过以下sql语句创建MySql表:

CREATE TABLE IF NOT EXISTS `mytable` (
  `agent` varchar(64) NOT NULL,
  `name` varchar(40) NOT NULL,
  `app` varchar(64) NOT NULL,
  PRIMARY KEY (`app`,`agent`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

正如您所见,该字段的应用程序'和'代理商'是主键。但不幸的是,当我插入以下数据时它不起作用,它总是在“应用程序”中显示重复的键。字段:

app     agent       name
-------------------------
MyApp    ios         cde
MyApp    android     abc

有人能告诉我什么错吗?感谢

2 个答案:

答案 0 :(得分:1)

在您的主键appagent中,主键在一起,而不是两个单独的键。

只要代理商有所不同,您就可以使用app ='MyApp'添加许多行。反过来说。

如果您不想禁止具有相同应用的多行和使用相同代理的多行添加常规唯一索引。

CREATE TABLE IF NOT EXISTS `mytable` (
  `agent` varchar(64) NOT NULL,
  `name` varchar(40) NOT NULL,
  `app` varchar(64) NOT NULL,
  UNIQUE app_index (`app`),
  UNIQUE agent_index (`agent`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

答案 1 :(得分:0)

MySQL中的主键集不会检查单个唯一值,当您尝试在多个记录中插入相同的值集时会出现重复错误,但这两个列都不会接受NULL值

例如

app     agent       name
-------------------------
MyApp    ios         cde
MyApp    ios         abc        - it will give you error as "Duplicate entry 'MyApp-ios' for key 'PRIMARY'"

这可能会对你有所帮助