2016-12-14 3 views
0

は私が89 Columns5 Million行で、[表A]私はMySQLのテーブルを持っているMySQL:テーブルから新しいテーブルにすべてのカラムを挿入する方法と、追加のカラムが一致しない場合はNULLを挿入する方法はありますか?

  • を説明しましょう。
  • [表A]に10 new columns(デフォルトはNULL)を追加する必要があります。現在、[Table A]に関するAlter Statementの実行には2時間以上かかります。
  • 私はcopied_table_a10 columnsを添加

    CREATE TABLE copied_table_a LIKE table_a;

  • として[表A]から[copied_Table A]にDDL構造をコピー。

  • 今、私は

    mysql> INSERT copied_table_a SELECT * FROM table_a; ERROR 1136 (21S01): Column count doesn't match value count at row 1

質問
ようcopied_table_atable_aからすべてのデータを挿入したい - copied_table_aになりましデータを取得するための最良の方法は何ですか?

+0

あなたは、元の89列を明示する必要はありませんか? –

+0

申し訳ありません。それは私が意味するものです – daydreamer

+0

明示的に列を一覧表示したくない、入力以外の理由はありますか? _ MySQL Workbenchなどの多くのDB管理アプリケーションは、リストされたすべてのフィールドから開始する選択クエリを作成できます。 – Uueerdo

答えて

2

私はあなたがすべての列を一覧表示することを示唆している、しかし、あなたが行うことができます:

INSERT INTO copied_table_a 
    SELECT a.*, 
      NULL, NULL, NULL, NULL, NULL, 
      NULL, NULL, NULL, NULL, NULL 
    FROM table_a; 
0

あなたがinformation_schema.columnsテーブルの使用を作ることができる入力して保存する簡単な方法をしたい場合:

select concat("insert into copied_table_a (", 
       group_concat(column_name), 
       ") select ", 
       group_concat(column_name)," from ",table_name) 
from information_schema.columns 
where table_name = 'table_a'; 

へSQLを生成します。一回限りだけど本当に楽しかったけど、遊びにはかなり楽しい。

関連する問題