如何防止创建两个字段的值相同的记录?

时间:2013-04-26 21:14:17

标签: mysql

我有下表。

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

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

有没有办法创建规则以防止在first_name等于nick_name的情况下插入记录?

3 个答案:

答案 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 INSERTBEFORE 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触发器。