MySQL建立資料表並建立主外鍵關係

來源:互聯網
上載者:User

標籤:定義   --   nod   font   索引   屬性   動作   unsigned   資料   

為mysql資料表建立主外鍵需要注意以下幾點:

需要建立主外鍵關係的兩個表的儲存引擎必須是InnoDB。

外鍵列和參照列必須具有相似的資料類型,即可以隱式轉換的資料類型。

外鍵列和參照列必須建立索引,如果外鍵列不存在索引,mysql將自動建立索引。

 

一、SQL語句建立資料表並設定主外鍵關係

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),        -- 方式一:不指定外鍵名稱,資料庫自動產生    foreign key (CharID) references ChineseCharInfo(ID) on delete cascade on update cascade         -- 方式二:指定外鍵名稱為(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;

 

二、當資料表已經存在時,就要使用下面的方法建立主外鍵關係

-- 為表(demo.ChinesePinyinInfo)中欄位(CharID)添加外鍵,並指定外鍵名為(FK_Name)alter table demo.ChinesePinyinInfo add constraint FK_Name foreign key (CharID) references ChineseCharInfo(ID);-- 為表(demo.ChinesePinyinInfo)中欄位(CharID)添加外鍵,不指定外鍵名,由資料庫自動產生外鍵名alter table demo.ChinesePinyinInfo add foreign key (CharID) references ChineseCharInfo(ID);

 

三、刪除主外鍵約束

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

 

四、主外鍵關係的約束

如果子表試圖建立一個在主表中不存在的外索引值,資料庫會拒絕任何insert或update操作。

如果主表試圖update或者delete任何子表中存在或匹配的外索引值,最終動作取決於外鍵約束定義中的on delete和on update選項。

on delete和on update都有下面四種動作。

cascade:主表刪除或更新相應的資料行,則子表同時刪除或更新與主表相匹配的行,即串聯刪除、更新。set null:主表刪除或更新相應的資料和,則子表同時將與主表相匹配的行的外鍵列置為null。當外鍵列被設定為not null時無效。no action:資料庫拒絕刪除或更新主表。restrict:資料庫拒絕刪除或更新主表。如果未指定on delete或on update的動作,則on delete或on update的預設動作就為restrict。

 

MySQL建立資料表並建立主外鍵關係

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.