create trigger tri_users
before insert on users
for each row
begin
insert into users1 (usernmae,password) values ('999','999');
set new.id = 100;
endmysql是不是不支持begin end语句啊,去掉begin end就能建立触发器了,但是不能一次触发多条语句,网上的人又说mysql也能用begin end的,可是我就是不成功,还是说我用phpMyAdmin的关系,真心不懂,在线求结果!!!

解决方案 »

  1.   

    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
    |
     
      

  2.   

    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 ;
      

  3.   

    什么意思啊,我运行了还是不行,begin end到底要怎么用,求解释
      

  4.   

    什么意思啊,我运行了还是不行,begin end到底要怎么用,求解释
      

  5.   

    你在MYSQL命令行下输入上述命令,提示什么
      

  6.   

    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 ;
      

  7.   

    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>
      

  8.   

    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>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>你用的是什么版本的mysql,我的5.5版本不支持,不过你的语法的确能用,谢谢啦
      

  9.   

    你的表上已经有了这个同样的BEFORE INSERT ON test1触发器了。
      

  10.   

    楼主,你的这个问题是查询定界符没更改导致的。
    你在建立触发器之前,先执行这个语句 DELIMITER //  ;(这一句把原来默认的查询结尾定界符--分号 改为 //(两个反斜杠),然后,你就可以在begin ....end 中间 的每一句加 分号,最后在end的 后面,以// 作结束。  因为新的语句定界符已经是// 。触发器建立后,你可以根据情况,把查询定界符// 改为原来的分号 , 使用 delimiter ;// 语句
      

  11.   

    以上的语句,在mysql 命令行客户端 测试通过, 但是 mysql 自产的workbench就不行了。 
      

  12.   

    应该是需要用DELIMITER重新定义一个结束符,将分号临时替换掉,就行了。
    不然读到触发器中的分号就执行,语法不全,当然报错了