1

我想在插入之前检查是否存在带有触发器的行是我的表和触发器

表学生:ID | 姓名

触发验证:

CREATE TRIGGER `validation` BEFORE INSERT ON `students` 
FOR EACH ROW 
begin

declare var_name varchar(255);
declare check_row varchar(255);

set var_name = new.name;
select name into check_row from students where name = var_name;

end
4

1 回答 1

3

如果您使用的是存储过程,如果列上有唯一键,则可以使用处理程序完成此操作

CREATE PROCEDURE `student_create` (IN name_in VARCHAR(64), ...)
BEGIN

  SET @name = name_in;

  DECLARE EXIT HANDLER FOR SQLSTATE '23000'
    SET @name = CONCAT('dupe_',name_in);

  INSERT INTO students (name, ...) VALUES (@name, ...);

END$$

如果您真的打算使用触发器,那么您只需要一个 if

IF (SELECT id FROM students WHERE name = NEW.name) THEN
  SET var_name = CONCAT('dupe_',NEW.name);
END IF;

将 CONCAT 替换为您想要在name

于 2013-05-24T21:56:14.143 回答