如何限制一个表的主键应该引用另一个表确切的外键数

时间:2017-09-01 22:39:10

标签: mysql foreign-keys primary-key

我想将一个表的确切数量的外键引用到另一个表中的一个主键。例如,如果我们得到三个确切的数字。一个主键应该只连接另一个表中的三个外键。我使用 USER 表来存储用户详细信息,使用 PRODUCT 表来存储用户的购买产品详细信息。如果 USER 表的主键为 ID PRODUCT 表通过 USER 表的外键引用> User_ID 列。一个用户ID(USER表中的ID列)应该限制在 PRODUCT 表中的三个记录的确切数量。用户最多可以购买三个产品,而不是超过该产品。我可以在MySQL中这样做吗?

1 个答案:

答案 0 :(得分:1)

你必须在MySQL中编写一个触发器来执行此操作。这是一个例子:

mysql> DELIMITER ;;

mysql> CREATE TRIGGER limit123 BEFORE INSERT ON Product
FOR EACH ROW BEGIN
    IF ((SELECT COUNT(*) FROM Product WHERE user_id = NEW.user_id) > 2)
    THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Only three products per user allowed';
    END IF;
END;;

mysql> DELIMITER ;

mysql> INSERT INTO Product SET user_id=1;
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Product SET user_id=1;
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Product SET user_id=1;
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO Product SET user_id=1;
ERROR 1644 (45000): Only three products per user allowed