Mysql SQL主键重复错误3个表中的同一主键
获取具有重复主键的错误。如何在多个表中使用相同的主键?如果能在下表中展示我如何使用它,我将不胜感激。错误为com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolati 一个例外:按键“PRIMARY”重复输入“Jam”Mysql SQL主键重复错误3个表中的同一主键,mysql,sql,Mysql,Sql,获取具有重复主键的错误。如何在多个表中使用相同的主键?如果能在下表中展示我如何使用它,我将不胜感激。错误为com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolati 一个例外:按键“PRIMARY”重复输入“Jam” CREATE TABLE `skills` ( `playerName` varchar(15) NOT NULL default '', `testa` double defaul
CREATE TABLE `skills` (
`playerName` varchar(15) NOT NULL default '',
`testa` double default NULL,
`testb` double default NULL,
`testc` double default NULL,
`testd` double default NULL,
PRIMARY KEY (`playerName`)
) ENGINE=MyISAM;
CREATE TABLE `playerrights` (
`playerName` varchar(15) NOT NULL default '',
`rank` int(2) default NULL,
PRIMARY KEY (`playerName`)
) ENGINE=MyISAM;
CREATE TABLE `skillsoverall` (
`playerName` varchar(15) NOT NULL default '',
`lvl` int(11) default NULL,
`xp` BIGINT(11) default NULL,
PRIMARY KEY (`playerName`)
) ENGINE=MyISAM;
您的问题并不是跨表具有相同的主键,而是给定表只能具有给定主键的一个实例。如果您正在添加数据,并试图在Jam已在表中时添加Jam,它将抛出您看到的错误。当前模式只允许每个玩家有一行。如果这是目标,那么你可能想让他们成为一个大桌子 然而,我怀疑你真正感兴趣的是,让这三个表引用一个表,我怀疑称之为玩家。在这种情况下,改变
PRIMARY KEY (playerName)
到
不能将主键分散到多个表中。您应该有一个名为players的表,每个player有一行,这3个表应该有一个外键指向该外键 playername列确实可以是您所希望的3个表中每个表的主键,但这不太可能是您真正想要的。如果您希望在这些表中的任何一个表中每个玩家都有一行以上,那么这些表上不应该有PK 主键正好意味着两件事: 唯一2行中的列可以具有相同的值 非空 您得到的错误反映了您插入的行将违反1 players表的外键确保引用完整性。基本上,没有为不存在的玩家存储任何东西。并且那些数据被存储的玩家在数据被移除之前不会被移除,等等 这是第一个表的DDL在FK到玩家表时的样子。您应该有这样一个表:
CREATE TABLE `skills` (
`playerName` varchar(15) NOT NULL default '',
`testa` double default NULL,
`testb` double default NULL,
`testc` double default NULL,
`testd` double default NULL,
index (playername),
constraint fk_playername_rights
foreign key (playername) references players (playername)
on delete restrict
on update restrict
) ENGINE=MyISAM;
注意:如果您想要根据您想要发生的情况将限制更改为级联,如果您试图更改或删除玩家表中的玩家,则可以将限制更改为级联是否是装箱表中的错误或添加数据时的错误?取消默认设置为zanny。做你想做的事没问题。但在添加数据时,每个表只能出现一次pk值。是的。每个表上的外键名称必须不同,但在其他方面相同。关键字的名称紧跟在单词constraint之后。您还可以省略约束xyz部分,让它每次为您指定一个系统生成的名称。
CREATE TABLE `skills` (
`playerName` varchar(15) NOT NULL default '',
`testa` double default NULL,
`testb` double default NULL,
`testc` double default NULL,
`testd` double default NULL,
index (playername),
constraint fk_playername_rights
foreign key (playername) references players (playername)
on delete restrict
on update restrict
) ENGINE=MyISAM;