【问题标题】:mysql replace into alternativemysql替换为替代
【发布时间】:2011-02-25 04:48:56
【问题描述】:

我目前正在使用 replace into 语句,我有一个独特的字段,如果它发现重复,它将导致它更新而不是插入...

问题是如果它发现重复我无法在几列上更新,它只会擦除很多。

是否有类似的“一个语句”方法,我可以只更新我想要的内容?

我发现了 merge into 但不了解关于使用 table 合并到 table 的第一点

【问题讨论】:

    标签: mysql replace


    【解决方案1】:

    您将要使用 INSERT...ON DUPLICATE KEY UPDATE 语法。

    http://dev.mysql.com/doc/refman/5.1/en/insert-on-duplicate.html

    下面的示例将尝试创建包含 id、生日和姓名的记录。如果存在具有 id 字段的记录,它将执行指定的更新。该表还有许多其他字段,例如电子邮件地址、邮政编码等。如果我更新,我想保留这些字段。 (如果我没有在 REPLACE INTO 语句中包含这些数据,REPLACE INTO 会丢失任何数据。)

    INSERT INTO user (userid,birthday,first_name,last_name) 
       VALUES (1234,'1980-03-07','Joe','Smith') 
    ON DUPLICATE KEY UPDATE 
       birthday = '1980-03-07',
       first_name = 'Joe', 
       last_name = 'Smith';
    

    【讨论】:

    • 是的,但缺点是需要大量的写作。
    • 使用 INSERT...ON DUPLICATE KEY 更新:code.openark.org/blog/mysql/replace-into-think-twice 还可能带来相当大的性能优势。我会说这值得多花一分钟的代码编写......
    • @Alex Mather:您还可以将birthday = '1980-03-07' 替换为 brithday = values(birthday),其余列也一样。
    • @Jim Smith -- 如果您找到了答案,请接受。人们将来更有可能回答您的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多