最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL報(bào)錯(cuò)Failed to open the referenced table XXX問(wèn)題

 更新時(shí)間:2024年11月06日 10:46:11   作者:A_bad_horse  
在數(shù)據(jù)庫(kù)操作中,嘗試刪除外鍵約束表'master_role'時(shí)遇到錯(cuò)誤碼3730,因其被'user_role'表中的外鍵'fk_user_role'引用,解決方法包括關(guān)閉外鍵檢查和刪除外鍵,阿里巴巴開(kāi)發(fā)手冊(cè)和知乎回答指出,外鍵雖能維護(hù)數(shù)據(jù)一致性

問(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è)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MYSQL與sqlyog連接的實(shí)現(xiàn)

    MYSQL與sqlyog連接的實(shí)現(xiàn)

    本文主要介紹了MYSQL與sqlyog連接的實(shí)現(xiàn),文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-10-10
  • MySQL中修改庫(kù)名的操作教程

    MySQL中修改庫(kù)名的操作教程

    這篇文章主要介紹了MySQL中修改庫(kù)名的操作教程,是MySQL學(xué)習(xí)當(dāng)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • 最新評(píng)論

    拉萨市| 连州市| 嵊州市| 固阳县| 龙海市| 开鲁县| 遂溪县| 建湖县| 九寨沟县| 正阳县| 万载县| 延吉市| 内丘县| 六盘水市| 庆云县| 唐海县| 古丈县| 平乡县| 磴口县| 广宁县| 固原市| 图木舒克市| 桑日县| 濉溪县| 延津县| 桐柏县| 利川市| 祥云县| 镇原县| 海兴县| 奉化市| 连江县| 桐城市| 松阳县| 固阳县| 滦平县| 莎车县| 裕民县| 青海省| 开远市| 英超|