
mysql触发器如何对本表进行操作?我是插入一行,如果status字段是‘default’的话就更新新以前的行。
CREATETRIGGERabcBEFOREINSERTONvehicleFOREACHROWBEGINIFNEW.status='default'THENSETstat...
CREATE TRIGGER abc BEFORE INSERT ON vehicle
FOR EACH
ROW
BEGIN
IF NEW.status ='default'
THEN
SET status ='' WHERE alias = NEW.alias AND vid <> NEW.vid;
ENDIF;
END;
提示‘status’ 无法识别 展开
FOR EACH
ROW
BEGIN
IF NEW.status ='default'
THEN
SET status ='' WHERE alias = NEW.alias AND vid <> NEW.vid;
ENDIF;
END;
提示‘status’ 无法识别 展开
展开全部
CREATE TRIGGER abc BEFORE INSERT ON vehicle
FOR EACH
ROW
BEGIN
declare @sta char(10); //和你表中的数据类型一致
declare @alias char(10); //和你表中的数据类型一致
declare @vid char(10); //和你表中的数据类型一致
select NEW.status into @sta from NEW;
select NEW.alias into @alias from NEW;
select NEW.vid into @vid from NEW;
IF @sta ='default'
THEN
update vehicle SET status ='' WHERE alias = @alias AND vid <> @vid;
ENDIF;
END;
FOR EACH
ROW
BEGIN
declare @sta char(10); //和你表中的数据类型一致
declare @alias char(10); //和你表中的数据类型一致
declare @vid char(10); //和你表中的数据类型一致
select NEW.status into @sta from NEW;
select NEW.alias into @alias from NEW;
select NEW.vid into @vid from NEW;
IF @sta ='default'
THEN
update vehicle SET status ='' WHERE alias = @alias AND vid <> @vid;
ENDIF;
END;
追问
按照你的修改如下:
declare tsta varchar(20);
declare talias varchar(64);
declare tvid int(11);
也不行。提示:
check the manual that corresponds to your MySQL server version for the right syntax to
use near '' at line 4”。
你那个@sta的用法是sever 2008的,也不行。
好像declare 语法有错,但是找不到错的原因,请指教。谢谢!
追答
在触发器中不能使用UPDATE语句更新本表的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
触发器引用旧值,使用 old.status, old.alias 方式。
追问
提示''Updating of OLD row is not allowed in trigger''。不行!
追答
1 mysql的触发器有以下限制:
* 不能使用insert, update等语句更新自身表(为了防递归);只可以使用set语句设new的值。
* 也没有提供类似 instend of 的替代触发器;
2 你的这个需求使用触发器,似乎不可行。考虑做个存储过程或在事务中,封装你的插入逻辑。
3 判断并设置值的示例(并不能满足你的要求,只是示例set用法)
CREATE TRIGGER abc BEFORE INSERT ON vehicle
FOR EACH
ROW
BEGIN
IF NEW.status ='default'
THEN
SET new.status ='new value' ;
ENDIF;
END;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询