【发布时间】:2018-11-27 21:34:36
【问题描述】:
我想要做的是在触发器上验证某个寄存器的电子邮件。例如,如果客户是第一次注册,它应该创建一个包含名字和姓氏的电子邮件(例如:user.last@email.com),但是如果已经有一个同名的注册器它应该使用与 customer_id 后面的名字和姓氏相同的方式创建电子邮件(例如:user.last2@email.com)。
我目前的代码如下:
delimiter $
create trigger before_customer_insert
before insert on customer
for each row
begin
declare emailVal varchar(45);
declare checkData int;
declare checkData2 int;
set checkData = (select count(first_name) from customer where first_name = new.first_name);
set checkData2 = (select count(last_name) from customer where last_name = new.last_name);
if((checkData = 1) and (checkData2 = 1)) then
set new.email = (concat(new.first_name,'.', new.last_name, '@sakilacustomer.org'));
else
set new.email = (concat(new.first_name,'.', new.last_name, new.customer_id, '@sakilacustomer.oeg'));
end if;
if(new.kind_customer is null) then
set new.kind_customer = '1';
end if;
set new.active = 1;
end $
我遇到的问题是,当它是第一次注册时,它会插入电子邮件但带有 0,例如“name.last0@email.com”,如果我尝试插入相同的信息,则会显示相同的电子邮件.我尝试更改 if 语句中的逻辑,但仍然显示相同的问题。
【问题讨论】: