почему этот оператор вставки не работает в MySQL? - PullRequest
2 голосов
/ 17 сентября 2011

Вот мои фрагменты кода.Я не знаю, почему операторы вставки (третий фрагмент) не работают?

/* 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 Ответ

5 голосов
/ 17 сентября 2011

Как правило, когда вы используете результаты запроса SELECT в качестве значений для запроса INSERT, вы отбрасываете ключевое слово VALUES. Это верно и для MySQL :

INSERT INTO t1 
SELECT * FROM t1;

Приведенная выше версия хрупка, поскольку в значительной степени зависит от количества, порядка и типа столбцов в источнике ицелевые таблицы одинаковы (по-видимому, в большинстве реальных случаев вы не будете вставлять значения, взятые из той же таблицы ).

Я рекомендую явно указывать столбцы при использовании INSERT..SELECT в качествеЛучшая практика:

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