gpt4 book ai didi

mysql - 在 MySQL 中创建一对一关系

转载 作者:行者123 更新时间:2023-11-29 01:43:06 25 4
gpt4 key购买 nike

这是在 MySQL 中以一对一关系的方式链接两个表的正确代码吗?

表 1

CREATE TABLE employees (id INT PRIMARY KEY AUTO_INCREMENT,FullName VARCHAR(50))

表 2

CREATE TABLE salary (id INT PRIMARY KEY AUTO_INCREMENT,SalaryNumber VARCHAR(6))

ALTER TABLE salary
ADD FOREIGN KEY (id) REFERENCES employees (id)
ON DELETE CASCADE
ON UPDATE CASCADE

最佳答案

您的示例有很多问题,首先是您链接了两个不相关的自动递增 ID。这是一场等待发生的噩梦。如果发生任何事情导致这两个 ID 不同步,那你就完蛋了。

在您的示例中,“雇员”记录将被视为父记录,“薪水”记录依赖于父记录(即 - 您可能有一个没有相应薪水记录的雇员记录,但您不希望与员工无关的工资记录)。

如 MySql 文档中所述,外键约束属于子表。因此,您在“薪水”表中需要的是一个如下所示的列:

EmployeeId 整数不为空

你的外键是

修改表工资添加外键 (EmployeeId) REFERENCES 员工 (id)删除级联关于更新级联

此时,您仍然拥有多对一关系,因为没有什么可以阻止您将多个条目插入到具有相同 EmployeeId 的薪水表中。

要使这种关系成为一对一的关系,您必须在 salary.EmployeeId 列上创建一个唯一索引。

对于这种类型的关系,重要的是要注意:

  1. 您无法在 salary 中插入没有有效 EmployeeId 的行
  2. 您无法在 salary 中插入具有重复 EmployeeId 的行
  3. 当您删除工资记录时,员工记录保持不变。
  4. 删除员工记录会导致删除它所引用的工资记录(如果您不希望出现这种情况,请将 ON DELETE CASCADE 更改为其他内容)
  5. 在 salary 表为空并被删除之前,您不能删除 employee 表。

关于mysql - 在 MySQL 中创建一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14292798/

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