2010-04-30 2 views
7

С Replace Into, если у меня есть два поля. Имя Фамилия. В таблице есть Джон Смит, если бы я должен был запустить REPLACE INTO tblNames (FirstName, LastName) VALUES (John, Jones) Заменит ли Смит Джонсом или создаст новое имя?SQL Replace В вопрос

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

ответ

0

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

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

0

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

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

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

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

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

+0

Когда я отвечал, не было тега «mysql», поэтому мои образцы кода являются стандартными SQL – UserControl

+0

Есть ли способ избежать ошибки в вставке, если запись уже существует? – Matt

+0

Вы можете выполнить 'select', чтобы проверить, существует ли запись перед выполнением обновления или вставки. Не уверен в MySQL, но в SQL Server вы даже можете избежать выбора. Типичный сценарий: обновление tblNames набор ... где ключ-условие если @@ ROWCOUNT = 0 - число строк, затронутых в последнем заявлении (т.е. обновление) вставки в tblNames .... извините, для позднего ответа, надеюсь, это поможет – UserControl

8
REPLACE 
INTO tblNames (FirstName, LastName) 
VALUES ('John', 'Jones') 

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

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

  • FirstName является UNIQUE и есть в столе John,
  • LastName является UNIQUE и есть в столе Jones,
  • FirstName, LastnameUNIQUE и в таблице есть John Jones.

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

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

+0

Итак, если Джон Смит находится в таблице, и я посылаю Джона Джонса, какую команду sql использовать, чтобы он вставлял Джона Джонса, но если я отправлю Джона Смита, он ничего не сделает. – Matt

+0

@Matt: опубликуйте вывод 'SHOW CREATE TABLE tblNames' – Quassnoi

+0

Пока нет таблицы ..Это гипотетическое планирование :) – Matt