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

MySQL数据库不能添加外键的原因和解决办法_第1张图片

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

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

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

KEY `FK_ID` (`CNO`);

MySQL数据库不能添加外键的原因和解决办法_第2张图片

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

首先得知道:

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

MySQL数据库不能添加外键的原因和解决办法_第3张图片

输入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数据库不能添加外键的原因和解决办法_第4张图片

 MySQL数据库不能添加外键的原因和解决办法_第5张图片

 先停止服务

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

MySQL数据库不能添加外键的原因和解决办法_第6张图片

 

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

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

MySQL数据库不能添加外键的原因和解决办法_第7张图片

 我这个大约在84行。

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

MySQL数据库不能添加外键的原因和解决办法_第8张图片

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

MySQL数据库不能添加外键的原因和解决办法_第9张图片

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

进入MySQL,

MySQL数据库不能添加外键的原因和解决办法_第10张图片

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

 MySQL数据库不能添加外键的原因和解决办法_第11张图片

 这个表的ENGINE 仍然是MyISAM。

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

MySQL数据库不能添加外键的原因和解决办法_第12张图片

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

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

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

MySQL数据库不能添加外键的原因和解决办法_第13张图片

三、下面我们验证一下: 

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

 

你可能感兴趣的:(mysql,数据库)