【问题标题】:MySQL trigger select correct value for inserted rowsMySQL触发器为插入的行选择正确的值
【发布时间】:2020-09-07 08:32:01
【问题描述】:

我需要帮助在 MySql 中构建触发器。 我有一个结构如下的“员工”表:

id
first name
role

我想创建一个触发器来自动将角色分配给插入的新员工,选择当前在表中较少出现的角色。 例如:只有两名清洁工和一名司机。通过插入字段,自动分配司机的角色。 我的问题不是触发器结构,而只是在查询中选择正确的角色。 你能帮帮我吗?

【问题讨论】:

    标签: mysql sql database database-design


    【解决方案1】:

    试试:

    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 );
    

    【讨论】:

      【解决方案2】:

      此触发器将选择一个分配了最少人数的作业并将其添加到角色列中

      架构 (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     |
      

      View on DB Fiddle

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-29
        • 2013-05-24
        • 2013-08-22
        • 2019-09-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多