おさらい テーブルに格納されている値をテーブル名ごと他のデータベースにコピーする。
その後、値をアップデートしたり、上書きしたりといろいろテストした。
上書きされる側と上書きする側を計算式で足したいのだがやり方がわからなかった。 free82

Friday,July,26,2013

○○元テーブルのカラムを指定して新しいテーブルに値をコピーする  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

mysql> create table sadachika_copy.sadachi_copyproducts select * from sadachika_shop.sadachi_products;
                    ↑新データベース名       ↑新テーブル名    ↑全てのカラムを選択       ↑元カラム名
Query OK, 13 rows affected (0.13 sec)
Records: 13 Duplicates: 0 Warnings: 0
○テーブルの中身の表示
select * from sadachika_copy.sadachi_copyproducts;
sada_id    sada_name        sada_category  sada_price    sada_releasedate
1          牛乳             飲み物                198    2013-10-18
2          たこ焼き         食べ物                100    2012-07-25
3          りんご           果物                  150    2013-01-08
4          ワイン           飲み物                250    2013-03-12
5          ピザ             食べ物                450    2011-05-03
6          ブドウ           果物                  300    2013-07-16
7          にんじん         野菜                   35    2013-03-17
8          コーラ           飲み物                 98    2012-05-21
9          牛丼             食べ物                350    2011-02-25
10         キューイフルーツ 果物                  160    2013-09-19
11         ほうれん草       野菜                  145    2013-04-25
12         ビール           飲み物                220    2012-07-01
13         天丼             食べ物                460    2013-06-25

○カラムの構造を見る
mysql> show columns from sadachika_copy.sadachi_copyproducts;            
Field             Type         Null   Key    Default    Extra
sada_id           int(11)      NO            NULL                  
sada_name         varchar(20)  YES           NULL                  
sada_category     varchar(20)  YES           NULL                  
sada_price        int(11)      YES           NULL               
sada_releasedate  date         YES           NULL             
5 rows in set (0.00 sec)

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

mysql> show columns from sadachika_copy.sadachi_copyproducts;            
Field             Type         Null   Key    Default    Extra
sada_copyid       int(11)      NO     PRI    NULL               *Key項目にPRIが表示された   
sada_name         varchar(20)  YES           NULL                  
sada_category     varchar(20)  YES           NULL                  
sada_price        int(11)      YES           NULL               
sada_releasedate  date         YES           NULL             
5 rows in set (0.00 sec)

○○「sada_releasedate」カラムの値が'20120101を含む、以降 20130101を含む、まで'のデータだけを取得します。
mysql> select * from sadachika_copy.sadachi_copyproducts where sada_releasedate >= 20120101 and sada_releasedate <= 20130101;
sada_copyid    sada_name        sada_category  sada_price    sada_releasedate
2              たこ焼き         食べ物                100    2012-07-25
8              コーラ           飲み物                 98    2012-05-21
12             ビール           飲み物                220    2012-07-01
3 rows in set (0.00 sec)

○○削除する桁数と並べ替え  カラムsada_releasedate の値が10120601より大きく20130101より小さければ削除する。
mysql> delete from sadachika_copy.sadachi_copyproducts where sada_releasedate >= 20120101 and sada_releasedate <= 20130101; 
Query OK, 3 rows affected (0.02 sec)

select * from sadachika_copy.sadachi_copyproducts;
sada_copyid    sada_name        sada_category  sada_price    sada_releasedate
1              牛乳             飲み物                198    2013-10-18
                                                                      *削除された
3              りんご           果物                  150    2013-01-08
4              ワイン           飲み物                250    2013-03-12
5              ピザ             食べ物                450    2011-05-03
6              ブドウ           果物                  300    2013-07-16
7              にんじん         野菜                   35    2013-03-17
                                                                      *削除された
9              牛丼             食べ物                350    2011-02-25
10             キューイフルーツ 果物                  160    2013-09-19
11             ほうれん草       野菜                  145    2013-04-25
                                                                      *削除された
13             天丼             食べ物                460    2013-06-25

○○「sada_releasedate」カラムの値が'20130102を含む、以降 20131017を含む、まで'のデータだけを取得します。
mysql> select * from sadachika_copy.sadachi_copyproducts where sada_releasedate >= 20130102 and sada_releasedate <= 20131017;
sada_copyid    sada_name        sada_category  sada_price    sada_releasedate
3              りんご           果物                  150    2013-01-08
4              ワイン           飲み物                250    2013-03-12
6              ブドウ           果物                  300    2013-07-16
7              にんじん         野菜                   35    2013-03-17
10             キューイフルーツ 果物                  160    2013-09-19
11             ほうれん草       野菜                  145    2013-04-25
13             天丼             食べ物                460    2013-06-25
7 rows in set (0.00 sec)

