create database testing
default character set big5 collate big5_chinese_ci
create table a (aid
int(3) not null auto_increment,
atx varchar(6), primary
key(aid)) engine = innodb
create table b (bid
int(3) not null auto_increment,
btx varchar(6), aox
int(3), primary key(bid),
index(aox),
foreign key
b(aox)
references a(aid)
on delete cascade on update cascade)
engine = innodb
紅色:就是自己建立的
資料庫testing、表格a, b、欄位aid, atx, bid, btx, aox
default character set big5 collate big5_chinese_ci:
代表整個資料庫使用big5碼,檢查使用big5_chinses_ci
auto_increment:
自動增加,id常用的流水號,無論刪除資料或怎麼樣,它都會勇往直前的自動增加
primary key:
主鍵,這應該不用說明
engine = innodb:
這個就重要了,要使用mysql的關聯式、外鍵,必須將其引擎設為innodb
index:
aox要引用aid做為它的外鍵,那麼b.aox就必須設為index
foreign key
b(aox)
references a(aid):
只有mysql的sql語法才能這樣用,其他資料庫的處理方式是不同的
可以參考:http://www.1keydata.com/tw/sql/sql-foreign-key.html
另外,引用的aox與被引用的aid必須型態、長度一致
on delete cascade on update cascade:
表示刪除或修改時,資料會如何變動。然而不只cascade,共有四種:
cascade:父資料變動,子資料跟著變動。
set null:父資料變動,子資料設為空白。
no action:存在子資料時,不允許父資料變動。
restrict:聽說跟no action一樣。
舉例來說,代號9527的華安被升為高級伴讀書僮
aid = '1'
atx = '低等下人'
aid = '2'
atx = '高級伴讀書僮'
bid = '9527'
btx = '華安'
aox = '2'
如果是cascade,把「高級伴讀書僮」刪除,華安的資料就被刪除
如果是set null,把「高級伴讀書僮」刪除,aox會變成空白
如果是no action及restrict,因為存在華安這筆資料,資料庫會拒絕刪除「高級伴讀書僮」
留言列表