作者ruisme (RU)
看板Database
标题[SQL ] trigger触发问题
时间Thu Jun 11 19:19:15 2015
(针对
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新手,如果是很低端的错误请鞭小力一点。
还请各位先进替小的解惑。万分感激。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.116.103.172
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Database/M.1434021558.A.076.html
1F:→ ruisme: BUG是 索引超出范围。必须为非负数且小於集合的大小。 06/11 19:27
2F:→ ruisme: 我把资料表删掉问题1就没了,但是问题2重建後还是存在 06/11 20:32
3F:→ ruisme: 说反了 问题2消失 问题1还是存在 06/11 20:34
4F:→ bluegti: UPDATE B set B.载客='1' where B.车辆id IN (SELECT 06/11 22:16
5F:→ bluegti: A.车辆id FROM A WHERE A.驾驶id = ROW.驾驶id ); 06/11 22:16
6F:→ bluegti: 不知道可不可以!? 06/11 22:16
7F:推 moyasi: C表格存的应该是 叫车纪录id 驾驶id 车辆id 06/12 22:30
8F:推 moyasi: UPDATE B set B.载客='1' where B.车辆id = new.车辆id 06/12 22:33