○○削除する桁数と並べ替え  カラムsada_releasedate の値が20130102より大きく20131017より小さければ削除する。
mysql> delete from sadachika_copy.sadachi_copyproducts where sada_releasedate >= 20130102 and sada_releasedate <= 20131017; 
Query OK, 7 rows affected (0.00 sec)

select * from sadachika_copy.sadachi_copyproducts;
sada_copyid    sada_name        sada_category  sada_price    sada_releasedate
1              牛乳             飲み物                198    2013-10-18
5              ピザ             食べ物                450    2011-05-03
9              牛丼             食べ物                350    2011-02-25

○○削除する桁数と並べ替え  カラムsada_copyid の値が1と同じか大きく、9と同じか多きければ削除する。
mysql> delete from sadachika_copy.sadachi_copyproducts where sada_copyid >= 1 and sada_copyid <=9; 
Query OK, 3 rows affected (0.00 sec)

select * from sadachika_copy.sadachi_copyproducts;
Empty set (0.00 sec)

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


select * from sadachika_copy.sadachi_copyproducts;
sada_copyid    sada_name        sada_category  sada_price    sada_releasedate
1              牛乳             飲み物                198    2013-10-18
2              たこ焼き         食べ物                100    2012-07-25
3              りんご           果物                  150    2013-01-08
4              ワイン           飲み物                250    2013-03-12
5              ピザ             食べ物                450    2011-05-03
6              ブドウ           果物                  300    2013-07-16
7              にんじん         野菜                   35    2013-03-17
8              コーラ           飲み物                 98    2012-05-21
9              牛丼             食べ物                350    2011-02-25
10             キューイフルーツ 果物                  160    2013-09-19
11             ほうれん草       野菜                  145    2013-04-25
12             ビール           飲み物                220    2012-07-01
13             天丼             食べ物                460    2013-06-25

上書きテスト
おさらいメモ。ユニークキーに設定すれば、この文も使用できるようになる。
○ON DUPLICATE KEY UPDATE句を使用して、重複する値の上書き格納を行なう
mysql> insert into sadachika_copy.sadachi_copyproducts select sada_id, sada_name, sada_category, sada_price, sada_releasedate from sadachika_shop.sadachi_products  
    -> on duplicate key update sada_copyid=values(sada_copyid), sada_name=values(sada_name), sada_category=values(sada_category), sada_price=values(sada_price), sada_releasedate=values(sada_releasedate);
                                   ↑新カラム                    ↑新カラム                  ↑新カラム                                        
Query OK, 13 rows affected (0.00 sec)
Records: 13 Duplicates: 0 Warnings: 0

mysql> insert into sadachika_copy.sadachi_copyproducts select sada_id, sada_name, sada_category, sada_price, sada_releasedate from sadachika_shop.sadachi_products  
    -> on duplicate key update sada_copyid=values(sada_copyid), sada_name=values(sada_name), sada_category=values(sada_category), sada_price=values(sada_price)+1, sada_releasedate=values(sada_releasedate);
                                   ↑新カラム                    ↑新カラム                  ↑新カラム                                        ↑1コピーしたかどうか分らないので目印としてプラス1
Query OK, 13 rows affected (0.00 sec)
Records: 13 Duplicates: 0 Warnings: 0

ERROR mysql> insert into sadachika_copy.sadachi_copyproducts select sada_id, sada_name, sada_category, sada_price, sada_releasedate from sadachika_shop.sadachi_products  
          -> on duplicate key update sada_copyid=values(sada_copyid), sada_name=values(sada_name), sada_category=values(sada_category), sada_price=values(sada_price)+sada_price, sada_releasedate=values(sada_releasedate);
                                         ↑新カラム                    ↑新カラム                  ↑新カラム                                        ↑上書き重複テスト  なぜか失敗
Query OK, 13 rows affected (0.00 sec)
Records: 13 Duplicates: 0 Warnings: 0

○アップデート
mysql> update sadachika_copy.sadachi_copyproducts set sada_name = '定近', sada_category = 'ピープル',sada_releasedate = 19990909 where sada_copyid = 2;
Query OK, 1 row affected (0.25 sec)
Rows matched: 1 Changed: 1 Warnings: 0

○○削除する桁数と並べ替え  カラムsada_copyid の値が6と同じか大きく、8と同じか多きければ削除する。
mysql> delete from sadachika_copy.sadachi_copyproducts where sada_copyid >= 6 and sada_copyid <=8; 
Query OK, 3 rows affected (0.00 sec)

