2

我有下表。

CREATE TABLE people(
first_name VARCHAR(128) NOT NULL,
nick_name VARCHAR(128) NULL
)

如果他们尝试插入,我想防止人们将他们的昵称与他们的名字相同。我不想在任何一列上创建索引只是一个规则,以防止插入 first_name 和 nick_name 相同的记录。

有没有办法创建一个规则来防止插入first_name等于 的记录nick_name

4

3 回答 3

3
CREATE TRIGGER `nicknameCheck` BEFORE INSERT ON `people` FOR EACH ROW begin
  IF (new.first_name = new.nick_name) THEN
    SET new.nick_name = null;
  END IF;
END

或者您可以将 first_name 设置为 NULL,这将导致 SQL 错误,您可以处理它并显示一些警告。

于 2013-04-26T21:21:19.530 回答
0

您只需要BEFORE INSERT和的触发器BEFORE UPDATE。让它们检查值并中止操作,如果它们相等。

警告:在较旧但仍广泛使用的 MySQL 版本(5.5 IIRC 之前)上,您需要做一些不好的事情,例如从写入的表中读取或更容易从不存在的表/列中读取(以中止)。

于 2013-04-26T21:21:37.307 回答
0

AFTER INSERT 触发器测试和删除如果相同...

CREATE TABLE ek_test (
    id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    one INT NOT NULL,
    two INT NOT NULL
);

delimiter //
CREATE TRIGGER ek_test_one_two_differ AFTER INSERT ON ek_test 
FOR EACH ROW 
BEGIN
  IF (new.one = new.two) THEN
    DELETE FROM ek_test WHERE id = new.id;
  END IF;
END//
delimiter ;

INSERT INTO ek_test (one, two) VALUES (1, 1);

SELECT * FROM ek_test;

注意您还需要 AFTER UPDATE 触发器。

于 2017-07-31T14:42:23.357 回答