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 ;