參考:
說實話,這是乙個抄剩飯的文件。
因為考試。
在實際開發中,可能用外來鍵的情況不多,至少我設計我自己的專案是不會用外來鍵。用了後,資料不自由了。當然,如果表設計後,給資料表加上外來鍵,可能是一種不錯的選擇,但,自己的專案還是不會使用外來鍵來約束自己的資料。至少我在**中,做到部分的資料約束。
innodb,如果引擎不是innodb是無法新增外來鍵的。我試了,乙個小時,看了很多文件,然後51jb的**乙個文章講了關於innodb,必須是innodb,否則外來鍵的設定會失效。(雖然那個csdn的博文也講了,但我確實試了乙個小時,總以為是我的**的問題)
建表
create table class(
id int primary key auto_increment,
cname varchar(20) not null
)engine = innodb default charset=utf8;
create table student(
id int primary key auto_increment,
sname varchar(20) not null,
cid int not null,
constraint stu_f_key foreign key (cid) references class(id) on update cascade
)engine = innodb default charset=utf8;
# 插入資料
insert into class(cname) values('計應1班'),('計應2班');
insert into student(sname,cid) values('小皮',1),('小王',2);
操作因為使用了on update cascade
使用,我們修改class的id,相應的student的cid也會改變
關於on delete cascade
on delete ***,on update *** 屬於級聯操作,使用on delete時候要小心,因為如果使用on delete cascade ,如果刪了class的例項,則會刪除student的例項。
on delete set null。當外來鍵所約束的例項被刪除時,將當前例項的所有字段值設定為空。
其實用級聯很少,總是聽別人說影響效率,當然,資料小的時候,不會出什麼問題。如果資料大了,則需要優化資料庫和查詢語句。(不過這些目前我都沒有學)。
mysql關於外來鍵設定
今天在設計酒店管理系統時走了很多彎路 1.mysql使用的預設資料庫引擎myisam並不能很好支援外來鍵,事務等操作,外來鍵總是設定不上,需要將引擎改為innodb,這個是最完善支援各種sql操作的。engine innodb 2.在最初設計資料庫是就應當把所有關係想好,確認關係正確再去生成資料庫,...
關於MySQL 外來鍵索引
1 什麼時候需要用到外來鍵索引呢?答 a表中存在唯一索引id a,b表中的字段包含id a,由於b表自身已經有主鍵索引,此時如果將字段id a設定為外來鍵索引索引 foreign key 則建立外來鍵索引。使用場景 1 父表更新時,子表也更新 父表刪除時,如果 2 子表有匹配的項,則刪除失敗。3 父...
mysql書外來鍵 MySQL學習5 外來鍵續
一對多補充 級聯刪除 當一張表刪除記錄時,若繫結給了另一張表中的外來鍵,則一同刪除另一張表中關聯的記錄 更新於刪除都需要考慮到關聯與被關聯的關係 同步更新與同步刪除 被關聯表 create table dep id int primary key auto increment,dep name ch...