MySQL的外键约束
⽂章⽬录
什么是外键约束
A表的主键在B表中出现(A表⽰主表,B表⽰从表),并且B表中的这个字段的值必须已经在A表中出现,这个字段对B表来说就是外键约束,外键约束约束的是从表,即从表对外键列的新增和修改都要看主表中这个值是否已经存在
从表创建外键
建⽴外键约束语法
[CONSTRAINT[symbol]]FOREIGN KEY
[index_name](col_name,...)
REFERENCES tbl_name (col_name,...)
[ON DELETE reference_option]
reference group[ON UPDATE reference_option]
reference_option:
RESTRICT|CASCADE|SET NULL|NO ACTION|SET DEFAULT
解读
外键创建从CONSTRAINT 开始
1. [CONSTRAINT [symbol]],指定约束名字,不写则系统⾃动⽣成外键约束名;
2. MySQL强制外键约束的列上必须要有索引, [index_name]指定索引名,不写则系统⾃动⽣成索引名,如果已经存在可以⽤于⽀持外
键约束的索引,那么指定的索引名则⽆效,采⽤已有的索引
3. (col_name, ...)从表的列名,
4. REFERENCES tbl_name (col_name,...),REFERENCES 后⾯是主表的表名和列名
案例
CREATE TABLE`qrtz_blob_triggers`(
`sched_name`varchar(120)NOT NULL,
`trigger_name`varchar(200)NOT NULL,
`trigger_group`varchar(200)NOT NULL,
PRIMARY KEY(`sched_name`,`trigger_name`,`trigger_group`),
CONSTRAINT`QRTZ_BLOB_TRIGGERS_ibfk_1`FOREIGN KEY(`sched_name`,`trigger_name`,`trigger_group`)REFERENCES`qrtz_triggers`(`sched _name`,`trigger_name`,`trigger_group`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
创建外键可能失败的原因
1. 我⾃⼰遇到的情况是建表的最后语句ENGINE=INNODB DEFAULT CHARSET=utf8mb4,主表的CHARSET=utf8mb4,⽽创建从表时⽤
的CHARSET=utf8,导致Cannot add foreign key constraint
2. 再有就是从表的外键列的名称和数据类型要和主表的⼀致
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论