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’ 无法识别
展开
 我来答
百度网友4b68195
2012-10-27 · TA获得超过1522个赞
知道大有可为答主
回答量:1773
采纳率:100%
帮助的人:1758万
展开全部
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;
追问
按照你的修改如下:

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语句更新本表的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gwbnet
2012-10-27 · TA获得超过894个赞
知道小有建树答主
回答量:350
采纳率:100%
帮助的人:234万
展开全部
触发器引用旧值,使用 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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式