当我在插入之前创建的触发器以防止错误输入时,触发器已创建但在该表中插入值之后会创建错误,如错误 - 1054未知列'列名'在'字段列表' 。我想创建触发器以防止用户输入错误,然后在创建触发器后如何在表中插入值。代码如下所示触发器
CREATE DEFINER=`root`@`localhost` TRIGGER `mobile_no` BEFORE INSERT ON `invoiceform_clients` FOR EACH ROW
BEGIN
if length(clientPhonenumber)=10 THEN
insert into invoiceform_clients(clientPhonenumber) values(clientPhonenumber);
ELSE
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT= 'Mobile NO. must be in 10 digit';
end if;
END;
答案 0 :(得分:0)
您不需要在触发器体内重复插入语句 - 只需验证列值并在信号错误时抛出信号。如果触发器代码正常退出,则触发触发器的原始INSERT
也将成功。
您还应该测试NEW.clientPhonenumber
而不仅仅是clientPhonenumber
- 这指定您要检查记录中的字段,因为它将在INSERT
完成后存在。
触发器应如下所示:
CREATE DEFINER=`root`@`localhost` TRIGGER `mobile_no`
BEFORE INSERT ON `invoiceform_clients`
FOR EACH ROW
BEGIN
IF length(NEW.clientPhonenumber) != 10 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT= 'Mobile NO. must be in 10 digit';
END IF;
END;