mysql foreign key incompatible
报错:

- 置foreign_key_checks变量为0
set @@session.foreign_key_checks=0 select @@session.foreign_key_checks;
- 比对两张表
show full columns from dept_emp; show full columns from departments;
可以看到两张表关联的字段dept_no collation不相同
- 查看库和表定义
show create database uranus; show create table dept_emp; show create table departments;


- 查看外键引用关系
select * from information_schema.key_column_usage where referenced_table_name='departments'\G
当更改表名的时候foreign key产生约束,foreign_key_checks变量不起作用
- 将库 & 表 采用utf8mb4字符集,collation 为 utf8mb4_general_ci
alter database uranus default character set utf8mb4 collate utf8mb4_general_ci;
修改表默认charset & collationalter table dept_emp default character set utf8mb4 collate utf8mb4_general_ci;修改字段 charset & collation
alter table dept_emp modify dept_no char(4) character set utf8mb4 collate utf8mb4_general_ci; alter table dept_emp change dept_no dept_no char(4) character set utf8mb4 collate utf8mb4_general_ci;同时修改 表 和所有字段 charset & collation
alter table dept_emp convert to character set utf8mb4 collate utf8mb4_general_ci; -
修改完后两张表的字段dept_no定义完全相同,错误解决
rename table departments_copy to departments;
-
所有的key都存于information_schema.key_column_usage表中
describe information_schema.key_column_usage;
CONSTRAINT_CATALOG: constraint 所属目录名称,值始终为def
schema <=> database
外键有下面几种关系:
CASCADE:
主表update/delete, 级联子表update/delete
SET NULL:主表update/delete,子表foreign key字段置null(foreign key不能为not null)
NO ACTION:禁止主表update/delete
禁止主表update/delete
RESTRICT:

浙公网安备 33010602011771号