Можно ли избежать перезаписи столбца со значением NULL в запросе INSERT? - PullRequest
0 голосов
/ 07 января 2010

У меня есть два разных запроса на моей странице php для одной и той же таблицы, первый выполняется, если у меня два разных значения для двух столбцов, но в некоторых случаях я могу использовать только первое значение, могу ли я сделать это с один и тот же запрос или я должен использовать два разных запроса?

// query 1
"INSERT INTO my_table (column_1, column_2) VALUES ('$value_1', '$value_2')";

// second query, used if $value_2 is null
"INSERT INTO my_table (column_1) VALUES ('$value_1')";

// can I do something like this without use a SELECT for column_2 before the INSERT?
$value_2 = null;
"INSERT INTO my_table (column_1, column_2) VALUES ('$value_1', '$value_2')";
// ======================================= new value === ^   |    ^ === mantain old value because it's null

так я могу выполнить инструкцию INSERT с новыми значениями, не перезаписывая старые значения с нулевым значением?

1 Ответ

2 голосов
/ 07 января 2010

INSERT никогда не перезапишет старую запись (хотя она может потерпеть неудачу, если вы попытаетесь вставить запись, нарушающую ограничение уникального ключа). Таким образом, вы можете просто использовать первый запрос, даже если $value_2 равен нулю, и получить те же результаты.

Если вы хотите перезаписать записи, вам нужно будет использовать оператор UPDATE. В этом случае вы можете перезаписать только один столбец, если хотите. См. http://dev.mysql.com/doc/refman/5.0/en/update.html для синтаксиса ОБНОВЛЕНИЯ.

Существует также REPLACE для перезаписи старых строк в случае уникальных ключей, но, похоже, это противоположно тому, что вы хотите сделать.

...