MySQL添加外鍵時(shí)報(bào)錯(cuò):1215 Cannot add the foreign key constraint的解決方法
前言
這篇文章主要涉及到在數(shù)據(jù)創(chuàng)建表時(shí),遇到ERROR 1215 (HY000): Cannot add foreign key constraint 問題方面的內(nèi)容,對于在數(shù)據(jù)創(chuàng)建表時(shí),遇到同樣問題感興趣的同學(xué)可以參考一下。
一、問題的提出
創(chuàng)建兩個(gè)表:
product: 商品表
sealer: 供貨商表
相應(yīng)的SQL如下:
product表:
DROP TABLE IF EXISTS `product`; CREATE TABLE `product` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) NOT NULL COMMENT 'product name', `price` float(10,3) NOT NULL, `description` varchar(20) DEFAULT NULL, `count` int(11) NOT NULL DEFAULT '0', `sid` int(11) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id_index` (`id`) USING HASH, UNIQUE KEY `sid_index` (`sid`) USING HASH ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
sealer表:
DROP TABLE IF EXISTS `sealer`; CREATE TABLE `sealer` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL, `city` varchar(255) DEFAULT NULL, `created_time` datetime DEFAULT NULL, `updated_time` datetime DEFAULT NULL, `level` int(11) NOT NULL DEFAULT '0', `description` varchar(40) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `id_index_1` (`id`) USING HASH ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
接下來我們需要關(guān)聯(lián)product.sid 至 sealer.id,進(jìn)行父子表的主外鍵關(guān)聯(lián)。
二、碰到錯(cuò)誤
在創(chuàng)建外鍵之時(shí),使用的SQL和碰到錯(cuò)誤信息如下:
alter table `product' add CONSTRAINT `sid_ref` FOREIGN KEY (`sid`) REFERENCES `sealer` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
碰到的錯(cuò)誤信息如下:
無法正確的插入外鍵約束。
3、問題分析
主外鍵更多的是某表的主鍵與子表的某個(gè)列進(jìn)行關(guān)聯(lián),要求是具備相同的數(shù)據(jù)類型和屬性,問題會(huì)不會(huì)出現(xiàn)在這里?
要求: 具備相同的數(shù)據(jù)類型和約束
發(fā)現(xiàn): unsigned,數(shù)字的字符長度不一致。
4、解決的辦法
修改product.sid中的數(shù)據(jù)類型,添加unsigned和字段的長度,將其設(shè)置為相同即可。
總結(jié)
之所以出現(xiàn)1215的問題,是由于主外鍵之間的數(shù)據(jù)類型不一致造成的,以后類似問題,皆可按此處理。以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。謝謝大家對腳本之家的支持。
相關(guān)文章
MySQL?字符串轉(zhuǎn)換為數(shù)字的方法小結(jié)
這篇文章主要介紹了MySQL字符串轉(zhuǎn)換為數(shù)字的幾種方法,本文給大家列列舉了三種方法,每種方法通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01MySQL DISTINCT 的基本實(shí)現(xiàn)原理詳解
這篇文章主要介紹了MySQL DISTINCT 的基本實(shí)現(xiàn)原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07詳解MySQL like如何查詢包含''%''的字段(ESCAPE用法)
這篇文章主要介紹了詳解MySQL like如何查詢包含'%'的字段(ESCAPE用法),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12linux下安裝mysql數(shù)據(jù)庫5.6源碼安裝,修改登錄用戶密碼
這篇文章主要介紹了linux下安裝mysql5.6版本并修改登錄用戶密碼的方法。2017-11-11MySQL函數(shù)sysdate()與now()的區(qū)別測試用例對比
這篇文章主要為大家介紹了MySQL函數(shù)sysdate()與now()的區(qū)別測試用例對比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12通過MySQL日志實(shí)時(shí)查看執(zhí)行語句以及更新日志的教程
這篇文章主要介紹了通過MySQL日志實(shí)時(shí)查看執(zhí)行語句以及更新日志的教程,文中所講的方法使用到了mysqladmin命令,需要的朋友可以參考下2015-12-12小白安裝登錄mysql-8.0.19-winx64的教程圖解(新手必看)
這篇文章主要介紹了安裝登錄mysql-8.0.19-winx64的教程圖解,非常適合新手學(xué)習(xí)參考,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03