0

我有 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');

现有的配置文件管理员发起人权限表将以这种方式填充:

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 插入记录吗?

4

1 回答 1

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;
于 2012-06-09T22:09:26.653 回答