SELECT
HANDLER
INSERT
INSERT DELAYED
UPDATE
DELETE
TRUNCATE
REPLACE
LOAD DATA INFILE
DO
Buy this Reference Manual in softcover from Barnes & Noble!
REPLACE
REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... или REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] SELECT ... или REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name SET col_name=expression, col_name=expression,...
Оператор REPLACE
работает точно так же, как INSERT
, за исключением того, что если старая запись в данной таблице имеет то же значение индекса UNIQUE
или PRIMARY KEY
, что и новая, то старая запись перед занесением новой будет удалена. See section 6.4.3 Синтаксис оператора INSERT
.
Другими словами, команда REPLACE
не предоставляет доступа к замещаемой записи. В некоторых старых версиях MySQL такой доступ иногда оказывался возможным, но это был дефект, который уже исправлен.
При использовании команды REPLACE
функция mysql_affected_rows()
вернет значение, равное 2
, если старая строка была заменена новой. Объясняется это тем, что сначала в таблицу вставляется одна строка, а затем удаляется вторая - дубликат.
Это позволяет легко определять, какое действие произвела команда REPLACE
- добавление или замещение строки. Достаточно просто проверить, какое число вернула функция mysql_affected_rows()
- 1
(строка добавлена) или 2
(замещена).
Следует учитывать, что, если не используются индексы UNIQUE
или PRIMARY KEY
, то применение команды REPLACE
не имеет смысла, так как она работает просто как INSERT
.
Posted by [name withheld] on Friday August 30 2002, @1:35pm | [Delete] [Edit] |
Although it is clearly stated here, it is worth
reiterating that REPLACE does not UPDATE the
existing record. When REPLACING records with an
autonumbered primary key, the autonumber column
DOES change as the old row is deleted and a new
one added.
Posted by Mark Hechim on Friday September 6 2002, @4:10pm | [Delete] [Edit] |
If you use the form: {REPLACE (a, b) SELECT 1, 2},
why do you get an error where {REPLACE (a, b)
SELECT x, y FROM blah} works just fine?
Posted by on Friday October 11 2002, @11:41pm | [Delete] [Edit] |
Note that REPLACE will not update the information of
the row. It performs a DELETE and INSERT query.
When you excecute "REPLACE INTO table (col1,
col2) VALUES (val1, val2)" where col1 is the index,
all the other column values will be deleted. There is
not any REPLACE for UPDATE or INSERT.
Posted by Ben Riddell on Thursday March 6 2003, @3:05pm | [Delete] [Edit] |
Re: the first post -
If you don't want your autoincrementing field to change with a REPLACE query, create a UNIQUE INDEX which includes that field and pass the existing value for that field in the query.
Add your own comment.