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
)