【问题标题】:MySQL moving data between tables, if exist updateMySQL在表之间移动数据,如果存在更新
【发布时间】:2014-12-29 23:29:46
【问题描述】:

我正在尝试在 MYSQL 中从另一个表更新一个表,我做到了:

INSERT INTO new_table (id, last_name, first_name, etc) 
SELECT (id, last_name, first_name, etc) FROM uploaded_tmp
ON DUPLICATE KEY UPDATE

如何指示用较新的值更新值?

【问题讨论】:

标签: mysql


【解决方案1】:

有一个不错的功能叫做 REPLACE

REPLACE INTO new_table (id, last_name, first_name, etc) 
SELECT (id, last_name, first_name, etc) FROM uploaded_tmp

它的行为就像 INSERT,但如果出现重复键(PRIMARY 或 UNIQUE),旧记录将被删除并替换为新值。

有兴趣吗?阅读更多关于http://dev.mysql.com/doc/refman/5.7/en/replace.html

【讨论】:

  • 错了。它总是一个插入。旧数据集将被删除并插入新数据集。所以如果你在你的PRIMARY上使用AUTO_INCREMENT,就会有一个新的递增ID。
  • 只要连主键都被替换了,都是一样的。如果主键不包含在替换数据中,是的,它将获得新索引,我应该更新我的答案。
【解决方案2】:

您在此处缺少 更新 语句。通过设置一些数据来完成它

使用:

INSERT INTO table(value)
SELECT id, uid
FROM tmp t WHERE uid=x
ON DUPLICATE KEY UPDATE ut=uy,yt=iu.....

参考:Mysql site

【讨论】:

    【解决方案3】:
    1. new_tableuploaded_tmp的ID一样吗?如果不是,请将它们从 INSERT 语句中删除
    2. 更新后是否需要相同的ID?如果没有看到 David162795 的答案。
    3. 如果您不想更改您的PRIMARY ID,您必须使用INSERT INTO ... ON DUPLICATE KEY UPDATE。但是我们必须知道你的UNIQUE 索引

    在此示例中,有一个 PRIMARY 键 (ID) 和一个 UNIQUE 索引 (last_name, first_name)

    INSERT INTO new_table (
        last_name,
        first_name,
        val1,
        val2,
        ...
    ) 
    SELECT
        last_name,
        first_name,
        val1,
        val2,
    FROM uploaded_tmp
    ON DUPLICATE KEY UPDATE
        val1 = VALUES(val1),
        val2 = VALUES(val2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-22
      • 2011-04-23
      • 1970-01-01
      • 1970-01-01
      • 2011-05-11
      相关资源
      最近更新 更多