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