Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql多列作为主键不';行不通_Mysql - Fatal编程技术网

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”是主键。但不幸的是

我通过以下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”是主键。但不幸的是,当我插入以下数据时,它不起作用,它总是在“应用程序”字段中显示重复的密钥:

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;