我有一个users
表,其中自动增量id
为主键,email
为唯一键。 email
和name
字段来自Facebook。
+----+-------+------+
| id | email | name |
+----+-------+------+
和facebook_users
表,
+--------+----------+
| userId | fbUserId |
+--------+----------+
id
是Facebook表格中userId
的外键。 Facebook fbUserId
保证是独一无二的。我将这些表分开的原因是我计划将来有更多的社交登录,并且我试图让我的模式在未来证明。
现在我的插入更新查询就是这个
BEGIN;
INSERT IGNORE INTO users
(id,email,name)
VALUES (0,?,?);
INSERT IGNORE INTO users_facebook
(userId, fbUserId)
VALUES (LAST_INSERT_ID(), ?);
COMMIT
据我了解,ON DUPLICATE KEY UPDATE
仅适用于单个表中的单行。
我想做的是,如果我的一位现有用户(意味着我的数据库中有fbUserId
)在Facebook上更改了他们的email
或name
,我和#39;想要更新users
表。
我现在这样做的方式似乎是......"落后"?因为fbUserId
是真实的"主键,但我试图先插入users
。
另外,对我当前查询的任何想法?我对MySQL很陌生。
编辑:我最终将电子邮件移至facebook桌面并使用存储过程。
users
表格为id, name
; facebook_users
表格为userId, email, fbUserId
; 步骤:
CREATE PROCEDURE 'facebook_user_login'(
firstName varchar(50),
lastName varchar(50),
email varchar(50),
fbUserId bigint(8)
)
BEGIN
IF NOT EXISTS (select * from users_facebook a where a.fbUserId = fbUserId) THEN
BEGIN
INSERT INTO users values (0,'eric','guan');
INSERT INTO users_facebook values (LAST_INSERT_ID(),email, fbUserId);
END;
ELSEIF EXISTS (select * from users_facebook a where a.fbUserId = fbUserId and a.email != email ) THEN
UPDATE users_facebook set email = email;
END IF;
END