おさらい 2パターン 旧テーブルの値を新テーブルへコピーする方法。free79

Wednesday,July,24,2013

その1  <旧テーブルの設定を新しいテーブルを作成する時にコピーする。尚、旧テーブルの値は新テーブルにコピーされない。別途insert ignore を用い値を格納する。>
      sadachika_shop.sadachi_sourcetable  →  show columns from sadachika_shop.sadachi_copysourcetable

○○元テーブル(sadachi_sourcetable)設定をそのままに新しいテーブル(sadachi_copysourcetable)を作る。
尚、設定のみコピーし、値のコピーは行なわれない。
mysql> create table sadachika_copy.sadachi_copysourcetable like sadachika_shop.sadachi_sourcetable;
                     ↑新しいデータベース名    ↑新テーブル名       ↑元データベース名    ↑元テーブル名
Query OK, 0 rows affected (0.14 sec)

○テーブルの中身の表示 
mysql> select * from sadachika_shop.sadachi_sourcetable;
sada_id     sada_cate    sada_name
      1             1    牛乳
      2             1    紅茶
      3             2    牛丼
      4             2    天丼
      5             2    親子丼
      6             1    お茶
      7             3    マグロ
      8             4    オレンジ
      9             4    りんご
     10             3    さんま
     11             3    鯛
     12             1    水
     13             4    パイナップル
     14             3    うなぎ
     15             3    カレイ
     16             1    スプライト

○○テーブルの中身の表示 ↓新しいデータベース名    ↓新テーブル名
mysql> select * from sadachika_copy.sadachi_copysourcetable;    *設定のみコピーし、値のコピーは行なわれていない
Empty set (0.01 sec)

show columns from sadachika_shop.sadachi_sourcetable;
Field          Type         Null   Key    Default    Extra
sada_id        int(11)      NO     PRI    NULL                  *Key項目はPRI *カラム名sada_id  int(11)型
sada_cate      int(11)      YES           NULL                  *カラム名sada_cate int(11)型
sada_name      varchar(10)  YES           NULL                  *カラム名sada_name VARCHAR(10)型 ←十ってめずらしい。
3 rows in set (0.13 sec)

show columns from sadachika_copy.sadachi_copysourcetable;
Field          Type         Null   Key    Default    Extra
sada_id        int(11)      NO     PRI    NULL                  *Key項目はPRI *カラム名sada_id  int(11)型
sada_cate      int(11)      YES           NULL                  *カラム名sada_cate int(11)型
sada_name      varchar(10)  YES           NULL                  *カラム名sada_name VARCHAR(10)型 ←十ってめずらしい。
3 rows in set (0.13 sec)

○○他のテーブルから、本家のテーブルに値を格納する
本家テーブルのsada_nameカラムにはユニーク設定が施されているので重複の値を格納できない
そこでエラーを発生させないIGNOREを入れるプログラムを作成する
               ↓IGNOREを入れる
mysql> insert ignore into sadachika_copy.sadachi_copysourcetable select sada_id, sada_cate, sada_name from sadachika_shop.sadachi_sourcetable;
                          ↑格納する新データベース名 ↑格納する新テーブル名  ↑旧カラム↑旧カラム ↑旧カラム    ↑旧db名     ↑旧テーブル名
Query OK, 16 rows affected (0.06 sec)
Records: 16 Duplicates: 0 Warnings: 0

○○テーブルの中身の表示 ↓新しいデータベース名    ↓新テーブル名
mysql> select * from sadachika_copy.sadachi_copysourcetable;   
sada_id     sada_cate    sada_name
      1             1    牛乳
      2             1    紅茶
      3             2    牛丼
      4             2    天丼
      5             2    親子丼
      6             1    お茶
      7             3    マグロ
      8             4    オレンジ
      9             4    りんご
     10             3    さんま
     11             3    鯛
     12             1    水
     13             4    パイナップル
     14             3    うなぎ
     15             3    カレイ
     16             1    スプライト
16 rows in set (0.00 sec)





















その2  <旧テーブルの値を、新しいテーブルへコピーする、尚テーブルの設定はコピーできない。別途カラムの定義の設定を行なう>

○○元テーブルのカラムを指定して新しいテーブルに値をコピーする  free57  尚テーブルの設定プライマリー設定はコピーされない。
そのかわりテーブルの値はコピーできます。
mysql> create table sadachika_copy.sadachi_newcopyproductname select sada_id, sada_name, sada_cate from sadachika_shop.sadachi_sourcetable;
                        ↑新データベース名     ↑新テーブル名         ↑元カラム名  並ぶ順番を入れ替えています ↑元データベース名     ↑元テーブル名名
