我希望在主服务器已存在时更新MySQL行。问题是查询在第二次执行时没有更新任何内容。
表结构:
mysql> DESCRIBE Testtable;
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| test_id | int(11) | NO | PRI | NULL | |
| test_varchar | varchar(128) | NO | | NULL | |
| test_text | text | NO | | NULL | |
+--------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
查询:
INSERT INTO `Testtable`(`test_id`, `test_varchar`, `test_text`) VALUES ('1', 'hello', 'hello world!') ON DUPLICATE KEY UPDATE `test_id` = '1';
首次执行的结果:
查询OK,1行受影响(0.01秒)
第二次执行的结果:
查询OK,0行受影响(0.00秒)
我不明白为什么0行受到影响,因为在manual中它说:
如果指定ON DUPLICATE KEY UPDATE,则插入一行 将导致UNIQUE索引中的重复值或 PRIMARY KEY ,MySQL 执行旧行的更新。
是的,我有一个主键,你可以在结构中看到,但我不明白为什么0行会受到影响。如何优化查询它将起作用?我是否需要在ON DUPLICATE KEY UPDATE
- part?
答案 0 :(得分:2)
根据https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
如果ON DUPLICATE KEY UPDATE,则每行的受影响行值为1 该行将作为新行插入,如果现有行已更新,则为2,和 如果现有行设置为其当前值,则为0 。