Результат MySQL INSERT IGNORE (добавлена ​​запись или нет)?

Я использую VB.NET с MySQL и хотел бы знать, есть ли способ узнать, добавил ли INSERT IGNORE sql новую запись в БД или нет.

Дана таблица (tblA) с одним столбцом (col1) и 1 записью ('foo')

-------
| col1 |
-------
| foo  |
-------

SQL "INSERT IGNORE INTO tblA VALUES ('foo');" будет молчать, т.е. запись не будет добавлена

но sql "INSERT IGNORE INTO tblA VALUES ('bar');" преуспеет, вставив новую запись.

Так что я должен знать о результате...

предложения?

Спасибо, Пауло Буэно.


person Paulo Bueno    schedule 21.09.2011    source источник


Ответы (2)


Я не человек VB.NET, но вам нужен эквивалент mysql_affected_rows. Это будет 1, если запись была вставлена, и ноль в противном случае. Дополнительные запросы не нужны.

person Michael Mior    schedule 21.09.2011

Вы можете запросить количество строк в таблице до и после операции INSERT и проверить, отличаются ли результаты. Если да, то операция вставила строку.

person Saket    schedule 21.09.2011
comment
Предполагая, что никто больше ничего не вставил между вашей вставкой и выбором счетчика? - person Adnan; 21.09.2011
comment
@Adnam: если это делается в транзакции с режимом изоляции REPEATABLE READ (который используется по умолчанию для MySQL), то подсчет до и после будет надежным, поскольку транзакция не увидит другие вставки или удаления. Но это, конечно, не эффективный способ сделать это. - person a_horse_with_no_name; 21.09.2011