CREATE TRIGGER ttt2 BEFORE INSERT ON io
FOR EACH ROW
IF NEW.qqq1<>0 THEN
 SET NEW.qqq3 = (select qqq from ggg where nnn=NEW.nnn) + NEW.qqq1;
END IF;
总是提示:
MySQL 返回: #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 '' at line 4 

解决方案 »

  1.   

    测试没有问题,估计你没有加 delimiter //吧。mysql> delimiter //
    mysql> CREATE TRIGGER ttt2 BEFORE INSERT ON io
        -> FOR EACH ROW
        -> IF NEW.qqq1<>0 THEN
        ->   SET NEW.qqq3 = (select qqq from ggg where nnn=NEW.nnn) + NEW.qqq1;
        -> END IF;
        -> //
    Query OK, 0 rows affected (0.03 sec)mysql> delimiter ;
    mysql>
      

  2.   

    代码没有问题,你是在命令行下输入?
    delimiter $$
    CREATE TRIGGER ttt2 BEFORE INSERT ON io
    FOR EACH ROW
    begin
    IF NEW.qqq1<>0 THEN
     SET NEW.qqq3 = (select qqq from ggg where nnn=NEW.nnn) + NEW.qqq1;
    END IF;
    end $$
    delimiter ;
      

  3.   

    对不起我忘记说了,我是在phpMyAdmin里面执行的
      

  4.   

    CREATE TRIGGER ttt2 BEFORE INSERT ON io
    FOR EACH ROW
    IF NEW.qqq1<>0 THEN
     SET NEW.qqq3 = (select qqq from ggg where nnn=NEW.nnn) + NEW.qqq1;
    END IF;
    对,就是上面的代码,帮忙复制到phpMyAdmin里面执行试试吧
      

  5.   

    没有BEGIN、END吗
    delimiter $$
    CREATE TRIGGER ttt2 BEFORE INSERT ON io
    FOR EACH ROW
    begin
    IF NEW.qqq1<>0 THEN
     SET NEW.qqq3 = (select qqq from ggg where nnn=NEW.nnn) + NEW.qqq1;
    END IF;
    end $$
    delimiter ;
      

  6.   

    use `test`;create table io(qqq1 int, qqq3 int, nnn int);
    create table ggg(qqq int, nnn int);DELIMITER $$
    use `test`$$CREATE TRIGGER ttt2 BEFORE INSERT ON io
    FOR EACH ROW
    begin
        IF NEW.qqq1<>0 THEN
         SET NEW.qqq3 = (select qqq from ggg where nnn=NEW.nnn) + NEW.qqq1;
        end if;
    END  我这个可以在phpadmin里面跑的通的。
      

  7.   

    把delimiter // 加上再试。
      

  8.   

    加上DELIMITER,到MYSQL的命令行下执行。
      

  9.   

    #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 '' at line 5
    就是不行,上面的话到底什么意思啊
      

  10.   

    错误
    SQL 查询:  CREATE TRIGGER ttt2 BEFORE INSERT ON io
    FOR EACH
    ROW 
    BEGIN 
    IF NEW.qqq1 <>0
    THEN 
    SET NEW.qqq3 = ( SELECT qqq
    FROM ggg
    WHERE nnn = NEW.nnn ) + NEW.qqq1;MySQL 返回: #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 '' at line 5 begin end 都加了,分号也有,就是通过不了,奇怪啦
      

  11.   

    命令行也报错,我疯了,大家帮看看吧,初学mysql,还挺麻烦,真晕
    mysql> use `test`;
    Database changed
    mysql>
    mysql> CREATE TRIGGER ttt2 BEFORE INSERT ON io
        -> FOR EACH ROW
        -> begin
        ->     IF NEW.qqq1<>0 THEN
        ->      SET NEW.qqq3 = (select qqq from ggg where nnn=NEW.nnn) + NEW.qqq1;
    ERROR 1064 (42000): 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 '' at
    line 5
    mysql>     end if;
    ERROR 1064 (42000): 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 'end i
    f' at line 1
    mysql> END
        ->
        ->
      

  12.   

    在命令行下,创建trigger之前,
    执行:
    mysql>delimiter //
    然后,再执行你那段create trigger
    在该句末尾,另起一行,
    输入
    mysql>//
    这样,trigger就会成功了。
      

  13.   

    最后装上SQLyog,按照它上面新建触发器的格式输入执行,成功了DELIMITER $$CREATE
        /*[DEFINER = { user | CURRENT_USER }]*/
        TRIGGER `test`.`wwww1` BEFORE INSERT
        ON `test`.`io`
        FOR EACH ROW BEGIN
     IF NEW.qqq1<>0 THEN
     SET NEW.qqq3 = (select qqq from ggg where nnn=NEW.nnn) + NEW.qqq1;
     END IF;
        END$$DELIMITER ;SQLyog真棒视图存储过程函数触发器全都列出来,清清楚楚,创建修改也有固定格式让用习惯图形界面的mssql的我用起来很方便呵呵,强力推荐