我有一个使用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 ;