桌上的电子邮件验证存在问题

时间:2018-11-27 21:34:37

标签: mysql sql triggers

我想做的是在触发器上验证某个注册器的电子邮件。例如,如果客户是首次注册,则应使用名字和姓氏创建电子邮件(例如: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语句中的逻辑,但仍然显示相同的问题。

1 个答案:

答案 0 :(得分:0)

您的逻辑是落后的。你有:

if((checkData = 1) and (checkData2 = 1)) then

但是你想要

if((checkData = 0) and (checkData2 = 0)) then

当数据库中没有任何具有这些名称的现有记录时,您要使用不带客户ID的名称。

请注意,我不确定您是否希望分别查找名字和姓氏。您是否要检查是否按原样找到整个地址?

编写方式是,如果某个名为Joe Bloggs的人尝试加入,即使系统中没有其他名为Joe的人,即使没有其他Joe Bloggs,他也将是joe.bloggs1。