插入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
之后,只需要包含你想要更新的列。
不需要在INSERT
或SELECT
列出列,但我同意这可能是更好的做法。
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` )