mysql_affered_rows () возвращает 1 в «реальном» REPLACE INTO - PullRequest
2 голосов
/ 12 апреля 2011

У меня есть таблица MySQL с одним первичным ключом.

Ночью я запускаю задание на вставку и обновление записей. Я использую REPLACE INTO для каждой операции, поэтому она либо добавит, либо заменит существующую строку.

После запроса REPLACE INTO я вызываю mysql_affected_rows(), который возвращает счет 1 для многих фактически замененных строк, а не 'new' (он возвращает 2 для подавляющего большинства заменяемых строк).

Я знаю, что некоторые из этих «вставок» являются ложными, потому что я отслеживаю количество строк в начале и конце пакетного обновления; в таблице нет дубликатов, чтобы отбросить это количество, плюс я проверил, что искусственные «новые» строки существовали до пакетного обновления.

В этой таблице нет ничего особенного; похожая таблица работает так же, как и с тем же кодом. У кого-нибудь есть идеи, почему mysql_affected_rows() возвращает 1 для операции, которая действительно является заменой, а не вставкой?

1 Ответ

2 голосов
/ 12 апреля 2011

REPLACE INTO фактически удаляет, а затем вставляет, а не ОБНОВЛЯЕТ.

Возможно, вы захотите использовать вместо этого синтаксис INSERT… ON DUPLICATE KEY UPDATE.

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