select * from sadachika_copy.sadachi_copyproducts;
sada_copyid    sada_name        sada_category  sada_price    sada_releasedate
1              牛乳             飲み物                199    2013-10-18
2              定近             ピープル              101    1999-09-09    *値が変更された
3              りんご           果物                  151    2013-01-08
4              ワイン           飲み物                251    2013-03-12
5              ピザ             食べ物                451    2011-05-03
                                                                           *削除された
                                                                           *削除された
                                                                           *削除された
9              牛丼             食べ物                351    2011-02-25
10             キューイフルーツ 果物                  161    2013-09-19
11             ほうれん草       野菜                  146    2013-04-25
12             ビール           飲み物                221    2012-07-01
13             天丼             食べ物                461    2013-06-25

○値を元に戻す
mysql> insert into sadachika_copy.sadachi_copyproducts select sada_id, sada_name, sada_category, sada_price, sada_releasedate from sadachika_shop.sadachi_products  
    -> on duplicate key update sada_copyid=values(sada_copyid), sada_name=values(sada_name), sada_category=values(sada_category), sada_price=values(sada_price), sada_releasedate=values(sada_releasedate);
                                   ↑新カラム                    ↑新カラム                  ↑新カラム                                        
Query OK, 23 rows affected (0.03 sec)
Records: 13 Duplicates: 10 Warnings: 0

select * from sadachika_copy.sadachi_copyproducts;
sada_copyid    sada_name        sada_category  sada_price    sada_releasedate
1              牛乳             飲み物                198    2013-10-18
2              たこ焼き         食べ物                100    2012-07-25
3              りんご           果物                  150    2013-01-08
4              ワイン           飲み物                250    2013-03-12
5              ピザ             食べ物                450    2011-05-03
6              ブドウ           果物                  300    2013-07-16
7              にんじん         野菜                   35    2013-03-17
8              コーラ           飲み物                 98    2012-05-21
9              牛丼             食べ物                350    2011-02-25
10             キューイフルーツ 果物                  160    2013-09-19
11             ほうれん草       野菜                  145    2013-04-25
12             ビール           飲み物                220    2012-07-01
13             天丼             食べ物                460    2013-06-25



ERROR mysql> insert into sadachika_copy.sadachi_copyproducts select sada_id, sada_name, sada_category, sada_price, sada_releasedate from sadachika_shop.sadachi_products  
          -> on duplicate key update sada_copyid=values(sada_copyid), sada_name=values(sada_name), sada_category=values(sada_category), sada_price=sada_price+1, sada_releasedate=values(sada_releasedate);
                                         ↑新カラム                    ↑新カラム                  ↑新カラム                                        ↑上書き重複テスト  なぜか失敗

free70.69










////////////////////////////番外編//////////////////////////////////////
カラムに格納してある値をテーブルごとまるまるコピーしようとしたところ、同じテーブル名が存在した。
テーブルの名前を変える。


○データベースを表示させる
show databases;
○データベースに接続する
USE sadachika_shop;
○テーブルを表示させる。
SHOW TABLES;
○テーブルの中身の表示 
mysql> select * from sadachika_shop.sadachi_goods;


○特定のデータベース内のテーブルを表示させる 
SHOW TABLES FROM sadachika_copy;
Tables_in_sadachika_copy
sadachi_copyproducts*データを格納していない
sadachi_copysourcetable
sadachi_newcopyproductname

Empty set (0.33 set)


○○テーブルの名前を変更する                                             ↓新しいテーブル名
mysql> alter table sadachika_copy.sadachi_copyproducts rename to sadachika_copy.sadachi_nodatatable;
Query OK, 0 rows affected (0.03 sec)

○テーブルの削除場合はこんな感じ
             ↓テーブル
mysql> drop table sadachika_shop.sadachi_drink15;                       *ビューをテーブルを削除する式では、削除できない
ERROR 1051 (42S02): Unknown table 'sadachika_shop.sadachi_drink15'

○特定のデータベース内のテーブルを表示させる 
SHOW TABLES FROM sadachika_copy;
Tables_in_sadachika_copy
sadachi_copysourcetable
sadachi_newcopyproductname
sadachi_nodatatable         *テーブル名が変更された


select * from sadachika_copy.sadachi_copyproducts; → select * from sadachika_copy.sadachi_nodatatable;

select * from sadachika_copy.sadachi_copysourcetable;

select * from sadachika_copy.sadachi_newcopyproductname;



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

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

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