San*_*der 1 mysql sql foreign-keys
我正在开发一个类似于服务台的系统,并且我想使用外键来确保数据库结构合理,但是我不知道是否应该使用它们以及如何正确使用它们。
是否有关于如何(以及何时)使用外键的良好教程?
编辑我最困惑的部分是ON DELETE .. ON UPDATE ..部分,假设我有以下表格
table 'users'
id int PK auto_increment
department_id int FK (departments.department_id) NULL
name varchar
table 'departments'
id int PK auto_increment
name
Run Code Online (Sandbox Code Playgroud)
users.department_id是department.department_id的外键,当我要删除部门或用户时,ON UPDATE和ON DELETE函数在这里如何工作?
ON DELETE并ON UPDATE参考您在键表中所做的更改如何传播到从属表。UPDATE表示在依赖表中更改键值以维护关系,而DELETE表示从属记录被删除以维护完整性。
示例:说你有
Users: Name = Bob, Department = 1
Users: Name = Jim, Department = 1
Users: Name = Roy, Department = 2
Run Code Online (Sandbox Code Playgroud)
和
Departments: id = 1, Name = Sales
Departments: id = 2, Name = Bales
Run Code Online (Sandbox Code Playgroud)
现在,如果您更改deparments表以将第一条记录修改为read id = 5, Name = Sales,那么使用“ UPDATE”您还将更改前两个记录以读取Department = 5-如果没有“ UPDATE”,则不允许进行更改!
同样,如果删除了部门2,则使用“ DELETE”,您还将删除Roy!的记录。如果没有“删除”,则您必须先删除罗伊(Roy),才能删除该部门。