gpt4 book ai didi

mysql - SQL主键重复错误3个表中相同的主键

转载 作者:行者123 更新时间:2023-11-29 22:14:13 24 4
gpt4 key购买 nike

因主键重复而出现错误。如何在多个表中使用相同的主键?非常感谢在下表中展示如何使用它。错误是com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:键“PRIMARY”的重复条目“Jam”

    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;

最佳答案

您不能将主键分布在多个表中。您应该有一个名为 players 的表,每个玩家一行,并且这 3 个表应该有一个指向该表的外键。

playername 列确实可以成为您希望的 3 个表中每一个的主键,但这不太可能是您真正想要的。如果您希望任何一张 table 上的每个玩家都多于一行,那么在这些 table 上就不应该进行 PK。

主键意味着两件事:

  1. 唯一(任意两行的列值不能相同)
  2. 不为空

您收到的错误反射(reflect)了您插入的行违反了#1。

players 表的外键可确保引用完整性。基本上,不会为不存在的玩家存储任何内容。并且在删除统计数据之前不会删除已存储统计数据的玩家,等等。

这就是您的第一个表的 DDL,其中包含对 players 表的 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;

注意:如果您想要这种效果,您可以将限制更改为级联(基于您尝试更改或删除玩家表中的玩家时希望发生的情况)

关于mysql - SQL主键重复错误3个表中相同的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31352495/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com