【MySQL】关闭外键约束检查

插入SQL之前,可以关闭外键约束检查

CREATE DATABASE IF NOT EXISTS exam;

SHOW VARIABLES LIKE 'collation%';
SHOW VARIABLES LIKE 'character%';

USE exam;

SET FOREIGN_KEY_CHECKS = 0;


















SET FOREIGN_KEY_CHECKS = 1;

### 如何在 MySQL 中使用约束 #### 创建带有约束的表结构 在关系中,父表中的主字段与子表中的字段形成关联。创建具有约束的表格时需指定参照完整性规则。 ```sql CREATE TABLE class ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), PRIMARY KEY (id) ); CREATE TABLE students ( student_id INT NOT NULL AUTO_INCREMENT, c_id INT, s_name VARCHAR(50), PRIMARY KEY (student_id), FOREIGN KEY (c_id) REFERENCES class(id) ON DELETE RESTRICT -- 或者可以是 CASCADE/SET NULL 等策略 ); ``` 上述 SQL 语句定义了一个班级(`class`)和学生(`students`)之间的父子关系,在此情况下`c_id`作为指向`class.id`[^1]。 #### 插入数据到有约束的表里 当向含有约束条件的目标表插入新纪录之前,必须先确认所涉及的部引用对象已经存在于源表之中;否则会抛出错误提示。 ```sql INSERT INTO class(name) VALUES ('Math'); -- 假设上面这条命令返回受影响行数为1,则表示新增了一条记录且其ID为1. INSERT INTO students(c_id,s_name) VALUES (1,'Alice'); -- 正确操作因为存在对应的班级编号. ``` #### 删除或更新受保护的数据项 尝试移除被其他实体依赖的关字将会触发异常报告,除非事先调整了级联行为或者清除了所有相关联的对象实例。 ```sql DELETE FROM class WHERE id=1; ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails... ``` 该错误表明无法直接删除正在使用的主值,因为它正由另一个表内的某些记录所引用着[^2]。 为了绕过这个限制,可以选择如下几种方法之一: - **更改选项**:修改原有的声明来允许特定类型的自动处理动作,比如`ON DELETE SET NULL`或是`ON UPDATE CASCADE`. - **手动清理**:先行定位并消除那些间接阻碍目标变更过程的因素——即先把有关连结切断再继续执行后续指令。 - **临时禁用检查机制**:通过设置全局变量的方式暂时关闭部链接一致性的验证功能,不过这通常只适用于非常特殊的情形下,并不推荐常规采用这种方法。 #### 设置约束及其作用 不仅有助于保持不同表格间的关系一致性,而且还可以防止非法数据进入系统内部造成混乱局面的发生。具体来说,它能够做到以下几点: - 维护参照完整性:确保每一个都对应着有效的主; - 自动化维护工作:依据预配置好的规则实现同步更新或清除冗余信息的功能; - 提升查询效率:利用索引来加速基于多张表联合查找的速度[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值