设置规则MySQL - 如果字段A是x,则字段B不能为NULL

时间:2013-11-21 17:06:59

标签: mysql

我将列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)
)

1 个答案:

答案 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语法。