我想有一个表,您可以为主键拥有最大行数(例如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

09-26 01:39