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 设置为一样。

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

三、下面我们验证一下: 

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

 

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MySQL可以添加,但是需要满足一些条件。首先,MySQL的存储引擎必须是InnoDB,因为只有InnoDB引擎支持约束。如果你的表使用的是其他存储引擎,如MyISAM,那么就无法添加。其次,你需要确保表之间的关联字段的数据类型和长度完全一致。另,如果你要添加约束,被引用的表必须有一个主或者唯一索引。如果你的表不满足这些条件,就无法添加约束。所以,如果你无法添加,可能是因为你的表使用的是不支持的存储引擎,或者表之间的关联字段不满足约束的条件。\[1\]\[2\]另,虽然MySQL支持,但是有些人不推荐在关系型数据库中使用,因为MySQL功能相对较弱,限制较多,不如其他数据库如SQL Server等功能强大。\[3\] #### 引用[.reference_title] - *1* *2* [MySQL数据库不能添加原因解决办法](https://blog.csdn.net/qq_51533157/article/details/120680354)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mysql为何不建议使用](https://blog.csdn.net/qq_40631247/article/details/124141073)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值