参照完整性的例子

 
部门表----主表(被参照表)
 
部门编码   部门名称   部门位置
10               财务部        广州
40               销售部       北京
 
  
雇员信息表----从表(参照表)
 
雇员编码 姓名 性别  部门编码 地址
001            张三 男      10               广州107
002            李四 女      40               广州108
 
下面插入三条数据到雇员信息表中,请指出是否可以
1.003   马俗  10 纽约
2.004   钟琴  20 新加坡
3.005   李聘  40 NULL
以上的例子.请问我该怎样 
建立Foreign Key  和定义Check 约束 ?
### MySQL 中的参照完整性及其实现 #### 什么是参照完整性参照完整性是一种数据库设计原则,用于维护表之间关系的一致性和准确性。它通过约束机制确保一个表中的外键值要么匹配另一个表中的主键值,要么为空[^1]。 #### 参照完整性的实现方法 在 MySQL 中,可以通过定义 **外键约束 (Foreign Key Constraint)** 来实现参照完整性。以下是具体说明: #### 创建带有外键约束的表 在外键约束中,父表通常包含主键,而子表则包含指向该主键的外键字段。创建具有外键约束的表时,需满足以下条件: - 子表的外键列数据类型应与父表的主键列一致。 - 父表必须使用支持事务的存储引擎(如 InnoDB),因为 MyISAM 不支持外键[^2]。 下面是一个简单的例子,展示如何设置外键约束: ```sql -- 创建父表 departments CREATE TABLE departments ( department_id INT PRIMARY KEY, department_name VARCHAR(100) NOT NULL ) ENGINE=InnoDB; -- 创建子表 employees 并添加外键约束 CREATE TABLE employees ( employee_id INT PRIMARY KEY, employee_name VARCHAR(100) NOT NULL, department_id INT, FOREIGN KEY (department_id) REFERENCES departments(department_id) ON DELETE CASCADE -- 删除级联操作 ON UPDATE CASCADE -- 更新级联操作 ) ENGINE=InnoDB; ``` 上述代码片段展示了如何在一个名为 `employees` 的表中为 `department_id` 列设置外键约束,使其引用 `departments` 表中的 `department_id` 主键[^3]。 #### 外键的行为选项 当对外键关联的数据执行删除或更新操作时,可以指定不同的行为来控制受影响的记录处理方式。常见的行为包括: - **CASCADE**: 自动删除或更新相关联的记录。 - **SET NULL**: 将外键字段设为 NULL 值。 - **RESTRICT/NO ACTION**: 阻止对父表记录的操作如果存在依赖项[^4]。 #### 检查现有外键约束 要查看当前数据库中存在的外键约束,可运行如下查询语句: ```sql SELECT CONSTRAINT_NAME, TABLE_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE REFERENCED_TABLE_NAME IS NOT NULL AND TABLE_SCHEMA = 'your_database_name'; ``` 此命令会返回关于所有外键的信息列表,帮助管理员理解不同表之间的联系结构[^5]。 #### 移除外键约束 如果需要移除现有的外键约束,则可通过 ALTER TABLE 语法完成这一过程: ```sql ALTER TABLE employees DROP FOREIGN KEY fk_department; ``` 这里假设之前给定的名字是 `fk_department`,实际名称可能有所不同,取决于最初声明时所赋予的具体名字[^6]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值