MySQL数据库不能添加外键的原因和解决办法

 alter table sc add constraint FK_ID foreign key(CNO) references course(CNO);

一、在正确输入为table添加外键时,系统也并没有报错。

当我们show create table sc;查看表是否添加外键时,显示的是有我们添加的外键  

KEY `FK_ID` (`CNO`);

 放张对比图,下面的是正确的情况,可以发现之前的外键并没有与外表联系起来,这样的外键是不会起到作用的。

首先得知道:

只有存储引擎为INNODB才能建立外键,而你的存储引擎默认的可能是MyISAM

输入show engines;查看存储引擎,

看MyISAM  后面的Comment   :Default engine as of MySQL 3.23 with great performance

这个一般是默认的mysql存储引擎。

而InnoDB 后面的Comment:     Supports transactions, row-level locking, and foreign keys

也就是说innoDB才可以设立外键。

上面的图是我更改过后的图,之前的情况是:MyISAM 后面的support是DEFAULT(默认),而我的InnoDB的support 是DISABLED,这个只是并不是你的数据库没有这个engine,没有是no,而是没有设置。

第一步:我的电脑→管理→服务→找到mysql并停止

 

 先停止服务

第二步:在自己mysql的安装目录下找到my.ini文件(有时候这个文件隐藏了),所以你要查看,下面是我个人的:

第三步:打开这个文件找到 [mysqld]

将 default-storage-engine=MyISAM 更改为 default-storage-engine=INNODB 即可

 我这个大约在84行。

 但是当你保存的时候,可能会冒出没有权限修改,以什么管理员身份运行,于是我退出右击压根没有以管理员运行。我试了网上的不少的方法,可能是我操作不行,没成,于是我自己发现一个可以解决的方法:

右击属性,然后找到安全,上面的选择Users,点击编辑

将Users的修改权限、写入勾选,即可 ,之后再进行修改default-storage-engine=MyISAM 更改为 default-storage-engine=INNODB 即可。

进入MySQL,

 二、InnoDB已经成为默认。但是之前创立的表并没有改变,下图为例:

 

 这个表的ENGINE 仍然是MyISAM。

  alter table xxxx(表明) ENGINE= InnoDB;对表的engine进行修改

我顺便也把表的character set 设置为utf8( alter table xxxx convert to character set utf8;)

建议两个表建立外键联系的时候,character set 设置为一样。

此时,再对外键进行操作就正确了。

三、下面我们验证一下: 

 当删去时会报错,这个报错即是由于建立了外键导致的。

猜你喜欢

转载自blog.csdn.net/qq_51533157/article/details/120680354
今日推荐