Mysql创建一对一关系
我有两张桌子Mysql创建一对一关系,mysql,Mysql,我有两张桌子 CREATE TABLE `persons` ( `id` int(6) NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 如果我想,我应该如何创建这些表:当一个人id添加到个人中时,同一个人将自动添加到个人中,并且排名=1000wins=0和losts=0?在插入触发器后创建个人 DELIMITER ;; CREATE TRIGGER `persons_ai`
CREATE TABLE `persons` (
`id` int(6) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name`
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
如果我想,我应该如何创建这些表:当一个人id添加到
个人
中时,同一个人将自动添加到个人
中,并且排名=1000
wins=0和losts=0
?在插入触发器后创建个人
DELIMITER ;;
CREATE TRIGGER `persons_ai` AFTER INSERT ON `persons` FOR EACH ROW
INSERT INTO `person_rank` (`id`, `wins`, `losts`, `rank`) VALUES (new.id, 0, 0, 1000);;
DELIMITER ;
我会按照MarcB说的做,只运行两个插件 按照MarcB所说的,创建一个从persons_rank.id到persons.id的外键,该外键在删除和更新时级联。这将使它们保持同步。如果您更改persons上的id,它将更新persons\u rank。如果删除persons中的行,它将删除persons\u rank中的行
最后,您还需要id作为persons_rank中的主键,因为它是1对1。运行两个插入查询,或者在persons表上设置一个触发器。这个解决方案我知道,但如果我在
person_rank中为id
设置外键,我需要唯一键
那么?person.id值已经是唯一的。只需将persons_rankSet id作为persons_rank中的主键即可。它是一对一的,所以主键在这两个表中都是id,您应该在表中始终有一个主键?我需要为id
提供唯一的密钥,但是已经有外来密钥集id
作为主键(create PFK)@JanQ MySQL有一个名为MySQL Workbench的程序。这个或PHPMyAdmin在提供GUI时可能对您有用,然后您可以查看它们运行的命令语法。是的,我知道。我做了,但我总是有一些错误。若我在主表上编辑一个字段,那个么在链接表中它不会改变/@JanQ您正在编辑哪个字段?我看到的唯一共享字段是id。这就是级联外键的原因。如果引用表中的id发生变化,它会更新id。我在booth表“状态”中有其他连接字段@JanQ简短回答:两个表中都没有状态。它违反了1NF(我相信)。选择状态最适合的位置,并在必要时使用连接。
DELIMITER ;;
CREATE TRIGGER `persons_ai` AFTER INSERT ON `persons` FOR EACH ROW
INSERT INTO `person_rank` (`id`, `wins`, `losts`, `rank`) VALUES (new.id, 0, 0, 1000);;
DELIMITER ;