接續昨天的外鍵限制探討.
昨天用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的時候,能夠提供一些參考.
恭喜小雨大完賽...
來一位古典美女吧.
怎麼把girls都刪掉了....
沒有都刪啦....