如何检测在MYSQL中是否使用查询触发ON UPDATE事件?

时间:2012-03-26 21:46:57

标签: mysql sql insert

假设我有一个ON DUPLICATE节的查询:

INSERT INTO table (a) VALUES (0)
  ON DUPLICATE KEY UPDATE a=1

在运行此查询后,如何查询查询是执行插入还是更新?

2 个答案:

答案 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。 在专业水平上,这个标志示例在很多方面非常有用。