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

2 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;
Run Code Online (Sandbox Code Playgroud)

Dan*_*n J 5

通常,当您使用SELECT查询的结果作为INSERT查询的值时,将删除VALUES关键字.在MySQL中也是如此:

INSERT INTO t1 
SELECT * FROM t1;
Run Code Online (Sandbox Code Playgroud)

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

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

INSERT INTO t1(col1, col2, col3)
SELECT colA, colB, colC FROM t2
Run Code Online (Sandbox Code Playgroud)