mysql 學習二 mysql中的外來鍵使用

2021-08-30 03:32:09 字數 2077 閱讀 8285

外來鍵使用的好處在於可以幫助保持資料的一致性,當然缺點就是效能上的損失

而且只有在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...