Поддерживает ли MySQL или SQLite операторы INSERT или UPDATE? - PullRequest
2 голосов
/ 24 мая 2011

Операторы «INSERT OR UPATE» доступны в Oracle, если я не ошибаюсь. Возможность создать новую строку, если первичный ключ не существует, или обновить эту строку в противном случае. Или это возможно только с помощью хранимой процедуры или хранимой функции?

1 Ответ

6 голосов
/ 24 мая 2011

MySQL:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

Для SQLite вы должны использовать ON CONFLICT REPLACE

onconflict - см. http://www.sqlite.org/lang_conflict.html

ЗАМЕНА, Когда УНИКАЛЬНОЕ ограничение нарушение происходит, ЗАМЕНИТЕ алгоритм удаляет уже существующие строки которые вызывают ограничение нарушение до вставки или обновление текущей строки и Команда продолжает выполняться нормально. Если нарушение ограничения NOT NULL происходит, ЗАМЕНИТЕ конфликт разрешение заменяет значение NULL со значением по умолчанию для этого столбца, или если столбец не имеет значения по умолчанию, затем используется алгоритм ABORT. Если ПРОВЕРЬТЕ нарушение ограничения, ЗАМЕНИТЕ алгоритм разрешения конфликтов всегда работает как ABORT.

Когда ЗАМЕНИТЕ разрешение конфликта Стратегия удаляет строки, чтобы выполнить ограничение, удалить триггеры срабатывать, если и только если рекурсивные триггеры включены.

Хук обновления не вызывается для строки, которые удаляются с помощью REPLACE стратегия разрешения конфликтов. И не делает ЗАМЕНИТЕ приращение счетчика изменений. Исключительное поведение, определенное в этот пункт может измениться в будущий выпуск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...