我有下表。
CREATE TABLE people(
first_name VARCHAR(128) NOT NULL,
nick_name VARCHAR(128) NULL
)
如果他们尝试插入,我想阻止他们的昵称与他们的名字相同。我不想在任何一个列上创建索引只是一个规则,以防止插入first_name和nick_name相同的记录。
有没有办法创建规则以防止在first_name
等于nick_name
的情况下插入记录?
答案 0 :(得分: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错误,您可以处理它并显示一些警告。
答案 1 :(得分:0)
您只需要BEFORE INSERT
和BEFORE UPDATE
的触发器。如果它们相等,让它们检查值并中止操作。
警告:在较旧但仍广泛使用的MySQL版本(5.5 IIRC之前)中,您需要做一些不好的事情,例如从写入的表中读取或更容易从不存在的表/列中读取(以便中止)。 / p>
答案 2 :(得分: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触发器。