代码如下,第一次写,不知道什么地方错了,我想在删除第一个表的一条数据后,从删除的那条记录中查出tableName名字,前面加上"first" 为另一个表名,在此把这个表给删去!
delimiter //
CREATE  TRIGGER  `testDB`.`t_fist_second`  AFTER  DELETE 
        ON  testDB.first  FOR  EACH  ROW 
BEGIN 
set @tableName="first" + (select tableName from OLD);
drop table tableName; 
END; //
delimiter; 

解决方案 »

  1.   


    set @tableName=CONCAT('drop table ','first',OLD.tableName); 
    PREPARE stmt1 FROM @tableName
    EXECUTE stmt1 
      

  2.   

    MYSQL HELP中说明不支持在PREPARE中的DROP,不过,经测试是可以的。
      

  3.   

    按你说的改成
    delimiter //
    CREATE  TRIGGER  testDB.t_first_second  AFTER  DELETE 
            ON  testDB.first  FOR  EACH  ROW 
    BEGIN 
    set @tableName=CONCAT('drop table ','dfirst',OLD.tableName); 
    PREPARE stmt1 FROM @tableName; 
    EXECUTE stmt1;
    END; //
    delimiter; 却又提示出
    Dynamic SQL is not allowed in stored function or trigger;
      

  4.   

    在触发器 OR 函数中不支持动态SQL语句,只能用SP了,将字段中的内容保存
    到临时表中,用SP来执行。
      

  5.   

    在触发器中将删除的内容INSERT INTO 临时表中,用SP来执行上述动态SQL语句。