[SQL ] trigger觸發問題

作者: ruisme (RU)   2015-06-11 19:19:15
(針對 SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行)
資料庫名稱:MySQL
資料庫版本:5.7.7
內容/問題描述:
各位板上先進大家好,小弟PPT第一次PO文,請多多指教。
小弟目前設計一個資料庫有4個表格,就稱他為ABCD表格
A表格紀錄駕駛資料,欄位有:駕駛id、駕駛名稱
B表格紀錄車輛資料,欄位有:車輛id、載客(無載客為0有載客為1)
C表格紀錄叫車紀錄(客人上車前紀錄),欄位有:叫車紀錄id、駕駛名稱
D表格紀錄載客紀錄(客人下車後記錄),欄位有:載客紀錄i、金額d
我在C表格寫了一個trigger,想要在C欄位輸入資料前,將B表格載客的0更新為1
語法:CREAT TRIGGER `NAME` BEFORE INSERT ON `叫車紀錄` FOR EACH ROW
BEGIN
UPDATE A, B, C set B.載客='1'
where A.駕駛id = C.駕駛id
and A.車輛id = B.車輛id;
END
輸入完畢後,出現一個奇怪的問題,我要在C表格輸入兩筆資料才會成功更新載客,
也就是第1筆、第3筆資料輸入完全沒有觸發trigger。
後來依照一樣的語法在D表格寫一個trigger(把載客改回0)
出現一模一樣的結果,第一筆資料輸入無法觸發trigger。
另外有個更奇怪問題,我輸入完trigger觸發失敗後,想休息一下先關掉程式,
再打開後我的資料庫就打不開那幾個表格了,一直轉圈圈。後來好像有跑出bug
之類的訊息。
我只是剛學DB新手,如果是很低端的錯誤請鞭小力一點。
還請各位先進替小的解惑。萬分感激。
作者: ruisme (RU)   2015-06-11 19:27:00
BUG是 索引超出範圍。必須為非負數且小於集合的大小。我把資料表刪掉問題1就沒了,但是問題2重建後還是存在說反了 問題2消失 問題1還是存在
作者: bluegti (喵喵)   2015-06-11 22:16:00
UPDATE B set B.載客='1' where B.車輛id IN (SELECTA.車輛id FROM A WHERE A.駕駛id = ROW.駕駛id );不知道可不可以!?
作者: moyasi (Simple Life)   2015-06-12 22:30:00
C表格存的應該是 叫車紀錄id 駕駛id 車輛idUPDATE B set B.載客='1' where B.車輛id = new.車輛id

Links booklink

Contact Us: admin [ a t ] ucptt.com