电话
400 9058 355
MySQL中外键约束需满足InnoDB引擎、字段类型及索引一致等前提;建表时用FOREIGN KEY声明,已有表用ALTER TABLE ADD FOREIGN KEY添加;可通过INFORMATION_SCHEMA查询并用DROP FOREIGN KEY删除。
在 MySQL 中设置外键约束,核心是确保子表中的某个字段(或字段组合)必须引用父表中已存在的主键或唯一键值,从而维护数据的参照完整性。外键不能随意添加,需满足存储引擎、字段类型、索引等前提条件。
添加外键前必须确认以下几点:
INT UNSIGNED 或都是 VARCHAR(50) CHARACTER SET utf8
mb4);推荐在建表阶段就声明外键,结构清晰且不易遗漏约束:
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT NOT NULL,
order_no VARCHAR(20),
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
说明:
FOREIGN KEY (user_id) 指定子表字段;REFERENCES users(id) 指向父表 users 的主键 id;ON DELETE CASCADE 表示删除父表某用户时,自动删除其所有订单;ON UPDATE CASCADE 表示更新父表主键(不推荐!仅适用于业务允许且明确需要的场景)。使用 ALTER TABLE ... ADD FOREIGN KEY 语法,注意顺序和命名可选:
ALTER TABLE orders ADD CONSTRAINT fk_orders_user_id FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE SET NULL;
说明:
CONSTRAINT fk_orders_user_id 是外键名称,便于后续查错或删除;ON DELETE SET NULL 要求 user_id 字段允许为 NULL(即定义时用了 NULL),否则会报错;orders.user_id 里有 users 中不存在的值),需先清理或修正。查看当前表的外键信息(含名称和规则):
SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME, UPDATE_RULE, DELETE_RULE FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = 'orders' AND CONSTRAINT_SCHEMA = 'your_db_name';
删除外键(需先知道外键名,可通过上一步查到):
ALTER TABLE orders DROP FOREIGN KEY fk_orders_user_id;
注意:DROP FOREIGN KEY 后面跟的是约束名(CONSTRAINT_NAME),不是字段名。
邮箱:8955556@qq.com
Q Q:8955556
本文详解如何将Go官方present工具(用于生成HTML5...
PySNMP在不同版本中对SNMP错误状态(errorSta...
time.Sleep仅阻塞当前goroutine,其他gor...
PHPfopen()创建含特殊符号的文件名失败主因是操作系统...
WooCommerce中通过代码为分组产品动态聚合子商品的属...
io.ReadFull返回io.ErrUnexpectedE...
本文详解Yii2中控制器向视图传递ActiveRecord数...
本文详解为何通过wp_set_object_terms()为...
Pytest中使用@mock.patch类装饰器会导致补丁泄...
带缓冲的channel是并发安全的FIFO队列;make(c...