如果其他表中存在值,则限制插入/更新

时间:2014-01-19 13:07:20

标签: mysql sql triggers restrict

我有两张这样的桌子:

ips(ip PRIMARY KEY, device)
users_have_ips(user, ip FOREIGN KEY REFERENCES ips)

ip可以属于设备或用户。所以在更新ips.device时我必须检查ip不属于用户。模拟有更新/插入users_have_ips时检查ip不属于设备。

我会尝试使用以下元代码解决此问题:

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

我遇到的主要问题是RESTRICT。如何在不正确的外键上中止更改?另一个是触发器中的SELECT语句。

有没有更好的方法(可能没有触发器)来解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为您可能意味着使用ROLLBACK而不是RESTRICT。