[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