Заменяет ли в себе предложение?
Я пишу приложение, и я использую MySQL в качестве СУБД, мы загружаем предложения о свойствах и возникали некоторые проблемы с производительностью. Старая архитектура выглядела так: свойство обновляется. Если число затронутых строк не равно 1, то обновление не считается успешным, так как запрос обновления решает нашу проблему. Если обновление не было успешным, а число затронутых строк больше 1, у нас есть дубликаты, и мы удалим их все. После удаления дубликатов при необходимости, если обновление не было успешным, произойдет вставка. Эта архитектура работала хорошо, но были некоторые проблемы с скоростью, поскольку свойства удаляются, если они не обновлялись в течение 15 дней. Теоретически основная проблема заключается в удалении свойств, поскольку некоторые свойства сохраняются в течение нескольких месяцев, а индексы очень далеки друг от друга (мы говорим о 500, 000+ свойствах).
Наш хост сказал мне использовать замену вместо удаления свойств, и все устаревшие свойства следует рассматривать как DEAD. Я сделал это, но проблемы возникли из-за синтаксической ошибки, и я не смог найти нигде пример замены в предложение where (я хотел бы заменить свойство DEAD новым свойством, а не удалять старые свойство и вставить новое, чтобы обеспечить оптимизацию). Мой запрос выглядел так:
replace into table_name(column1, ..., columnn) values(value1, ..., valuen) where ID = idValue
Конечно, я вычислил idValue и обработал все, но у меня была синтаксическая ошибка. Я хотел бы знать, если я ошибаюсь, и есть предложение where для замены.
- MySQL: вставить запись, если она не существует в таблице.
- Найти дубликаты записей в MySQL
- Тестирование пропускной способности на одном порту
- Я считаю, что я удалил пользователя MySQL root, как его воссоздать?
- mysql DECLARE WHILE вне хранимой процедуры как?
Я нашел альтернативное решение, которое даже лучше, чем заменить на (используя просто запрос на обновление), потому что удаление происходит за занавесками, если я использую замену, но я хотел бы знать, если я ошибаюсь, когда говорю, что replace in не имеет предложения where. Для получения дополнительной информации см. Эту ссылку:
http://dev.mysql.com/doc/refman/5.0/en/replace.html
Спасибо за ваши ответы заранее, Lajos Árpád
- Как выполнить команду MySQL из сценария оболочки?
- Как хранить GUID в таблицах MySQL?
- Подсчитывайте дни между двумя датами, исключая выходные (только MySQL)
- Неразумно ли назначать базу данных MySQL каждому пользователю на моем сайте?
- MySQL - Рекурсивная древовидная структура
- Расширенный MySql-запрос: обновить таблицу с информацией из другой таблицы
- mysql: как я могу начать автоматическое увеличение с определенной точки?
- Должен ли я использовать тип данных datetime или timestamp в MySQL?
Я вижу, что вы решили свою проблему, но ответите на свой первоначальный вопрос:
REPLACE INTO
не имеет предложения WHERE
.
Синтаксис REPLACE INTO
работает точно так же, как INSERT INTO
за исключением того, что любые старые строки с одним и тем же основным или уникальным ключом автоматически удаляются перед вставкой новой строки.
Это означает, что вместо WHERE
вы должны добавить первичный ключ к значениям, заменяемым для ограничения вашего обновления.
REPLACE INTO myTable ( myPrimaryKey, myColumn1, myColumn2 ) VALUES ( 100, 'value1', 'value2' );
… предоставит тот же результат, что и …
UPDATE myTable SET myColumn1 = 'value1', myColumn2 = 'value2' WHERE myPrimaryKey = 100;
… или точнее:
DELETE FROM myTable WHERE myPrimaryKey = 100; INSERT INTO myTable( myPrimaryKey, myColumn1, myColumn2 ) VALUES ( 100, 'value1', 'value2' );
В вашей документации ссылка показывает три альтернативные формы команды replace
. Несмотря на то, что это исключено, единственным, который может принять предложение where, является третья форма с конечным select
.
replace
похоже, overkill относительно update
если я правильно понимаю вашу задачу.