我将列entidade设置为NULL但是如果用户将列级别设置为值4,我希望它为NOT NULL。我已经检查了javascript,如果用户选择4级别,则entidade不能为NULL但是我怎样才能在MySQL上实现相同的目标?
CREATE TABLE IF NOT EXISTS `users` (
id int(11) NOT NULL AUTO_INCREMENT,
username VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL,
password CHAR(64) COLLATE utf8_unicode_ci NOT NULL,
salt CHAR(16) COLLATE utf8_unicode_ci NOT NULL,
email VARCHAR(255) COLLATE utf8_unicode_ci NOT NULL,
level BIGINT UNSIGNED NOT NULL,
entidade INT UNSIGNED NULL,
PRIMARY KEY (id),
UNIQUE KEY username (username),
UNIQUE KEY email (email),
FOREIGN KEY (level) REFERENCES levels(idlevel),
FOREIGN KEY (entidade) REFERENCES entidade(identidade)
)
答案 0 :(得分:1)
您可以使用触发器实现此目的
CREATE TRIGGER tg_bi_users
BEFORE INSERT ON users
FOR EACH ROW
SET NEW.level = IF(NEW.level = 4 AND NEW.entidade IS NULL, NULL, NEW.level);
CREATE TRIGGER tg_bu_users
BEFORE UPDATE ON users
FOR EACH ROW
SET NEW.level = IF(NEW.level = 4 AND NEW.entidade IS NULL, NULL, NEW.level);
如果满足您的条件,诀窍就是违反NOT NULL
一个列的限制(我选择level
)。
这是 SQLFiddle 演示。 尝试取消注释上一个插入语句并执行Build Schema
。
如果您使用的是MySQL 5.5或更高版本,并希望生成更有意义的错误消息,那么您可以使用SIGNAL
语法。