MySQL ограничивает максимальное количество строк для одного и того же "пользовательского" значения

Как я могу ограничить в MySQL максимальное количество строк для одного и того же "пользовательского" значения?

Например, у меня есть таблица с колонками

id | user | data

и я хотел бы ограничить максимальное количество строк до 5 для каждого пользователя (то же значение "пользователь").

Моя идея состоит в том, чтобы использовать транзакции (InnoDB):

start transaction
insert row with user = "XXX"
count rows, where user = "XXX"
if count < 5 commit else rollback

Хороша ли моя идея или существует другое (лучшее) решение?

2 ответа

Я думаю, что все в порядке, вы можете сделать

select count(1) from table where user='XXX'

и проверьте количество перед выполнением вставки.

Это можно сделать с помощью специальной «двойной» таблицы:

      INSERT INTO table (id, user, data)
    SELECT 1, 'XXX', 'somedata' 
      FROM dual 
     WHERE NOT EXISTS (
         SELECT user
           FROM t
          WHERE user = 'XXX'
       GROUP BY user 
         HAVING COUNT(*) >= 5
     )
Другие вопросы по тегам