MySQL 数据库创建不了外键约束

在数据库的表里面创建不了外键约束❓❓❓

没错,以我名侦探 q 的分析(狗屁!!!),真相只有一个❗❗❗

那就是:你表的存储引擎非 InnoDB,外键约束只有存储引擎是 InnoDB 才可以创建;

不信,你去查看你外键所关联的两张表的建表语句;

语法:

show create table <表名>;

演示:

show create table student;

你会从查询结果中发现表的存储引擎显示:“ENGINE=MyISAM”;是 MyISAM 引擎,而非 InnoDB;

MySQL 数据库创建不了外键约束_第1张图片

接下来,我们再去查看 MySQL 数据库内有哪些存储引擎;

语法:

show engines;

MySQL 数据库创建不了外键约束_第2张图片

然后就会原来发现 MyISAM 为 MySQL 数据库的默认存储引擎(但同时他也是支持 InnoDB 存储引擎的);

MySQL 数据库创建不了外键约束_第3张图片

那怎么办呢?那还能怎么办呢?

MySQL 数据库创建不了外键约束_第4张图片

直接修改表的存储引擎为 InnoDB:

语法:

alter table <表名> engine = <存储引擎名>;

演示:

alter table student engine = InnoDB;

小插曲:存储引擎名是不分大小写的,你写 INNODB 和 InnoDB 都可以识别出来的,识别出来的名字会为 InnoDB。

MySQL 数据库创建不了外键约束_第5张图片

按照上面的语法修改完之后,再次查看该表的建表语句:

show create table student;

MySQL 数据库创建不了外键约束_第6张图片

就可以看到之前的 “ENGINE=MyISAM” 改成了 “ENGINE=InnoDB”,;

然后,你把两张要建立外键关系的表的存储引擎都修改为 InnoDB 的存储引擎,就能使用外键啦!!!

其他:

1、你可以在创建表的时候去指定存储引擎;

语法:

/*学生表*/
create table student(
    ID int,
    Name varchar(20)
) engine = 存储引擎名;

演示:创建表的时候去指定 InnoDB 为默认的存储引擎;

/*学生表*/
create table student(
    ID int,
    Name varchar(20)
) engine = INNODB;

查看该表的建表语句:

show create table student;

MySQL 数据库创建不了外键约束_第7张图片

 就可以看到创建好表之后的存储引擎就是 InnoDB 了;

2、你可以去 my.ini 文件里面把 InnoDB 设置成 MySQL 数据库的默认的存储引擎:

路径:C:\ProgramData\MySQL\MySQL 数据库的版本(我的是 MySQL Server 8.0 版本的),在该目录下点击 my.ini 文件进行修改;

MySQL 数据库创建不了外键约束_第8张图片

找到 “default_storage_engine=存储引擎名”,存储引擎名修改成自己想要修改的存储引擎 InnoDB(内容不多,仔细找找就可以找到的)。

MySQL 数据库创建不了外键约束_第9张图片

输入键盘快捷键:Win +R,输入 ①services.msc,点击 ②确定

 MySQL 数据库创建不了外键约束_第10张图片

 打开服务后,找到你的 MySQL 服务右键 -> 重新启动(E) 就 O 了~

MySQL 数据库创建不了外键约束_第11张图片

 MySQL 数据库创建不了外键约束_第12张图片

完。。。

你可能感兴趣的:(mysql,数据库,sql,存储引擎)