在mysql中创建触发器出错,高人解

CREATE TRIGGER insert_members_trigger BEFORE INSERT on uc_members
FOR EACH ROW BEGIN
set @myid:=NEW.uid;
set @name:=NEW.username;
set @pwd:=NEW.password;
set @email:=NEW.password;
set @regip:=NEW.regip;
set @regdate:=NEW.regdate;

insert into cdb_members (uid,username,password,groupid,regip,regdate,email,pmsound,showemail,newsletter,timeoffset) values (@myid,@name,@pwd,10,@regip,@regdate,@email,1,1,1,9999);

insert into coc_enewsmember (userid,username,password,email,registertime,groupid,checked) values (@myid,@name,@pwd,email,@regdate,1,1);
end;
这是错误
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set @myid:=NEW.uid' at line 3

还有一条
CREATE TRIGGER usertype_update AFTER UPDATE on uchome_spacefield
FOR EACH ROW
BEGIN
update uchome_space set usertype = new.field_1 where uid = old.uid;
end;
这是错误

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'update uchome_space set usertype = new.field_1 where uid = old.uid' at line 4
我用的是phpmyadmin

syntax错误是指你的语句结构错误,语法错误,就是说你的语句里面有疏忽的地方

第一个触发器里面
set @email:=NEW.password; 是不是改为set @email:=NEW.email;?猜测
虽然这个赋值语句可能没错,但是你下面的第一条insert语句里面cdb_members的showemail字段匹配的@email:=NEW.password,会出现类型转换错误的吧?你自己看看。
第二条insert语句
insert into coc_enewsmember (userid,username,password,email,registertime,groupid,checked) values (@myid,@name,@pwd,email,@regdate,1,1);
values后面的email肯定错了嘛,要改为@email?

第二个触发器也是类似的语法错误
create trigger的时候是on表 uchome_spacefield ,你下面的update的时候就是另外一张表uchome_space了,如果是两张不同的表的话,不能直接传的吧,new.field_1 和 uid = old.uid。

都是很粗心的错误,你自己看看对不对,希望对你有帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-08-25
你犯了三个错误——

一、赋值前没声明变量

MySQL在赋值给变量前应该首先用declare语句声明变量名和类型,例如declare myid int;

二、赋值语句错误

set @myid:=NEW.uid; 这条赋值语句是错误的。在MySQL里,赋值语句应该写做set myid=NEW.uid;

三、结束符没有指定

MySQL默认的语句结束符是分号;所以如果你在写触发器定义语句的过程中遇到了分号;则MySQL就认为定义语句结束了,从而造成这个触发器的定义是不完整的,因此出现了语法错误的提示。
改正的方法是在phpmyadmin命令框下的Delimiter(结束符)选项中改为其他的字符,例如斜线/。执行后就可以了。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网