MySQL 触发 select 插入行的正确值
MySQL trigger select correct value for inserted rows
我需要帮助在 MySql 中构建触发器。
我有一个 'employee' table 结构如下:
id
first name
role
我想创建一个触发器来自动将角色分配给插入的新员工,选择当前在 table 中较少出现的员工。
例如:有两个清洁工,只有 1 个 driver。通过插入字段,自动分配 driver 的角色。
我的问题不在于触发器结构而在于查询中 select 的正确作用。
你能帮帮我吗?
尝试:
CREATE TRIGGER tr_bi_employees
BEFORE INSERT
ON employees
FOR EACH ROW
SET NEW.role_id = ( SELECT role_id
FROM employees
GROUP BY role_id
ORDER BY COUNT(*) LIMIT 1 );
此触发器将 select 分配最少人数的工作并将其添加到角色列
架构 (MySQL v5.7)
CREATE TABLE worktable (
`id` INTEGER,
`first name` VARCHAR(5),
`role` VARCHAR(10)
);
INSERT INTO worktable
(`id`, `first name`, `role`)
VALUES
('1', 'test1', 'Cleaner'),
('2', 'test2', 'Cleaner'),
('3', 'test3', 'Driver'),
('4', 'test4', 'Dishwasher');
DELIMITER $$
CREATE TRIGGER `worktable_BEFORE_INSERT` BEFORE INSERT ON `worktable` FOR EACH ROW BEGIN
SET NEW.`role` := (SELECT `role` FROM worktable GROUP BY `role` ORDER BY COUNT(*) LIMIT 1);
END$$
DELIMITER ;
INSERT INTO worktable
(`id`, `first name`, `role`)
VALUES
('5', 'test5', '');
查询#1
SELECT * FROM worktable;
| id | first name | role |
| --- | ---------- | ---------- |
| 1 | test1 | Cleaner |
| 2 | test2 | Cleaner |
| 3 | test3 | Driver |
| 4 | test4 | Dishwasher |
| 5 | test5 | Driver |
我需要帮助在 MySql 中构建触发器。 我有一个 'employee' table 结构如下:
id
first name
role
我想创建一个触发器来自动将角色分配给插入的新员工,选择当前在 table 中较少出现的员工。 例如:有两个清洁工,只有 1 个 driver。通过插入字段,自动分配 driver 的角色。 我的问题不在于触发器结构而在于查询中 select 的正确作用。 你能帮帮我吗?
尝试:
CREATE TRIGGER tr_bi_employees
BEFORE INSERT
ON employees
FOR EACH ROW
SET NEW.role_id = ( SELECT role_id
FROM employees
GROUP BY role_id
ORDER BY COUNT(*) LIMIT 1 );
此触发器将 select 分配最少人数的工作并将其添加到角色列
架构 (MySQL v5.7)
CREATE TABLE worktable (
`id` INTEGER,
`first name` VARCHAR(5),
`role` VARCHAR(10)
);
INSERT INTO worktable
(`id`, `first name`, `role`)
VALUES
('1', 'test1', 'Cleaner'),
('2', 'test2', 'Cleaner'),
('3', 'test3', 'Driver'),
('4', 'test4', 'Dishwasher');
DELIMITER $$
CREATE TRIGGER `worktable_BEFORE_INSERT` BEFORE INSERT ON `worktable` FOR EACH ROW BEGIN
SET NEW.`role` := (SELECT `role` FROM worktable GROUP BY `role` ORDER BY COUNT(*) LIMIT 1);
END$$
DELIMITER ;
INSERT INTO worktable
(`id`, `first name`, `role`)
VALUES
('5', 'test5', '');
查询#1
SELECT * FROM worktable;
| id | first name | role |
| --- | ---------- | ---------- |
| 1 | test1 | Cleaner |
| 2 | test2 | Cleaner |
| 3 | test3 | Driver |
| 4 | test4 | Dishwasher |
| 5 | test5 | Driver |