我可以避免在INSERT查询中覆盖具有NULL值的列吗?

时间:2010-01-07 17:33:48

标签: php mysql null insert

我在同一个表的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

那么我可以用新的val执行INSERT语句而不用空值覆盖旧的val吗?

1 个答案:

答案 0 :(得分:2)

INSERT永远不会覆盖旧记录(尽管如果您尝试插入破坏唯一键约束的记录,它可能会失败)。因此,即使$value_2为空,您也可以使用第一个查询,并获得相同的结果。

如果要覆盖记录,则需要使用UPDATE语句。在这种情况下,如果您愿意,您可以只覆盖一列。有关UPDATE语法,请参阅http://dev.mysql.com/doc/refman/5.0/en/update.html

在唯一键的情况下,还有REPLACE覆盖旧行,但听起来这与您想要做的相反。