Как я могу определить, произошло ли событие ON UPDATE с запросом в MYSQL? - PullRequest
2 голосов
/ 27 марта 2012

Скажите, что у меня есть запрос с разделом ON DUPLICATE:

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

Как мне узнать после выполнения этого запроса, выполнил ли запрос вставку или обновление?

Ответы [ 2 ]

4 голосов
/ 27 марта 2012

Функция ROW_COUNT может различать, возвращая 1 или 2, если ВСТАВКА была "чистой" или столкнулась.

По документам:

Для операторов INSERT ... ON DUPLICATE KEY UPDATE значение затрагиваемых строк равно 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)
0 голосов
/ 27 марта 2012

Вы можете использовать дополнительный столбец для if, назвать его как flag (int или tinyint), установить его значение по умолчанию 0 и изменить запрос следующим образом:

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

Теперь, если вставка прошла успешно, флаг устанавливается на 1, иначе это 0. На профессиональном уровне этот пример флага очень полезен во многих отношениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...