假设我有一个ON DUPLICATE节的查询:
INSERT INTO table (a) VALUES (0)
ON DUPLICATE KEY UPDATE a=1
在运行此查询后,如何查询查询是执行插入还是更新?
答案 0 :(得分:4)
ROW_COUNT
函数可以区分,如果INSERT“纯粹”或碰撞,则返回1或2。
根据文档:
对于INSERT ... ON DUPLICATE KEY UPDATE语句,如果将行作为新行插入,则affected-rows值为1,如果更新现有行,则为2。
示例:
mysql> create table t (a int not null unique) engine=innodb;
Query OK, 0 rows affected (0.05 sec)
mysql> insert into t (a) values (0) on duplicate key update a=1;
Query OK, 1 row affected (0.00 sec)
mysql> select row_count();
+-------------+
| row_count() |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)
mysql> insert into t (a) values (0) on duplicate key update a=1;
Query OK, 2 rows affected (0.00 sec)
mysql> select row_count();
+-------------+
| row_count() |
+-------------+
| 2 |
+-------------+
1 row in set (0.00 sec)
答案 1 :(得分:0)
您可以为if使用额外的列,并将其命名为flag(int或tinyint)并将其默认设置为0,并更改查询,如:
INSERT INTO table (a, flag) VALUES (0, 1) ON DUPLICATE KEY UPDATE a=1;
现在,如果插入成功,则标志设置为1,否则为0。 在专业水平上,这个标志示例在很多方面非常有用。