ОБНОВЛЕНИЕ, если идентификатор существует, иначе INSERT (ODBC) - PullRequest
2 голосов
/ 26 января 2012

Я использую PHP-скрипт для подключения к базе данных Microsoft Access с использованием ODBC

В таблице, над которой я работаю, есть столбец 'id'.Я хотел бы ВСТАВИТЬ новые записи, если SKU еще не существует, иначе, если SKU существует, просто ОБНОВИТЬ эту запись.

Какой правильный SQL для этого?Можно ли сделать это одним запросом?

Ответы [ 3 ]

2 голосов
/ 26 января 2012

Лично я бы оставил это логике приложения, а не логике базы данных.Вы можете просто сделать:

if($id)
{
    $sql = 'UPDATE ... WHERE id = ?'; // assuming use of parameterized query
}
else
{
    $sql = 'INSERT INTO ...';
}
2 голосов
/ 26 января 2012

Я бы предпочел сделать это в 2 запроса.

Для меня обновления или вставки они отличаются БИЗНЕС логики. Чтобы ваш код был чистым и понятным, лучше явно определить логику для INSERT и UPDATE.

И технически я не вижу способа Clean сделать это в одном операторе SQL. Каждый оператор должен начинаться с «глагола», это либо «ОБНОВЛЕНИЕ», либо «ВЫБОР», либо «УДАЛЕНИЕ», либо что-то еще. Или, если вы настаиваете на этом, вы можете попробовать удалить существующий существующий, прежде чем выполнять «вставку», затем вы все равно выполните «вставку», но тогда, возможно, вы получите несовместимый идентификатор для той же сущности, что может вызвать проблемы .

Или, если «id» является первичным ключом, еще один глупый способ - «обновлять» в любом случае, а потом «вставлять». Если действительный идентификатор отсутствует, обновление завершится неудачно, и вставка будет выполнена успешно. Если есть действительный идентификатор, обновление будет выполнено успешно, а вставка не удастся. Вы сделаете это без логики BUSINESS if-else, но каждый раз будет происходить сбой SQL, который IS глуп и уродлив.

Это почти то, о чем я могу думать.

0 голосов
/ 26 января 2012

Я бы не советовал делать это в одном запросе. Проверьте, существует ли значение, которое вы хотите добавить, прежде чем выполнять запрос для добавления нового значения.

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