主頁(yè) > 知識(shí)庫(kù) > MySQL創(chuàng)建數(shù)據(jù)表并建立主外鍵關(guān)系詳解

MySQL創(chuàng)建數(shù)據(jù)表并建立主外鍵關(guān)系詳解

熱門(mén)標(biāo)簽:福建外呼系統(tǒng)定制化 電銷(xiāo)卡外呼系統(tǒng)供應(yīng)商 怎么在地圖標(biāo)注位置生成圖片 悟空科技電話機(jī)器人 400電話可以免費(fèi)申請(qǐng)嗎 銅陵防封電銷(xiāo)卡 騰訊地圖標(biāo)注提升 美國(guó)反騷擾電話機(jī)器人 真人語(yǔ)音電話機(jī)器人

前言

為mysql數(shù)據(jù)表建立主外鍵需要注意以下幾點(diǎn):

  • 需要建立主外鍵關(guān)系的兩個(gè)表的存儲(chǔ)引擎必須是InnoDB。
  • 外鍵列和參照列必須具有相似的數(shù)據(jù)類(lèi)型,即可以隱式轉(zhuǎn)換的數(shù)據(jù)類(lèi)型。
  • 外鍵列和參照列必須創(chuàng)建索引,如果外鍵列不存在索引,mysql將自動(dòng)創(chuàng)建索引。

一、SQL語(yǔ)句創(chuàng)建數(shù)據(jù)表并設(shè)置主外鍵關(guān)系

create table demo.ChineseCharInfo
(
ID int not null auto_increment,
Hanzi varchar(10) not null,
primary key (ID)
)
engine=innodb auto_increment=1 default charset=utf8 collate=utf8_general_ci;
create table demo.ChinesePinyinInfo
(
ID int not null auto_increment,
CharID int null,
Pinyin varchar(10) null,
Tone tinyint unsigned null,
primary key (ID),
-- 方式一:不指定外鍵名稱(chēng),數(shù)據(jù)庫(kù)自動(dòng)生成
foreign key (CharID) references ChineseCharInfo(ID) on delete cascade on update cascade 
-- 方式二:指定外鍵名稱(chēng)為(FK_Name)
-- constraint FK_Name foreign key (CharID) references ChineseCharInfo(ID) on delete cascade on update cascade 
)
engine=innodb auto_increment=1 default charset=utf8 collate=utf8_general_ci;

二、當(dāng)數(shù)據(jù)表已經(jīng)存在時(shí),就要使用下面的方法建立主外鍵關(guān)系

-- 為表(demo.ChinesePinyinInfo)中字段(CharID)添加外鍵,并指定外鍵名為(FK_Name)
alter table demo.ChinesePinyinInfo add constraint FK_Name foreign key (CharID) references ChineseCharInfo(ID);
-- 為表(demo.ChinesePinyinInfo)中字段(CharID)添加外鍵,不指定外鍵名,由數(shù)據(jù)庫(kù)自動(dòng)生成外鍵名
alter table demo.ChinesePinyinInfo add foreign key (CharID) references ChineseCharInfo(ID);

三、刪除主外鍵約束

-- 通過(guò)修改列的屬性來(lái)刪除自增長(zhǎng),第一個(gè)(ID)為原列名,第二個(gè)(ID)為新列名
alter table demo.ChinesePinyinInfo change ID ID int not null;
-- 刪除表(demo.ChinesePinyinInfo)中的主鍵約束,如果主鍵列為自增列,則需要先刪除該列的自增長(zhǎng)
alter table demo.ChinesePinyinInfo drop primary key;
-- 刪除表(demo.ChinesePinyinInfo)中的名稱(chēng)為(FK_Name)的外鍵
alter table demo.ChinesePinyinInfo drop foreign key FK_Name;

四、主外鍵關(guān)系的約束

如果子表試圖創(chuàng)建一個(gè)在主表中不存在的外鍵值,數(shù)據(jù)庫(kù)會(huì)拒絕任何insert或update操作。

如果主表試圖update或者delete任何子表中存在或匹配的外鍵值,最終動(dòng)作取決于外鍵約束定義中的on delete和on update選項(xiàng)。

on delete和on update都有下面四種動(dòng)作。

  • cascade:主表刪除或更新相應(yīng)的數(shù)據(jù)行,則子表同時(shí)刪除或更新與主表相匹配的行,即級(jí)聯(lián)刪除、更新。
  • set null:主表刪除或更新相應(yīng)的數(shù)據(jù)和,則子表同時(shí)將與主表相匹配的行的外鍵列置為null。當(dāng)外鍵列被設(shè)置為not null時(shí)無(wú)效。
  • no action:數(shù)據(jù)庫(kù)拒絕刪除或更新主表。
  • restrict:數(shù)據(jù)庫(kù)拒絕刪除或更新主表。如果未指定on delete或on update的動(dòng)作,則on delete或on update的默認(rèn)動(dòng)作就為restrict。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • MySQL外鍵約束的實(shí)例講解
  • 詳解MySQL 外鍵約束
  • MySQL外鍵約束常見(jiàn)操作方法示例【查看、添加、修改、刪除】
  • MySQL刪除有外鍵約束的表數(shù)據(jù)方法介紹
  • MySQL刪除表的時(shí)候忽略外鍵約束的簡(jiǎn)單實(shí)現(xiàn)
  • MySQL 關(guān)閉子表的外鍵約束檢察方法
  • MySQL外鍵約束的禁用與啟用命令
  • 詳解MySQL中的外鍵約束問(wèn)題
  • MySQL與Oracle數(shù)據(jù)類(lèi)型對(duì)應(yīng)關(guān)系(表格形式)
  • MySQL 外鍵約束和表關(guān)系相關(guān)總結(jié)

標(biāo)簽:武威 臨汾 湖北 湖南 聊城 白銀 云浮 烏海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL創(chuàng)建數(shù)據(jù)表并建立主外鍵關(guān)系詳解》,本文關(guān)鍵詞  MySQL,創(chuàng)建,數(shù)據(jù)表,并,建立,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL創(chuàng)建數(shù)據(jù)表并建立主外鍵關(guān)系詳解》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于MySQL創(chuàng)建數(shù)據(jù)表并建立主外鍵關(guān)系詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章