iT邦幫忙

DAY 30
18

MySQL那些事兒系列 第 30

關於外鍵限制的探討(三)

  • 分享至 

  • twitterImage
  •  

接續昨天的外鍵限制探討.
昨天用CASCADE把初音的資料都刪除了.
泰大就用初音的逆襲.
今天改用另一種.
修改Billings

ALTER TABLE Billings
  DROP PRIMARY KEY
     ,
  DROP FOREIGN KEY Billings_ibfk_2;


ALTER TABLE Billings
  ADD COLUMN billid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

ALTER TABLE Billings
MODIFY galid INT UNSIGNED;

ALTER TABLE Billings
  ADD CONSTRAINT FOREIGN KEY (galid) REFERENCES Girls (galid)
   ON UPDATE SET NULL
   ON DELETE SET NULL;

修改Worklog

ALTER TABLE Worklog
 DROP PRIMARY KEY
    ,
 DROP FOREIGN KEY Worklog_ibfk_2;

ALTER TABLE Worklog
  ADD COLUMN workid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST
    ,
MODIFY galid INT UNSIGNED;

ALTER TABLE Worklog
  ADD CONSTRAINT FOREIGN KEY (galid) REFERENCES Girls (galid)
   ON UPDATE SET NULL
   ON DELETE SET NULL;

將 希崎ジェシカ 的資料在 Girls 裡面刪除.

DELETE 
  FROM Girls
 WHERE name = '希崎ジェシカ';

查看 Billings 與 Worklog 裡的資料.

SELECT *
  FROM Billings;

+--------+-------+------------+-----------+
| billid | galid | bill_date  | bill_rate |
+--------+-------+------------+-----------+
|      1 |     2 | 2013-01-01 |        26 |
|      2 |     2 | 2013-07-01 |        32 |
|      3 |  NULL | 2013-01-01 |        24 |
|      4 |     4 | 2013-01-01 |        27 |
|      5 |     4 | 2013-08-01 |        35 |
+--------+-------+------------+-----------+

SELECT *
  FROM Worklog;

+--------+-------+------------+-----------+
| workid | galid | work_date  | work_hour |
+--------+-------+------------+-----------+
|      1 |     2 | 2013-02-02 |         4 |
|      2 |     2 | 2013-08-02 |         6 |
|      3 |  NULL | 2013-03-01 |         6 |
|      4 |  NULL | 2013-08-03 |         8 |
|      5 |     4 | 2013-06-01 |         3 |
|      6 |     4 | 2013-09-01 |         5 |
+--------+-------+------------+-----------+

都變成NULL了.

外鍵限制在資料庫系統中是很重要的,我們在使用資料庫
時對外鍵限制的行為有深入的了解,對開發系統能收事半
功倍之效.

這三天的例子,將MySQL外鍵限制裡的RESTRICT, CASCADE
與 SET NULL 均做了一番推演.
應用上還可以將 ON DELETE 與 ON UPDATE 分別設定,
可以視業務需要,自行搭配.

30天的鐵人賽,終於到第30篇了.
原本今年不打算參加的,後來在好友的鼓勵與建議下,
還是繼續去年的MySQL主題,繼續發表了30篇.
去年的主題搭配了Python與一些Linux效能方面的整合
監控,繪製了一些RRDTool的圖形,並未完全聚焦在MySQL上.
今年以MySQL的一些設定與應用為主,以及索引的探討,
Profing等等,包含許多不同的面向,希望對大家在使用
MySQL的時候,能夠提供一些參考.


上一篇
關於外鍵限制的探討(二)
系列文
MySQL那些事兒30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
CalvinKuo
iT邦大師 7 級 ‧ 2013-10-30 11:28:46

恭喜小雨大完賽...
讚讚喜歡簽名拍手拍手沙發

看更多先前的回應...收起先前的回應...

來一位古典美女吧.

鐵殼心 iT邦高手 1 級 ‧ 2013-10-30 12:48:59 檢舉

總裁 iT邦好手 1 級 ‧ 2013-10-30 16:56:43 檢舉

怎麼把girls都刪掉了....哭

沒有都刪啦....

我要留言

立即登入留言