为什么这个insert语句在mysql中不起作用?

时间:2011-09-16 23:07:18

标签: mysql database insert

这是我的代码片段。 我不知道为什么insert语句(第3个片段)不起作用?

/* work nicely*/
    create table t1
    (
      a int,
      b varchar(255)
    );

/* work nicely*/
insert into t1 values (1,"one"),(2,"two");

/* Why does this one not work??? */
insert into t1 
values select * from t1;

1 个答案:

答案 0 :(得分:5)

通常,当您使用SELECT查询的结果作为INSERT查询的值时,将删除VALUES关键字。 This is true in MySQL as well

INSERT INTO t1 
SELECT * FROM t1;

上面给出的版本是脆弱的,因为它在很大程度上依赖于源表和目标表中列的数量,顺序和类型是相同的(可能在大多数实际情况下,您不会插入取自的值同一张表)。

我建议在使用INSERT..SELECT作为最佳做法时明确指定列:

INSERT INTO t1(col1, col2, col3)
SELECT colA, colB, colC FROM t2