SQL Заменить на вопрос - PullRequest
       14

SQL Заменить на вопрос

7 голосов
/ 30 апреля 2010

С Replace Into, если у меня есть два поля. Имя Фамилия. В таблице есть Джон Смит, если я должен был выполнить ЗАМЕНИТЬ В tblNames (FirstName, LastName) VALUES (Джон, Джонс) Это заменит Смита на Джонс или создаст новое имя?

Что определяет, является ли обновление или вставка?

Ответы [ 3 ]

8 голосов
/ 30 апреля 2010
REPLACE
INTO    tblNames (FirstName, LastName)
VALUES  ('John', 'Jones')

Если существует уникальное ограничение любого типа для FirstName, LastName или их комбинации, и оно нарушается, записи удаляются и вставляются с новыми значениями.

Запись будет заменена, если выполнено любое из условий:

  • FirstName - это UNIQUE, а в таблице John,
  • LastName - это UNIQUE, а в таблице Jones,
  • FirstName, Lastname равно UNIQUE, а в таблице John Jones.

Обратите внимание, что операция REPLACE - это INSERT, возможно, следующая за DELETE, которая всегда будет влиять на таблицу.

В более новых версиях MySQL вы должны использовать INSERT … ON DUPLICATE KEY UPDATE.

0 голосов
/ 30 апреля 2010

Есть два разных оператора для вставки и обновления

update tblNames set FirstName="John", LastName="Smith" where FirstName="John" and LastName="Jones"

это переименует Джона Джонса в Джона Смита

insert into tblNames (FirstName, LastName) values ("John", "Smith")

это добавит новую запись (но может произойти сбой, если естьуже есть Джон Смит в таблице, и существует уникальное ограничение для FirstName / LastName)

0 голосов
/ 30 апреля 2010

Это зависит от того, какой первичный ключ и / или уникальные ограничения находятся в таблице. Если первичного ключа или уникальных ограничений нет, он ничем не отличается от базового оператора INSERT.

Документация дает достаточно четкое объяснение: http://dev.mysql.com/doc/refman/5.0/en/replace.html

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