外來鍵使用的好處在於可以幫助保持資料的一致性,當然缺點就是效能上的損失
而且只有在innodb型別的時候才可以使用外來鍵
測試的基本順序是這樣
1. 建表
create table person (
id smallint unsigned not null auto_increment,
name char(60) not null,
primary key (id)
)type=innodb;
create table shirt (
id smallint unsigned not null auto_increment,
style enum('t-shirt', 'polo', 'dress') not null,
color enum('red', 'blue', 'orange', 'white', 'black') not null,
owner smallint unsigned not null,
foreign key (owner) references person(id)
on delete cascade
on update cascade,
primary key (id)
)type=innodb;
注意table shirt, 建立外來鍵的語句和級聯更新刪除的語句
foreign key (owner) references person(id)
on delete cascade
on update cascade,
primary key (id)
2. 插入資料
person表
insert into person values (null, sean');
insert into person values (null, 'chen');
insert into person values (null, 'wei');
shirt表
insert into shirt values
(null, 'dress', 'orange', 1),
(null, 'polo', 'red', 2),
(null, 'dress', 'blue',1),
(null, 't-shirt', 'white',2);
注意:第四個欄位是代表owner, 這裡輸入person表中的id
建立起連線
3. 進行update關聯測試
3.1 更新person表的id
update person set id= 3 where id = 1;
3.2 檢視shirt表的owner變化
select * from shirt;
結果:最後owner為1的字段,內容變成3
4. 進行delete關聯測試
4.1 刪除person表中id=3的內容
delete from person where id=3;
4.2 檢視shirt表的變化
select * from shirt;
結果:發現owner=3的記錄被刪除
測試通過,發現資料保持一致。
另外,在shirt中嘗試刪除owner作為index, 系統報錯
另外,作者做了些實驗:
1. 嘗試通過shirt表的字段改變,來改變person表的相關字段
update shirt set owner=10 where owner=2
報錯查了mysql手冊,mysql5.0開始,自動把外鍵值作為index,詳細請檢視手冊
2. mysql browser作為客戶端工具,操作比較簡單,容易上手,可以參考使用
3. 沒有解決的問題:
shirt表中的owner作為index, 如何設定的?為什麼不能取消?
還請高手賜教!
4. 建立外來鍵的表,是跟誰被reference的進行修改
也就是shirt表跟誰著person表進行更改、刪除
而不是相反的過程!
MySQL學習系列二 MySQL函式
mysql提供了一些操作字串和日期等的內建函式,可以大大簡化我們的開發,這裡整理一下常用的函式。字串函式 bin number 返回給定整數值對應的二進位制字串,輸入null則返回null。select bin 10 1010cast experssion as type 將一種資料型別轉為另一種資...
MySQL學習(二) MySQL語法基礎
開啟命令列,通過net start 服務名 開啟資料庫服務端 其中服務名為安裝時設定的mysql服務,可通過查詢自己電腦得知。同樣,通過net stop 服務名 停止資料服務端。輸入mysql h localhost p 3306 u root p來輸入 其中localhost代表主機 p表示埠號,...
mysql 索引 二 MySQL學習之索引(二)
高效能的索引策略 isolating the column 孤立列就是說,這一列不能在表達示中或在乙個函式裡面,如 mysql select actor id from actor where actor id 1 5 錯誤 再如 mysql select where to days current...