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 设置为一样。
此时,再对外键进行操作就正确了。
三、下面我们验证一下:
当删去时会报错,这个报错即是由于建立了外键导致的。