关于Mysql新建表时设置外键或者从已有表中添加外键

tech2026-02-24  1

关于Mysql新建表时设置外键或者从已有表中添加外键

*外键:在从表中与主表主键对应的那一列,如:下面例子中的联系人表中的(lkm_cust_id)

主表: 一方,用来约束别人的表从表: 多方,被别人约束的表

1.新建表时

[CONSTRAINT] [外键在这里插入代码片约束名称] FOREIGN KEY(外键字段名) REFERENCES 主表名(主键字段名);

例如: 此处在联系人表中添加外键(cust_id)

/*创建客户表*/ CREATE TABLE cst_customer ( cust_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)', PRIMARY KEY (`cust_id`) ) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=utf8; /*创建联系人表*/ CREATE TABLE cst_linkman ( lkm_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT '联系人编号(主键)', lkm_cust_id bigint(32) NOT NULL COMMENT '客户id(外键)', PRIMARY KEY (`lkm_id`), CONSTRAINT `FK_cst_linkman_lkm_cust_id` FOREIGN KEY (`lkm_cust_id`) REFERENCES `cst_customer` (`cust_id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; 在已有表中添加外键 语法: ALTER TABLE 从表 ADD [CONSTRAINT] [外键约束名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主 键字段名);

3.补充----设置外键时on条件说明

. cascade方式 在父表上update/delete记录时,同步update/delete掉子表的匹配记录

. set null方式 在父表上update/delete记录时,将子表上匹配记录的列设为null 要注意子表的外键列不能为not null

. No action方式 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作

. Restrict方式 同no action, 都是立即检查外键约束

. Set default方式 父表有变更时,子表将外键列设置成一个默认的值 但Innodb不能识别

最新回复(0)