我有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插入记录吗?
答案 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;