Query OK, 16 rows affected (0.48 sec)
Records: 16 Duplicates: 0 Warnings: 0

○特定のデータベース内のテーブルを表示させる 
SHOW TABLES FROM sadachika_copy;     
Tables_in_sadachika_copy
sadachi_copyproducts
sadachi_copysourcetable
sadachi_newcopyproductname    *テーブルが増えた
3 rows in set (0.00 set)

○カラムの構造を見る
mysql> show columns from sadachika_copy.sadachi_newcopyproductname;            
Field          Type         Null   Key    Default    Extra
sada_id        int(11)      NO            NULL                  *もとはKey項目にPRIがあったが無くなっている *カラム名sada_id  int(11)型
sada_name      varchar(10)  YES           NULL                  *順番は入れ変わりました。*カラム名sada_name VARCHAR(10)型 ←十ってめずらしい。
sada_cate      int(11)      YES           NULL                  *カラム名sada_cate int(11)型
3 rows in set (0.13 sec)

○○テーブルの中身の表示 カラムの表示の順番を変えました。
mysql> select * from sadachika_copy.sadachi_newcopyproductname;
sada_id     sada_name    sada_cate
      1     牛乳                 1
      2     紅茶                 1
      3     牛丼                 2
      4     天丼                 2
      5     親子丼               2
      6     お茶                 1
      7     マグロ               3
      8     オレンジ             4
      9     りんご               4
     10     さんま               3
     11     鯛                   3
     12     水                   1
     13     パイナップル         4
     14     うなぎ               3
     15     カレイ               3
     16     スプライト           1

○プライマリーキー設定が無くなってしまったので、改めて設定し直します。
VARCHAR型なら、unique その他のオプション default 'データなし', default 0, not null(データなし を許さない)
INT型なら、primary key

おさらいメモ
○カラム定義だけを変更する
mysql> alter table sadachika_shop.sadachi_food modify hirayama_id smallint;
                                                       ↑対象のカラム ↑*変更したい型を入力する  {元はINT型 not null(データ無しを許さない)} → SMALLINT型へ変更を行なう
○カラム名の変更、データ型の変更
mysql> alter table sadachika_shop.sadachi_food change sada_id hirayama_id int not null; *名前だけ変更するのであってもあわせて型を入力する。
                                                       ↑旧カラム名   ↑新しく変更するカラム名(hirayama_id)

○○これを使う カラム名の変更、データ型の変更                       ↓旧カラム名  ↓新しく変更するカラム名(sada_copyid)
mysql> alter table sadachika_copy.sadachi_newcopyproductname change sada_id sada_copyid int(11) not null primary key;  *プライマリーキー設定、データ無しを許可しない設定。*名前だけ変更するのであってもあわせて型を入力する。
                                                                     ↓旧カラム名  ↓新しく変更するカラム名(sada_copyname)
mysql> alter table sadachika_copy.sadachi_newcopyproductname change sada_name sada_copyname varchar(20) unique;        *ユニークキーを設定した。
                                  
mysql> alter table sadachika_copy.sadachi_newcopyproductname change sada_cate sada_copycate int(11); 
Query OK, 0 rows affected (0.41 sec)
Records: 0 Duplicates: 0 Warnings: 0

○テーブルの中身の表示 カラムの表示の順番を変えました。
mysql> select * from sadachika_copy.sadachi_newcopyproductname;
sada_copyid     sada_copyname    sada_copycate   *カラム名が変わったsada_id→sada_copyid, sada_name→sada_copyname, sada_cate→sada_copycate
      1     牛乳                 1
      2     紅茶                 1
      3     牛丼                 2
      4     天丼                 2
      5     親子丼               2
      6     お茶                 1
      7     マグロ               3
      8     オレンジ             4
      9     りんご               4
     10     さんま               3
     11     鯛                   3
     12     水                   1
     13     パイナップル         4
     14     うなぎ               3
     15     カレイ               3
     16     スプライト           1

○カラムの構造を見る
mysql> show columns from sadachika_copy.sadachi_newcopyproductname;            
Field          Type         Null   Key    Default    Extra
sada_copyid    int(11)      NO     PRI    NULL                  *Key項目PRI *カラム名sada_copyid  int(11)型
sada_copyname  varchar(20)  YES    UNI    NULL                  *順番は入れ変わりました。*カラム名sada_copyname VARCHAR(20)型 10→20。
sada_copycate  int(11)      YES           NULL                  *カラム名sada_copycate int(11)型
3 rows in set (0.01 sec)



* 参考にしたサイトは→ こちら です。

これは赤色の文字例です。

これは青色の文字例です。