MySQL報(bào)錯(cuò)Failed to open the referenced table XXX問(wèn)題
問(wèn)題復(fù)現(xiàn)
CREATE TABLE `master_role` ( `id` INTEGER NOT NULL AUTO_INCREMENT COMMENT 'ID', `role` VARCHAR(50) CHARACTER SET latin1 NOT NULL COMMENT 'Role', `active` TINYINT NOT NULL COMMENT 'Active', PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COMMENT = 'Master Role';
CREATE TABLE `user_role` ( `id` INTEGER NOT NULL AUTO_INCREMENT COMMENT 'ID', `email` VARCHAR(150) NOT NULL COMMENT 'Email', `role_id` INTEGER NOT NULL COMMENT 'Role ID', PRIMARY KEY (`id`), KEY `fk_user_role_idx` (`role_id`), CONSTRAINT `fk_user_role` FOREIGN KEY (`role_id`) REFERENCES `master_role` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COMMENT = 'User Role';
step1: create table master_role
step2: create table user_role
step3: DROP TABLE IF EXISTS master_role;
Error Code: 3730. Cannot drop table 'master_role' referenced by a foreign key constraint 'fk_user_role' on table 'user_role'.
解決方案
方案一:關(guān)閉外鍵檢查
SET foreign_key_checks=0; # 關(guān)閉外鍵檢查 DROP TABLE Course; SET foreign_key_checks=1; # 開(kāi)啟外鍵檢查
關(guān)閉檢查之后,如果下次還要使用外鍵就要再次打開(kāi)檢查,較為繁瑣。
方案二:刪除外鍵
#user_role表刪除外鍵 ALTER TABLE user_role DROP FOREIGN KEY fk_user_role; #刪表 DROP TABLE IF EXISTS master_role;
外鍵
阿里規(guī)范

源自《阿里巴巴開(kāi)發(fā)手冊(cè)》
實(shí)例:
假設(shè)刪除微博某V,其粉絲關(guān)系表中的百萬(wàn)條數(shù)據(jù)如果有外鍵約束,就會(huì)影響性能。
來(lái)自知乎的回答
- 外鍵約束是物理上的“硬綁定”,而表的關(guān)聯(lián)只是一種邏輯概念,即數(shù)據(jù)間存在一定的聯(lián)系。數(shù)據(jù)庫(kù)通過(guò)外鍵建立的“硬綁定”會(huì)帶來(lái)額外的資源消耗來(lái)進(jìn)行一致性和完整性校驗(yàn),盡管有時(shí)候無(wú)需這些校驗(yàn)。
- 因此,一般不建議使用外鍵約束來(lái)保證數(shù)據(jù)的一致性和完整性。--- 源自知乎
外鍵作用:維護(hù)數(shù)據(jù)一致性和完整性,避免借助外部資源(例如:?jiǎn)⒂檬聞?wù))。
何時(shí)使用:高并發(fā)大流量事務(wù)場(chǎng)景使用外鍵容易造成死鎖,數(shù)據(jù)庫(kù)資源會(huì)更容易出現(xiàn)瓶頸。一般互聯(lián)網(wǎng)很少使用外鍵。--- 源自知乎
總結(jié)
實(shí)際建表時(shí),不建外鍵。
表之間的關(guān)聯(lián)可以通過(guò)建立索引(咨詢(xún)同事得到的答案,后續(xù)會(huì)就此問(wèn)題寫(xiě)博客解答)。
更新user_role表的創(chuàng)建語(yǔ)句,刪除外鍵。
CREATE TABLE `user_role` ( `id` INTEGER NOT NULL AUTO_INCREMENT COMMENT 'ID', `email` VARCHAR(150) NOT NULL COMMENT 'Email', `role_id` INTEGER NOT NULL COMMENT 'Role ID', PRIMARY KEY (`id`) ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COMMENT = 'User Role';
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- MySQL服務(wù)無(wú)法啟動(dòng):failed to restart mysql.service: unit not found
- mysql報(bào)錯(cuò)ERROR 1396 (HY000): Operation ALTER USER failed for root@localhost解決方式
- mysql啟動(dòng)報(bào)錯(cuò)Failed?to?start?LSB:start?and?stop?MySQL的問(wèn)題解決
- MySQL安裝出現(xiàn)The?configuration?for?MySQL?Server?8.0.28?has?failed.?You?can...錯(cuò)誤的解決辦法
- MySQL連接拋出Authentication Failed錯(cuò)誤的分析與解決思路
相關(guān)文章
如何在Java程序中訪問(wèn)mysql數(shù)據(jù)庫(kù)中的數(shù)據(jù)并進(jìn)行簡(jiǎn)單的操作
這篇文章主要介紹了如何在Java程序中訪問(wèn)mysql數(shù)據(jù)庫(kù)中的數(shù)據(jù)并進(jìn)行簡(jiǎn)單的操作的相關(guān)資料,需要的朋友可以參考下2016-05-05
Mysql出生日期轉(zhuǎn)換為年齡并分組統(tǒng)計(jì)人數(shù)的方法示例
這篇文章主要給大家介紹了關(guān)于Mysql出生日期轉(zhuǎn)換為年齡并分組統(tǒng)計(jì)人數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
mysql 8.0.22壓縮包完整安裝與配置教程圖解(親測(cè)安裝有效)
這篇文章主要介紹了mysql 8.0.22壓縮包完整安裝與配置教程圖解(親測(cè)安裝有效),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
mysql 8.0.18 安裝配置方法圖文教程(linux)
這篇文章主要介紹了linux下mysql 8.0.18 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11
Mysql?sql?如何對(duì)行數(shù)據(jù)求和
這篇文章主要介紹了Mysql使用sql實(shí)現(xiàn)對(duì)行數(shù)據(jù)求和問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。2023-05-05

