我想有一个表,您可以为主键拥有最大行数(例如3)。如果主键已经有三行,并且添加了另一行,则应删除另一行。
示例:我有一张桌子,看起来像这样:
####################################
# PrimaryKey | AnotherValue #
####################################
| abcdef | 123 |
| abcdef | 456 |
| abcdef | 789 |
| xyz123 | sdf |
| xyz123 | 5s6 |
| 789klm | w8a |
| 789klm | a4d |
____________________________________
我试图创建一个只允许每一个用户使用最多三个条目的
CREATE TRIGGER maxThreeEntries AFTER INSERT ON table
BEGIN
DELETE FROM table WHERE (
SELECT PrimaryKey, COUNT(PrimaryKey)
FROM table
GROUP BY PrimaryKey
HAVING COUNT(PrimaryKey) > 3
);
END;
... 它不会编译。
内部
TRIGGER
-单独使用时-可以满足我的需要,并返回PrimaryKey以及相应的行数。 最佳答案
试试这个:
CREATE TRIGGER maxThreeEntries AFTER INSERT ON table
BEGIN
DELETE FROM table WHERE PrimaryKey IN (
SELECT PrimaryKey
FROM table
GROUP BY PrimaryKey
HAVING COUNT(PrimaryKey) > 3
);
END;
您需要比较delete WHERE子句中的内容。您可能还想在SELECT语句中添加WHERE子句,以确保只找到触发器要查找的主键。我不知道如何在mySQL中实现,我主要使用的是SQL Server