我要做的是验证触发器上某个寄存器的电子邮件。例如,如果一个客户是第一次注册,它应该创建一个名和姓都有的电子邮件(例如:user)。last@email.com)但是,如果已经有一个注册者使用相同的名字,它应该以相同的方式创建电子邮件,在客户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语句中的逻辑,但仍然显示出相同的问题。
1条答案
按热度按时间ngynwnxp1#
你的逻辑是落后的。您有:
但你想:
当数据库中没有任何具有这些名称的现有记录时,您希望使用不带客户id的名称。
注意,我不确定你的支票寻找名字和姓氏分别是完全你想要的。你不想检查一下整个地址是否都找到了吗?
按照写的方式,如果一个叫joe bloggs的人试图加入,他就是joe.bloggs1,如果系统中还有其他人叫joe,即使没有其他的joe bloggs。