close

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,因為存在華安這筆資料,資料庫會拒絕刪除「高級伴讀書僮」

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 snakylin 的頭像
    snakylin

    過雲痕

    snakylin 發表在 痞客邦 留言(2) 人氣()