С Заменой В, если у меня есть два поля. FirstName LastName. Таблица имеет John Smith в ней, если бы я должен был выполнить ЗАМЕНУ В tblNames (FirstName, LastName) ЗНАЧЕНИЯ (John, Jones), который заменил бы Smith Jones или создал бы новое имя?
Что определяет, вставляет ли Обновление или и?
REPLACE
INTO tblNames (FirstName, LastName)
VALUES ('John', 'Jones')
Если существует уникальное ограничение любого типа для FirstName
, LastName
или их комбинация, и она нарушается, записи удаляются и вставляются с новыми значениями.
Запись будет заменена, если выполнено любое из условий:
Имя
равно УНИКАЛЬНО
и в таблице есть Джон
, Фамилия
равно УНИКАЛЬНО
и в таблице есть Джонс
, Имя, Фамилия
равно УНИКАЛЬНО
и есть Джон Джонс
в таблице. Обратите внимание, что операция REPLACE
является операцией INSERT
, возможно, после DELETE
, которая всегда будет влиять на таблицу.
В более новых версиях MySQL
вы должны использовать INSERT… ON DUPLICATE KEY UPDATE
.
Есть два разных оператора для вставки и обновления
update tblNames set FirstName="John", LastName="Smith" where FirstName="John" and LastName="Jones"
, это переименует Джона Джонса в Джона Смита
insert into tblNames (FirstName, LastName) values ("John", "Smith")
, это добавит новую запись (но может завершиться ошибкой, если в таблице уже есть Джон Смит и существует уникальное ограничение для FirstName / LastName)
Это зависит от того, каковы первичный ключ и/или уникальные ограничения в таблице. Если нет ни первичного ключа, ни уникальных ограничений, это ничем не отличается от базового оператора INSERT.
В документации дается достаточно четкое объяснение: http://dev.mysql.com/doc/refman/5.0/en/replace.html