数据库

时间:2016-07-22 07:31:55

标签: php mysql database

我有一个使用php和mysql的社交登录系统,社交登录设置为多个场所。每个场地都有一个插入数据的数据库。除了在场地数据库中插入的数据外,所有场馆数据库上还有一个mysql触发器,可将数据插入一个大型数据库。

问题是有时会从场地数据库中遗漏数据,但我可以在大数据库中看到它,例如场地数据库会记录名称但不会记录他们的电子邮件,但是当我搜索大的名字时数据库我可以看到电子邮件。

我认为它可能与mysql触发器有关,这是随机发生的。在大约1000个中,将有50个缺少信息。下面是sql文件,它是所有场地数据库的模板。

DELIMITER $$
create trigger user_insert
AFTER INSERT
ON users 
FOR EACH ROW
BEGIN
DECLARE db varchar(50);
SELECT database() INTO db;
call insert_update_master_user(NEW.id,NEW.email,db);
END $$
DELIMITER ;


DELIMITER $$
create trigger user_update
AFTER UPDATE
ON users 
FOR EACH ROW
BEGIN
DECLARE db varchar(50);
SELECT database() INTO db;
call insert_update_master_user(NEW.id,NEW.email,db);
END $$
DELIMITER ;


DELIMITER $$
CREATE PROCEDURE `insert_update_master_user`(IN uid int(1), IN uemail varchar(255), IN udb varchar(50))
BEGIN
DECLARE puc int(10); 
DECLARE i_first_name VARCHAR(30); 
DECLARE i_last_name VARCHAR(50); 
DECLARE i_age INT(10); DECLARE i_picture VARCHAR(255); 
DECLARE i_last_logined DATETIME; 
SET puc = (SELECT COUNT(1) AS c FROM login_master.users WHERE email=uemail); 
IF puc>0 THEN

 SELECT first_name,last_name,age,picture,last_logined INTO i_first_name,i_last_name,i_age,i_picture,i_last_logined 
 FROM users WHERE id=uid;  
 UPDATE login_master.users set first_name=i_first_name, last_name= i_last_name, age= i_age, last_logined = i_last_logined, loggedinto = concat(replace(loggedinto,concat(udb,'|'),''),udb,'|') 
 WHERE email = uemail;  

 ELSE
 INSERT INTO login_master.users (provider,first_name,last_name,email,gender,locale,age,picture,created,token_key,last_logined,loggedinto) 
 select  u.provider,u.first_name,u.last_name,u.email,u.gender,u.locale,u.age,u.picture,u.created,u.token_key,u.last_logined,concat(udb,'|') 
 from users u where u.id=uid; 
 END IF;
END $$
DELIMITER ;

0 个答案:

没有答案