--> 测试数据
create table tb (id int auto_increment primary key ,name varchar(100))--要求:
--向表中插入记录时,当name='张三' 或者'李四'
--入一条记录 name=‘王五'
--下面是我写的
create trigger t
after  insert on tb  
for each row
begin
  if  new.name='张三' or new.name='张三'
  insert into tb(name) values('李四')
  end if
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 'insert into tb(name) values('李四')
  end if
end' at line 6*/
帮忙看一下 

解决方案 »

  1.   

    create trigger t
    after insert on tb 
    for each row
    begin
    if new.name='张三' or new.name='张三' then
    insert into tb(name) values('李四');
    end if;
    end
      

  2.   

    create trigger t
    after insert on tb 
    for each row
    begin
    if new.name='张三' or new.name='张三' then
    insert into tb(name) values('李四');
    end if;
    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 'insert into tb(name) values('李四')' at line 6Execution Time : 00:00:00:000
    Transfer Time  : 00:00:00:000
    Total Time     : 00:00:00:000错误码: 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 'end if' at line 1Execution Time : 00:00:00:000
    Transfer Time  : 00:00:00:000
    Total Time     : 00:00:00:000错误码: 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 'end' at line 1Execution Time : 00:00:00:000
    Transfer Time  : 00:00:00:000
    Total Time     : 00:00:00:000
    */
      

  3.   


    mysql>delimiter $$
    mysql> create trigger t before insert on tb for each row
        -> begin
        -> if new.name='张三' or new.name='李四' then
        -> set new.name='李四';
        -> end if;
        -> end $$
      

  4.   

    无法实现,MYSQL的触发器中,无法操作本表。
      

  5.   

    语法错误可以如下修改,但逻辑上的限制无法突破。
    mysql> create table tb (id int auto_increment primary key ,name varchar(100));
    Query OK, 0 rows affected (0.09 sec)mysql>
    mysql> delimiter //
    mysql> create trigger t after  insert on tb
        -> for each row
        -> begin
        ->   if new.name='张三' or new.name='张三' then -- 缺少 then
        ->          insert into tb(name) values('李四'); -- 缺少分号
        ->   end if;
        -> end//
    Query OK, 0 rows affected (0.06 sec)mysql> delimiter ;
    mysql> insert into tb(name) values ('张三');
    ERROR 1442 (HY000): Can't update table 'tb' in stored function/trigger because i
    t is already used by statement which invoked this stored function/trigger.
    mysql>
      

  6.   

    mysql> delimiter $$
    mysql> create trigger t before insert on tb for each row
        -> begin
        -> if new.name='张三' or new.name='李四' then
        -> set new.name='李四';
        -> end if;
        -> end
        -> $$
    Query OK, 0 rows affected (0.03 sec)mysql> delimiter ;
    mysql> insert into tb (name) values ('张三');
    Query OK, 1 row affected (0.01 sec)mysql> select *from tb;
    +----+------+
    | id | name |
    +----+------+
    |  1 | 李四 |
    +----+------+
    1 row in set (0.00 sec)
      

  7.   


    create trigger tr_main_aaa 
    before insert 
    on t_aaa for each row 
    begin
    delete from t_aaa where a_id=2;
    end 无法操作本表,比较纠结啊,斑竹给解释下,触发器无法操作本表,是不是和锁有关系
      

  8.   

    我用的是SQLyogEnt,还是包语法错误
    大侠那我的逻辑如何实现?
    本想用 event的 但是 版本太低
      

  9.   

    我也用SQLYOG,新建TRIGGER,会自动加上delimiter $$
      

  10.   

    MYSQL限制,你要达到什么目的?如果只是要将NAME赋值一个固定的值
    before insert:
    set new.name='123'
      

  11.   

    方法一:使用 MYSQL event/ 操作系统的计划任务,每S检查一下,是否有新的记录插入,如何符合条件,则插入一条你需要的记录。
    方法二: 触发器中,插入到另一张结构完全相同的表,然后查询时使用 union all 总之这种需求很怪异! 业务上的逻辑应该在程序中实现而不是数据库层。
      

  12.   

    不是 是新插入一条 name为其它的记录
      

  13.   

    name为其他的记录,这个其他的NAME固定么?
      

  14.   

    5.0的不能用event吧?
    第二个方法不行,呵呵
    我们公司让我们必须每天都得登陆公司的oa,连续两天不登陆的罚款,
    说到这你知道我想干什么了吧
      

  15.   

    这种需要,直接用SQL语句就可以查出,哪些人连续两天没有登录。另开贴子,贴出你的表结构和需要,应该是一句SQL语句就可以搞定了。
      

  16.   

    那你还不如定时插入一条记录insert into xxx (f1,f2,f3,f4) select f1,f2,f3,'王五' where f4='张三' and date1='ssssss'
      

  17.   


    另征集定时执行mysql数据库任
    http://topic.csdn.net/u/20091020/22/c51bb709-6dbc-4fd1-b874-077714ed547e.html