从mysql触发器插入多个表

时间:2015-03-04 17:31:56

标签: mysql database

运行MySQL 5.5.8我想通过触发器将记录插入到多个表中。到目前为止,这是我的触发器:

CREATE TRIGGER userlevel_insert 插入db.tablename之后 对于每一行   INSERT IGNORE INTO db.differenttable(col1,col2)VALUES(NEW.val1,2);

这很有效。没有任何问题。但是我希望插入命中多个表。该表实际上是相同的结构,但在不同的数据库中。以下引发错误:

CREATE TRIGGER userlevel_insert 插入db.tablename之后 对于每一行   INSERT IGNORE INTO db.differenttable(col1,col2)VALUES(NEW.val1,2);   INSERT IGNORE INTO db.secondtable(col1,col2)VALUES(NEW.val1,2);

错误是: 错误代码:1054 未知列' NEW.val1'在'字段列表'

那么如何使用触发器将相同的数据插入多个表中呢?

1 个答案:

答案 0 :(得分:1)

我在其他地方找到了这个解决方案:将新值设置为变量,然后插入到表中。可能存在性能问题,但我的插入只会每天运行一次,并且添加的记录总数将是最小的。我可以看到这作为存储过程更有效,但现在可以使用。

CREATE TRIGGER doku_users_ins AFTER INSERT ON users_web.users
       FOR EACH ROW
       BEGIN

                DECLARE new_pass VARCHAR(255);         -- choose the datatypes
                DECLARE new_email VARCHAR(255);        -- 
                DECLARE new_user INT;                  --

                SET new_pass = NEW.pass ; 
                SET new_email = NEW.email ;
                SET new_user = NEW.user ;

                INSERT INTO users_web.doku_users (login, pass, email)
                       VALUES (new_user, md5(new_pass), new_email);

                INSERT INTO users_web.doku_usergroup (uid, gid)
                       SELECT du.uid, '2' FROM doku_users du
                            WHERE new_user = du.login;

       END |

在dba.stackexchange上为ypercube提供解决方案。