Заменяет ли в себе предложение?

Я пишу приложение, и я использую MySQL в качестве СУБД, мы загружаем предложения о свойствах и возникали некоторые проблемы с производительностью. Старая архитектура выглядела так: свойство обновляется. Если число затронутых строк не равно 1, то обновление не считается успешным, так как запрос обновления решает нашу проблему. Если обновление не было успешным, а число затронутых строк больше 1, у нас есть дубликаты, и мы удалим их все. После удаления дубликатов при необходимости, если обновление не было успешным, произойдет вставка. Эта архитектура работала хорошо, но были некоторые проблемы с скоростью, поскольку свойства удаляются, если они не обновлялись в течение 15 дней. Теоретически основная проблема заключается в удалении свойств, поскольку некоторые свойства сохраняются в течение нескольких месяцев, а индексы очень далеки друг от друга (мы говорим о 500, 000+ свойствах).

Наш хост сказал мне использовать замену вместо удаления свойств, и все устаревшие свойства следует рассматривать как DEAD. Я сделал это, но проблемы возникли из-за синтаксической ошибки, и я не смог найти нигде пример замены в предложение where (я хотел бы заменить свойство DEAD новым свойством, а не удалять старые свойство и вставить новое, чтобы обеспечить оптимизацию). Мой запрос выглядел так:

replace into table_name(column1, ..., columnn) values(value1, ..., valuen) where ID = idValue 

Конечно, я вычислил idValue и обработал все, но у меня была синтаксическая ошибка. Я хотел бы знать, если я ошибаюсь, и есть предложение where для замены.

Я нашел альтернативное решение, которое даже лучше, чем заменить на (используя просто запрос на обновление), потому что удаление происходит за занавесками, если я использую замену, но я хотел бы знать, если я ошибаюсь, когда говорю, что replace in не имеет предложения where. Для получения дополнительной информации см. Эту ссылку:

http://dev.mysql.com/doc/refman/5.0/en/replace.html

Спасибо за ваши ответы заранее, Lajos Árpád

Я вижу, что вы решили свою проблему, но ответите на свой первоначальный вопрос:

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 если я правильно понимаю вашу задачу.

  • Оптимальные настройки MySQL для запросов, которые предоставляют большие объемы данных?
  • Зачем мне нужен ./ для команд для запуска на Mountain Lion?
  • com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: после завершения подключения никаких действий не разрешено
  • Когда использовать MyISAM и InnoDB?
  • JDBC против веб-сервиса для Android
  • MySQL: включить LOAD DATA LOCAL INFILE
  • Проблемы чтения / записи данных UTF-8 в MySQL из Java с использованием JDBC-коннектора 5.1
  • Как получить имя пользователя и пароль MySQL?
  • alter table add MULTIPLE столбцы ПОСЛЕ столбца1
  • Какова максимальная длина данных, которые я могу разместить в столбце BLOB в MySQL?
  • Есть ли опция / функция MySQL для отслеживания истории изменений записей?
  • Interesting Posts

    Как изменить $ PATH (.bash_profile) на OSX?

    Команда закрыть приложение консоли?

    Как повернуть изображение в WinForms

    ActionBarCompat: java.lang.IllegalStateException: вам необходимо использовать Theme.AppCompat

    Доступ к содержимому R.string с использованием переменной для представления имени ресурса

    Функции jQuery для облегчения без использования плагина

    Как найти последний измененный файл в каталоге на Java?

    Практическое решение для распознавания текста для преобразования большой книги в цифровой формат?

    Когда использовать intern () для строковых литералов

    Какие правила iptables разрешают ntp?

    C ++ многоканальный литерал

    Хорошо ли иметь внешний ключ в качестве первичного ключа?

    Исключить недопустимые символы XML в C #

    Почему я не могу подключиться к удаленному рабочему столу на моем компьютере под управлением Windows 10?

    Программно импортировать сертификат доверия CA в существующий файл хранилища ключей без использования keytool

    Давайте будем гением компьютера.