я получил две таблицы, как это:Ограничение вставки/обновления, если значение существует в другой таблице
ips(ip PRIMARY KEY, device)
users_have_ips(user, ip FOREIGN KEY REFERENCES ips)
IP-может принадлежать либо к устройству или пользователю. Поэтому я должен проверить, что ip не принадлежит пользователю при обновлении ips.device. Аналогом является проверка того, что ip не принадлежит устройству при обновлении/вставке users_have_ips.
Я бы попытаться решить это с помощью следующего мета-код:
CREATE TRIGGER tr_ips_ip4device
BEFORE UPDATE ON ips
FOR EACH ROW
BEGIN
IF NEW.device IS NOT NULL
AND NEW.ip IN (SELECT ip FROM users_have_ips)
THEN
RESTRICT -- with message "ip already belongs to an user"
END IF;
END
CREATE TRIGGER tr_users_have_ips_freeip
BEFORE INSERT+UPDATE ON users_have_ips
FOR EACH ROW
BEGIN
IF NEW.ip IN (SELECT ip FROM ips WHERE device IS NOT NULL)
THEN
RESTRICT -- with message "ip already belongs to an device"
END IF;
END
Основная проблема у меня есть Ограничить. Как я могу отменить изменения, например, при неправильных внешних ключах? Другой - инструкция SELECT в триггерах.
Есть ли лучший способ (возможно, без триггеров), чтобы решить эту проблему?
Не работает. – Chickenmarkus