如何限制一个 table 主键应该引用另一个 table 确切数量的外键
how to restrict one table primary key should reference to another table exact number of foreign key
我想将一个 table 的外键的确切数量引用到另一个 table.as 中的一个主键,如果我们得到确切的数量 three.one 主键应该在另一个 table 中仅连接三个外键。我使用 USER table 存储用户详细信息,使用 PRODUCT table 存储用户购买产品的详细信息。如果 USER table 的主键为 ID 和 PRODUCT table通过 User_ID 列具有对 USER table 的外键引用。一个用户id(USER table中的ID列)应该限制在PRODUCT table.simply中的三个记录的确切数量,用户最多可以购买三个产品,不止于此。我可以在 MySQL 中这样做吗?
您必须编写触发器才能在 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
我想将一个 table 的外键的确切数量引用到另一个 table.as 中的一个主键,如果我们得到确切的数量 three.one 主键应该在另一个 table 中仅连接三个外键。我使用 USER table 存储用户详细信息,使用 PRODUCT table 存储用户购买产品的详细信息。如果 USER table 的主键为 ID 和 PRODUCT table通过 User_ID 列具有对 USER table 的外键引用。一个用户id(USER table中的ID列)应该限制在PRODUCT table.simply中的三个记录的确切数量,用户最多可以购买三个产品,不止于此。我可以在 MySQL 中这样做吗?
您必须编写触发器才能在 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