mysql触发器begin end语句怎么用

rock_cb 2013-08-09 10:22:23
create trigger tri_users
before insert on users
for each row
begin
insert into users1 (usernmae,password) values ('999','999');
set new.id = 100;
end

mysql是不是不支持begin end语句啊,去掉begin end就能建立触发器了,但是不能一次触发多条语句,网上的人又说mysql也能用begin end的,可是我就是不成功,还是说我用phpMyAdmin的关系,真心不懂,在线求结果!!!
...全文
4240 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tianlove987 2014-06-27
  • 打赏
  • 举报
回复
应该是需要用DELIMITER重新定义一个结束符,将分号临时替换掉,就行了。 不然读到触发器中的分号就执行,语法不全,当然报错了
ymx200472 2014-06-19
  • 打赏
  • 举报
回复
以上的语句,在mysql 命令行客户端 测试通过, 但是 mysql 自产的workbench就不行了。
ymx200472 2014-06-19
  • 打赏
  • 举报
回复
楼主,你的这个问题是查询定界符没更改导致的。 你在建立触发器之前,先执行这个语句 DELIMITER // ;(这一句把原来默认的查询结尾定界符--分号 改为 //(两个反斜杠),然后,你就可以在begin ....end 中间 的每一句加 分号,最后在end的 后面,以// 作结束。 因为新的语句定界符已经是// 。 触发器建立后,你可以根据情况,把查询定界符// 改为原来的分号 , 使用 delimiter ;// 语句
dong_y888 2013-08-11
  • 打赏
  • 举报
回复
只要你的表中没有触发器,是要可以建立的
rock_cb 2013-08-09
  • 打赏
  • 举报
回复
引用 9 楼 WWWWA 的回复:
[quote=引用 8 楼 u011642634 的回复:] [quote=引用 7 楼 wwwwb 的回复:] DELIMITER $$ CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END$$ DELIMITER ;
不行啊,这个也运行不了[/quote]
mysql> DELIMITER $$
mysql>     CREATE TRIGGER testref BEFORE INSERT ON test1
    ->      FOR EACH ROW BEGIN
    ->        INSERT INTO test2 SET a2 = NEW.a1;
    ->        DELETE FROM test3 WHERE a3 = NEW.a1;
    ->        UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
    ->      END$$
Query OK, 0 rows affected (0.05 sec)

mysql>   DELIMITER ;
mysql>
[/quote]
引用 9 楼 WWWWA 的回复:
[quote=引用 8 楼 u011642634 的回复:] [quote=引用 7 楼 wwwwb 的回复:] DELIMITER $$ CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END$$ DELIMITER ;
不行啊,这个也运行不了[/quote]
mysql> DELIMITER $$
mysql>     CREATE TRIGGER testref BEFORE INSERT ON test1
    ->      FOR EACH ROW BEGIN
    ->        INSERT INTO test2 SET a2 = NEW.a1;
    ->        DELETE FROM test3 WHERE a3 = NEW.a1;
    ->        UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
    ->      END$$
Query OK, 0 rows affected (0.05 sec)

mysql>   DELIMITER ;
mysql>
[/quote]你用的是什么版本的mysql,我的5.5版本不支持,不过你的语法的确能用,谢谢啦
WWWWA 2013-08-09
  • 打赏
  • 举报
回复
引用 8 楼 u011642634 的回复:
[quote=引用 7 楼 wwwwb 的回复:] DELIMITER $$ CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END$$ DELIMITER ;
不行啊,这个也运行不了[/quote]
mysql> DELIMITER $$
mysql>     CREATE TRIGGER testref BEFORE INSERT ON test1
    ->      FOR EACH ROW BEGIN
    ->        INSERT INTO test2 SET a2 = NEW.a1;
    ->        DELETE FROM test3 WHERE a3 = NEW.a1;
    ->        UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
    ->      END$$
Query OK, 0 rows affected (0.05 sec)

mysql>   DELIMITER ;
mysql>
rock_cb 2013-08-09
  • 打赏
  • 举报
回复
引用 7 楼 wwwwb 的回复:
DELIMITER $$ CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END$$ DELIMITER ;
不行啊,这个也运行不了
wwwwb 2013-08-09
  • 打赏
  • 举报
回复
DELIMITER $$ CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END$$ DELIMITER ;
rock_cb 2013-08-09
  • 打赏
  • 举报
回复
引用 5 楼 wwwwb 的回复:
你在MYSQL命令行下输入上述命令,提示什么
wwwwb 2013-08-09
  • 打赏
  • 举报
回复
你在MYSQL命令行下输入上述命令,提示什么
rock_cb 2013-08-09
  • 打赏
  • 举报
回复
引用 2 楼 wwwwb 的回复:
DELIMITER $$ CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END$$ DELIMITER ;
什么意思啊,我运行了还是不行,begin end到底要怎么用,求解释
rock_cb 2013-08-09
  • 打赏
  • 举报
回复
引用 1 楼 rucypli 的回复:
DELIMITER | CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END |
什么意思啊,我运行了还是不行,begin end到底要怎么用,求解释
wwwwb 2013-08-09
  • 打赏
  • 举报
回复
DELIMITER $$ CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END$$ DELIMITER ;
rucypli 2013-08-09
  • 打赏
  • 举报
回复
DELIMITER | CREATE TRIGGER testref BEFORE INSERT ON test1 FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1; DELETE FROM test3 WHERE a3 = NEW.a1; UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1; END |
ACMAIN_CHM 2013-08-09
  • 打赏
  • 举报
回复
你的表上已经有了这个同样的BEFORE INSERT ON test1触发器了。

56,800

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