У меня есть две таблицы:
CREATE TABLE users (
user_id INT(7) NOT NULL,
restricted_type VARCHAR(64) NOT NULL
)
CREATE TABLE type_restrictions (
name VARCHAR(64) NOT NULL,
restriction INT NOT NULL
)
Я хочу проверить на вставке, что не более restriction
пользователей с restricted_type = type_restriction.name
.
На данный момент я вставляю данные с этим запросом:
INSERT INTO users (user_id, restricted_type) SELECT <id>, <type> FROM DUAL
WHERE NOT EXISTS (
SELECT 1
FROM type_restrictions T
WHERE T.name = <type> AND T.restriction < (
SELECT COUNT(*)
FROM users U
WHERE U.user_id = <id> AND U.restricted_type = <type>)
)
Но с двумя или более параллельными запросами можно получить больше пользователей с restricted_type
, чем фактическое ограничениедля этого типа.
Есть ли способ заставить такое ограничение работать?(Кроме того, я всегда вставляю только одну строку в запрос, если это помогает)