MySQL插入条件

时间:2013-06-18 07:52:10

标签: mysql conditional

我想知道是否有办法在给定条件下限制MySQL INSERT,例如:

我们有一个包含项目的表和另一个包含员工的表。项目中允许的最大人数限制为5.我们如何在MySQL中执行此操作?

提前致谢, 马利

3 个答案:

答案 0 :(得分:1)

您必须阅读constraintcheck(或基于值)类型。

CREATE TABLE tbl (
   ...
   numPeople INT CHECK (numPeople <= 5)
   ...
)

是的,抱歉,检查约束在MySQL中不起作用

答案 1 :(得分:1)

您不能通过架构强制执行此约束而不会破坏关系(即有5 employees列)。 MySQL不允许CHECK约束。

您可以在执行查询前单独SELECT员工人数,可以使用INSERT ... SELECT限制。

INSERT INTO Employees
    (employee, column, names)
SELECT
    ?, ?, ?
FROM
    Projects
    NATURAL JOIN Employees
WHERE
    projID = ?
GROUP BY
    projID
HAVING
    COUNT(empID) < 5

答案 2 :(得分:0)

在插入之前可能使用触发器来检查用户数量: -

DELIMITER $$

CREATE TRIGGER project_before_insert_allow_only_five_employees
     BEFORE INSERT ON project FOR EACH ROW
     BEGIN
          IF (SELECT COUNT(employee_id) FROM project WHERE project_id=NEW.project_id) > 4
          THEN
               SIGNAL SQLSTATE '45000'
                    SET MESSAGE_TEXT = 'Cannot add or update row: only 5 employees on a project';
          END IF;
     END;

未经过测试,并且假设您的项目表每个员工有一行(如果项目ID存储在employees表中,那么很容易修改,以便与之关联)。