使用SELECT和一些DEFAULT值插入INTO

时间:2014-12-26 18:56:15

标签: mysql sql

我有桌子

person
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| name         | varchar(100) | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

chatroom
+-----------+---------+------+-----+---------+----------------+
| Field     | Type    | Null | Key | Default | Extra          |
+-----------+---------+------+-----+---------+----------------+
| id        | int(11) | NO   | PRI | NULL    | auto_increment |
| col1      | int(11) | YES  |     | NULL    |                |
| col2      | int(11) | YES  |     | NULL    |                |
+-----------+---------+------+-----+---------+----------------+

我希望执行以下语句(对于每个person,在chatroom中添加一行,其中包含相应的person.idDEFAULT以及NULLidcol2列)

INSERT INTO chatroom (DEFAULT, col1, NULL) SELECT DEFAULT, id AS col1, NULL FROM person;

但它不起作用。 有人可以更正查询吗?

4 个答案:

答案 0 :(得分:1)

您的id字段为auto_increment,因此您可以将其保留在查询之外,它会自动将该行设置为下一个值。此外,由于col2的默认值为NULL,因此也可以将其排除在查询之外。它将自动设置为默认值。

INSERT INTO chatroom (col1) SELECT id FROM person

答案 1 :(得分:1)

因为chatroom表的id列为自动增量,所以不需要传递此列的值。在表中插入新行时,此列具有自动值。所以不需要DEFAULT

其次,col2将根据您的表定义接受null,因此在您有一些值需要放入此列之前,也无需为此列传递值

所以你必须只为此指定列,你有值

因此,如果您想在null列中插入col2值,请使用此

INSERT INTO chatroom (col1) 
SELECT id FROM person;

因此,如果您想在col2列中插入一些值,请使用此

INSERT INTO chatroom (col1,col2) 
SELECT id, col2 FROM person;

答案 2 :(得分:0)

第一个列表必须包含列名,而不是值。要插入默认值,只需从列表中省略它:

INSERT INTO chatroom (col1, col2)
SELECT id, NULL
FROM person

答案 3 :(得分:0)

无需在查询中包含DEFAULT。试试这个:

INSERT INTO chatroom (col1, col2) SELECT id AS col1, NULL FROM person;

如果您未在INSERT语句中包含列,则会尝试使用默认值(如果可用)。