おさらい 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)
* 参考にしたサイトは→ こちら です。
これは赤色の文字例です。
これは青色の文字例です。