我想在数据库表中添加一行,但如果存在具有相同唯一键的行,我想更新该行 .
例如,
insert into table (id, name, age) values(1, "A", 19)
假设唯一键是 id ,在我的数据库中有一行 id = 1 . 在这种情况下,我想用这些值更新该行 . 通常这会产生错误 . 如果我使用 insert IGNORE 它会忽略错误,但它仍然不会更新 .
id
id = 1
insert IGNORE
INSERT IGNORE INTO table (id, name, age) VALUES (1, "A", 19); INSERT INTO TABLE (id, name, age) VALUES(1, "A", 19) ON DUPLICATE KEY UPDATE SET NAME = "A", AGE = 19; REPLACE INTO table (id, name, age) VALUES(1, "A", 19);
所有这些解决方案都适用于您的问题 .
如果您想详细了解这些陈述visit this link
使用批量插入时,请使用以下语法:
INSERT INTO TABLE (id, name, age) VALUES (1, "A", 19), (2, "B", 17), (3, "C", 22) ON DUPLICATE KEY UPDATE name = VALUES (name), ...
只是因为我在这里寻找这个解决方案,但是要从另一个结构相同的表(在我的网站测试数据库中更新到实时数据库)进行更新:
INSERT live-db.table1 SELECT * FROM test-db.table1 t ON DUPLICATE KEY UPDATE ColToUpdate1 = t.ColToUpdate1, ColToUpdate2 = t.ColToUpdate2, ...
如其他地方所述,在 ON DUPLICATE KEY UPDATE 之后只需要包含要更新的列 .
ON DUPLICATE KEY UPDATE
无需列出 INSERT 或 SELECT 中的列,但我同意这可能是更好的做法 .
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` )
试试这个:
INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'
注意:这里如果id是主键,那么在第一次插入 id='1' 之后每次尝试插入 id='1' 都将更新名称和年龄,之前的名称年龄将会改变 .
id='1'
使用SQLite时:
REPLACE into table (id, name, age) values(1, "A", 19)
前提是 id 是主键 . 否则它只是插入另一行 . 见INSERT(SQLite) .
希望这可以帮助 .
使用INSERT ... ON DUPLICATE KEY UPDATE
QUERY:
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
9 回答
所有这些解决方案都适用于您的问题 .
如果您想详细了解这些陈述visit this link
使用批量插入时,请使用以下语法:
只是因为我在这里寻找这个解决方案,但是要从另一个结构相同的表(在我的网站测试数据库中更新到实时数据库)进行更新:
如其他地方所述,在
ON DUPLICATE KEY UPDATE
之后只需要包含要更新的列 .无需列出
INSERT
或SELECT
中的列,但我同意这可能是更好的做法 .另外不要忘记关注唯一键约束 .
试试这个:
INSERT INTO table (id,name,age) VALUES('1','Mohammad','21') ON DUPLICATE KEY UPDATE name='Mohammad',age='21'
注意:
这里如果id是主键,那么在第一次插入
id='1'
之后每次尝试插入id='1'
都将更新名称和年龄,之前的名称年龄将会改变 .使用SQLite时:
前提是
id
是主键 . 否则它只是插入另一行 . 见INSERT(SQLite) .试试这个:
希望这可以帮助 .
使用INSERT ... ON DUPLICATE KEY UPDATE
QUERY:
检查REPLACE
http://dev.mysql.com/doc/refman/5.0/en/replace.html