Mysql Trigger:结果由多行组成

时间:2012-06-08 21:55:41

标签: mysql triggers row

我有3张桌子:

模块:

id_module   | name
--------------------
1             users
2             roles
...

资料:

id_profile   | name
--------------------
1             admin
2             promoter

和许可

id   | id_profile  | id_module | read | write | modify | delete
---------------------------------------------------------------

我想要的是触发器是每次插入新模块时填充表格权限...但是对于每个现有的配置文件。

因此:

INSERT INTO `module` (`name`) VALUES
    ('user'),
    ('roles');

现有的配置文件 admin 发布商权限表将以这种方式填充:

id   | id_profile  | id_module | read | write | modify | delete
---------------------------------------------------------------
1      1             1           0      0       0        0
2      1             2           0      0       0        0
3      2             1           0      0       0        0
4      2             2           0      0       0        0

为此,我创建了以下触发器:

CREATE TRIGGER `create_permission` AFTER INSERT ON `module`
    FOR EACH ROW
    BEGIN
    DECLARE `my_profile` INT(11) ;

    SELECT id_profile INTO `my_profile` FROM profile WHERE state <>3;

    INSERT INTO `permission` (`id_profile`, `id_module`, `read`, `write`, `modify`, `delete`) VALUES(`my_profile`, NEW.`id_module `,0,0,0,0);

END;

当有个人资料时效果很好...当我返回时不止一个“结果由多行组成

我读到当你声明一个支持单个值的变量时会出现这个问题...你可以为表格配置文件的每个id插入记录吗?

1 个答案:

答案 0 :(得分:1)

正如您所发现的那样,您只能为变量指定标量值。

要迭代SELECT查询的许多结果,您需要使用CURSOR

我个人不喜欢繁琐的CURSOR语法。在您的特定情况下,我会建议更简单的INSERT INTO...SELECT技巧:

INSERT INTO permission (id_profile, id_module, read, write, modify, delete)
SELECT id_profile, NEW.id_module,0,0,0,0 FROM profile WHERE state <> 3;