MYSQL:有没有办法在触发器上创建新表或DROP现有表?

时间:2017-08-18 18:41:45

标签: mysql database

有没有办法在触发器中创建或删除表?

例如:如果我有两个表,table1和table2。

我想在table2上创建一个触发器,这样每当table1获得新的插入值或更新时,删除当前table2,然后创建table3(包含table1中更改的table2的新版本)

我可以在Mysql中做这样的事情吗?如果有方法会有什么样的语法?

1 个答案:

答案 0 :(得分:0)

没有

https://dev.mysql.com/doc/refman/5.7/en/trigger-syntax.html说:

  

触发器不能使用显式或隐式开始或结束事务的语句,例如START TRANSACTION,COMMIT或ROLLBACK。 (允许ROLLBACK到SAVEPOINT,因为它不会结束事务。)。

所有DDL语句都会导致隐式COMMIT。

以下是一个例子:

mysql> create trigger t after insert on mytable for each row
    create table if not exists foo (i int);

ERROR 1422 (HY000): Explicit or implicit commit is not allowed in stored function or trigger.

您的用例听起来像是一个糟糕的设计。 INSERT和UPDATE只会影响数据,不会产生改变表结构的副作用。