插入值而不提及列名

时间:2014-10-20 12:40:18

标签: php mysql

所以我尝试插入值而不提及代码中的列名。

经过一些搜索后,我发现可以通过将值传递给引用here的null来实现。但是当我这样做时,它会抛出一些错误。

我使用过的代码

CREATE TABLE Persons
(
    ID int  NOT NULL AUTO_INCREMENT,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Address varchar(255),
    City varchar(255),
    PRIMARY KEY (ID)
);

insert into Persons values (NULL,1);

那么如何在不提及列名的情况下添加值呢?

提前完成

5 个答案:

答案 0 :(得分:4)

如果这仅用于实验目的,您可以:

INSERT INTO Persons VALUES (NULL, 'Lastname', 'Firstname', 'Address test', 'city of angels');

但我强烈建议你不要养成这样做的习惯。始终添加列,正如David的answer雄辩地说明的那样。

INSERT INTO Persons (LastName, FirstName, Address, City) VALUES ('Last', 'First', 'Add', 'City');

Fiddle

答案 1 :(得分:2)

确保在插入中输入所有列值。

INSERT INTO Persons VALUES (NULL, 'Last name', 'First name', 'Address', 'City');

抱歉错过了主键的NULL值

答案 2 :(得分:2)

如果您没有指定哪些列应该获取这些值,您希望数据库如何知道?如果您至少为所有列提供值,那么查询引擎可能会根据列的顺序进行推断,具体取决于数据库。 (根据this question及其答案,似乎在MySQL中支持。)

但即便如此,这也不是很好的做法。它在模式和代码之间创建了各种耦合。通过显式指定列,您可以稍后在同一个表中添加/更改不相关的列,而不会影响该查询。但是,如果您依赖于模式中列的排序,那么对模式的任何更改都需要更改每个查询,甚至是那些在逻辑上不受影响的查询。

它更简单,更稳定,并且更明确地表达了明确指定列的意图。

答案 3 :(得分:0)

您必须指定列,或在每个列中插入值。

如果你有6列,你就不能传递2个值而不命名2列等等。

答案 4 :(得分:0)

我认为你可以,但你需要提到它们出现在表记录中的值。结构体。如果你错过了,你会得到错误的录音或查询失败。