Performing an UPDATE or INSERT depending whether a row exists or not in MySQL

前端 未结 6 918
小鲜肉
小鲜肉 2020-12-06 14:30

In MySQL, I\'m trying to find an efficient way to perform an UPDATE if a row already exists in a table, or an INSERT if the row doesn\'t exist.

I\'ve found two possi

相关标签:
6条回答
  • 2020-12-06 15:04

    INSERT ... ON DUPLICATE KEY UPDATE

    0 讨论(0)
  • 2020-12-06 15:07

    If you're doing a lot of these, it might be worth writing them to a file, and then using 'LOAD DATA INFILE ... REPLACE ...'

    0 讨论(0)
  • 2020-12-06 15:10

    There is another way - REPLACE.

    REPLACE INTO myTable (col1) VALUES (value1)
    

    REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted. See Section 12.2.5, “INSERT Syntax”.

    0 讨论(0)
  • 2020-12-06 15:16

    In mysql there's a REPLACE statement that, I believe, does more or less what you want it to do.

    0 讨论(0)
  • 2020-12-06 15:19

    You could also perform an UPDATE, check the number of rows affected, if it's less than 1, then it didn't find a matching row, so perfom the INSERT.

    0 讨论(0)
  • 2020-12-06 15:19

    REPLACE INTO would be a solution, it uses the UNIQUE INDEX for replacing or inserting something.

    REPLACE INTO
        yourTable
    SET
        column = value;
    

    Please be aware that this works differently from what you might expect, the REPLACE is quite literally. It first checks if there is a UNIQUE INDEX collision which would prevent an INSERT, it removes (DELETE) all rows which collide and then INSERTs the row you've given it.

    This, for example, leads to subtle problems like Triggers not firing (because they check for an update, which never occurs) or values reverted to the defaults (because you must specify all values).

    0 讨论(0)
提交回复
热议问题