插入MySQL表或更新(如果存在)

我想添加一行到数据库表,但如果一行存在具有相同的唯一键我想更新行。

例如,

insert into table (id, name, age) values(1, "A", 19) 

假设唯一的关键是id ,并且在我的数据库中有一个id = 1的行。 在这种情况下,我想用这些值更新该行。 通常这会产生一个错误。 如果我使用insert IGNORE它将忽略错误,但它仍然不会更新。

使用INSERT ... ON DUPLICATE KEY UPDATE

查询:

 INSERT INTO table (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE name="A", age=19 

检出REPLACE

http://dev.mysql.com/doc/refman/5.0/en/replace.html

 REPLACE into table (id, name, age) values(1, "A", 19) 

试试这个:

 INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1; 

希望这可以帮助。

尝试这个:

INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'

注意:
这里如果id是主键,那么在第一次插入id='1'每次试图插入id='1'都会更新名字和年龄,并且以前的名字年龄会改变。

使用批量插入时,请使用以下语法:

 INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22) ON DUPLICATE KEY UPDATE name = VALUES (name), ... 

当使用SQLite时:

 REPLACE into table (id, name, age) values(1, "A", 19) 

只要id是主键。 否则它只是插入另一行。 请参阅INSERT (SQLite)。

只是因为我在这里寻找这个解决scheme,但从另一个相同结构的表(在我的情况下,网站testing数据库生活数据库)更新:

 INSERT live-db.table1 SELECT * FROM test-db.table1 t ON DUPLICATE KEY UPDATE ColToUpdate1 = t.ColToUpdate1, ColToUpdate2 = t.ColToUpdate2, ... 

正如其他地方所提到的,在ON DUPLICATE KEY UPDATE之后,只需要包含你想要更新的列。

不需要在INSERTSELECT列出列,但我同意这可能是更好的做法。

 INSERT INTO table (id, name, age) VALUES (1, 'A', 19) ON DUPLICATE KEY UPDATE id = id + 1; 

另外不要忘记关注唯一的关键约束。

 ALTER TABLE `table` ADD UNIQUE `unique_key` ( `id` )