SQL: Вставить только новые строки/записи в таблицу?

Я думаю лучшее, которое можно сделать, в этом случае должен взять их вход и затем показать им, что Вы думаете, что они имели в виду. Если они не соглашаются, покажите им формат, Вы ожидаете и заставляете их вводить его снова.

5
задан Charles 31 March 2011 в 00:11
поделиться

3 ответа

Альтернатива ON DUPLICATE KEY UPDATE позволяет вам ссылаться на решение об обновлении и вставке в базу данных:

INSERT INTO table (userid, name) VALUES (2, 'Bobby');
  ON DUPLICATE KEY UPDATE name = 'Bobby';

обновит поле имени на «Бобби», если запись с идентификатором пользователя 2 уже существует.

Вы можете использовать его как альтернативу INSERT IGNORE , если вы укажете неэффективную операцию для UPDATE:

INSERT INTO table (userid, name) VALUES (2, 'Bobby');
  ON DUPLICATE KEY UPDATE name = name;

Это ничего не даст, если идентификатор пользователя 2 уже существует , таким образом избегая предупреждения и игнорирования других ошибок, которые могут возникнуть при использовании INSERT IGNORE .


Другой альтернативой будет REPLACE :

REPLACE INTO table (userid, name) VALUES (2, 'Bobby');

Это будет обычная вставка, если идентификатор пользователя 2 еще не существует. Если он существует, он сначала удалит старую запись, а затем вставит новую.


Имейте в виду, что обе версии являются специфическими для MySQL расширениями SQL.

5
ответ дан 13 December 2019 в 05:37
поделиться

В цикле вы можете сначала выполнить обновление, если ни одна строка не затронута, это означает, что это новая запись. Отслеживайте эти «неудачные обновления», а затем вставляйте их как новые записи.

Я не знаком с Zend_Db, но предполагаю, что он может вернуть, повлияло ли обновление на количество строк.

0
ответ дан 13 December 2019 в 05:37
поделиться

Вам нужно определить ИД пользователя как ПЕРВИЧНЫЙ или УНИКАЛЬНЫЙ ключ и использовать что-то вроде:

INSERT IGNORE INTO table (userid, name) VALUES (2, 'Bob');

Если ИД пользователя 2 уже существует, он проигнорирует и перейдет к следующей вставке.

Вы также можно использовать ON DUPLICATE KEY UPDATE в схеме таблицы. Другой альтернативой может быть использование синтаксиса REPLACE INTO.

REPLACE INTO table (userid, name) VALUES (2, 'Bob');

Будет предпринята попытка INSERT, если запись уже существует, она будет УДАЛЕНА перед повторной INSERT.

2
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: