如何使用ON DUPLICATE KEY UPDATE

时间:2017-06-01 02:42:52

标签: mysql sql

我有一个users表,其中自动增量id为主键,email为唯一键。 emailname字段来自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上更改了他们的emailname,我和#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

0 个答案:

没有答案