MySql多列作为主键不';行不通
我通过以下sql语句创建MySql表:MySql多列作为主键不';行不通,mysql,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”是主键。但不幸的是
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”是主键。但不幸的是,当我插入以下数据时,它不起作用,它总是在“应用程序”字段中显示重复的密钥:
app agent name
-------------------------
MyApp ios cde
MyApp android abc
谁能告诉我有什么不对吗?感谢MySQL中的主键集不检查单个唯一值,当您尝试在多个记录中插入相同的值集时,它将出现重复错误,但两列都不接受空值 例如
希望这能帮助您在主键
应用程序中和代理中是一个主键,而不是两个单独的键
只要代理不同,您就可以使用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;
您可以插入这两条记录吗?不,我只能插入第一行。我在尝试插入第二条记录时收到错误消息。可能我的问题不够清楚。我想要的是允许使用不同的代理插入相同的应用程序。这就是我将应用程序和代理一起用作主键的原因。但这对我不起作用。
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;