MySQL使用列号而非名称将数据插入表中

时间:2011-04-15 19:55:22

标签: mysql insert

我是否必须知道列的名称才能插入数据?因为我需要使用列号插入数据(第一列是1 ...)

2 个答案:

答案 0 :(得分:4)

而不是使用它:

insert into my_table (column1, column2)
    values (value1, value2)

只需使用:

insert into my_table values (value1, value2)

即。不要指定列列表。


当然,只有按照表中定义的列传递数据时,这才会有效。

答案 1 :(得分:1)

如果你有一个像(例如)的表:

CREATE TABLE  test (
   id INT(10),
   field1 VARCHAR(16),
   field2 TINYINT(1)
);

您可以执行查询

INSERT INTO test VALUES (1, 'field1 value', 0);

插入值必须与声明的列的顺序相同。正如Galz提到的那样,你必须设置所有字段,甚至是可空的或自动递增的字段。事实上,对于后者,您必须传递null值。

例如,如果id是设置为“auto_increment”的主键,则此查询

INSERT INTO test VALUES (null, 'foo', 1);
SELECT * FROM test;

会返回

+----+--------------+--------+
| id | field1       | field2 |
+----+--------------+--------+
|  1 | field1 value |      0 |
|  2 | foo          |      1 |
+----+--------------+--------+

在另一个主题上,如果您事先不知道字段的顺序是什么,则可以执行此查询:

show columns from <table name>;

,在这种情况下会返回

+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(10)     | YES  |     | NULL    |       |
| field1 | varchar(16) | YES  |     | NULL    |       |
| field2 | tinyint(1)  | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

因此告诉您id是第一个字段,field1是第二个字段,field2是第三个字段。