3-3.テーブルを更新する

3-3.テーブルを更新する
2004年 4月22日(木)
01T6074X
茂木啓悟
テーブルを更新する(P69~79)
• テーブルにレコードがすでに入力されてお
り、それらを変更する場合は、「データの更
新」を行う。また、追加や削除にも所定の
操作が必要になり、追加の際にはファイル
からの一括追加も可能である。
データを変更する
• データの更新にはupdate文を使う。更新の際に
は必ずwhere句を使って、更新対象のレコードを
指定する。
mysql> update FRIENDS_T set ADD_C =
-> “北海道函館市何処町1-1-1”where ID_C = “1”;
• where句で更新対象のデータを指定しないで
updateコマンドを発行すると、すべてのレコードの
カラムが変わってしまうので注意。
• また更新するカラムとそのカラムのデータ
をwhere以下に指定して、レコードを更新す
ることも可能。
mysql> update FRIENDS_T set ADD_C=
-> “北海道函館市何処町1-1-1”where ID_C =
-> “東京都千代田区何処町1-1-1”
• この場合は、where以下で指定する語句が
1字でも異なると、「該当データがない」とい
うことになり、更新できない。
データの削除
• データを削除する場合、データの更新同
様、where句で削除するレコードの条件を
指定し、deleteコマンドを発行する。
mysql> delete from FRIENDS_T where ID_C = “4”
上のコマンドでIDが4の出雲友子さんが削
除される。
• 条件に該当するレコードが2つ以上あれ
ば、それらすべてが消えてしまう。
• レコード中の特定のカラムのデータのみを消すと
きは、Null値もしくは“”(空文字)にカラムのデー
タを置き換えるようにする。
mysql> update FRIEND_T set ADD_C = null where ID_C = 3;
上のコマンドでID_Cが3の友田知香さんの住所
がNullになる。
次のコマンドで友田さんの内容を確認すると、
mysql> select * from FRIENDS_T where NAME_C like “友田%”;
+---+---- - + ----+
|ID_C |NAME_C |ADD_C |
+---+---- - + ----+
|
3 |友田知香 | NULL |
+---+---- - + ----+
友田さんの住所がNull値なっていることが
認できる。
Null値とは「何も入っていない」を意味し、入
力するときは“”で囲んではいけない。
ファイルからのデータ入力
[friends.csv]
3,友田知香,青森県青森市何処町2-2-2
4,出雲友子,岩手県青森市何処町2-3-3
5,是田良友,埼玉県さいたま市何処町3-2-7
上のカンマ区切りのデータ、friends.csvを
テーブルに読み込むときは、
1.MySQLの導入されたマシンの上の書き込み権限
のあるディレクトリにfriends.csvを置く。
2.SQLコマンドを発行し,データを取り込む。
mysql> load data infile
-> “/directory_names/friends.csv”
-> into table FRIENDS_NEW fields terminated by “,”;
「 /directory_names/ 」の中は,データファイルがある
場所を絶対パスで記述する。
2行目以降を読み込む場合は,上のSQLコマンドの
最後に -> ignore 1 lines; を付け足す。
他のテーブルのデータを入力
• コピー元のテーブルFRIENDS_T2をコピー
先のテーブルFRIENDS_T2_COPYにすべ
てのデータを流し込むには、
mysql> insert into FRIENDS_T2_COPY select * from
-> FRIENDS_T2;
カラムを個別に指定してデータを追加する
場合は
mysql> insert into
-> FRIENDS_T2_COPY(ID_C2,NAME _C2,BLOOD_C2) select
-> ID_C,NAME_C,BLOOD_C from FRIENDS_T2;
とすることでFRIENDS_T2の 3カラム分の
レコードがFRIENDS_T2_COPYへコピーさ
れる。
カラムを操作する
• カラムの追加
既存のテーブルのカラムを増やす場合は,
「alter table テーブル名 add カラム名 データ型」
が基本構造となる。
mysql> alter table FRIENDS_T add AGE_C int;
上のコマンドで既存のテーブルに整数型の年齢カ
ラムが追加される。
この場合、AGE_Cは既存のカラムの最後に追加
される。
• 追加する位置を指定する場合
既存のカラムの最初に追加する場合は
「first」を付け足す。
mysql> alter table FRIENDS_T add AGE_C01 int first;
上のコマンドでAGE_C01というカラムが先
頭に追加される。
指定した既存のカラムのあとに追加する時
は、コマンドに「arter カラム名」を付け足
す。
mysql> alter table FRIENDS_T add AGE_C02 int after
-> NAME_C;
上のコマンドで名前カラムの後に年齢カラ
ムAGE_C02が追加される。
• カラムの削除
既存のテーブルから不要なカラムを削除
する場合は、「alter table テーブル名 drop
カラム名」というコマンドを使う。
mysql> alter table FRIENDS_T drop AGE_C01;
このコマンドで前に作成したAGE_C01が削除
される。
「drop」で削除すると確認のメッセージなしに
実行されるので注意。
• カラム名の変更
既存のテーブルからカラムの名前を変更
する場合は、
「alter table テーブル名 change 現在のカラ
ム名 新カラム名 データ型」が基本構造。
mysql> alter table FRIENDS_T change AGE_C02 AGE_C00
ー> int;
上のコマンドでAGE_C02がAGE_C00に変
更されます。
• カラムの定義の変更
既存のテーブルからカラムのデータ型や
属性を変更する場合は、
mysql> alter table FRIENDS_T change AGE_C00 AGE_C00
ー> tinyint;
上のコマンドでデータ型がintからtinyintに
変更される。
文字列型のデータのカラムを数値型に変
更する場合、数値でないカラムのデータは
すべて0に変わってしまうので注意。
「alter table テーブル名 modify カラム名
新データ型」のコマンドで同様にカラムの
データ型と属性だけを変更するとができ
る。
mysql> alter table FRIENDS_T modify AGE_C00 int;
上のコマンドでAGE_C00のデータ型が
intに変更される。
テーブルを操作する
• テーブル名の変更
「alter table 現在のテーブル名 rename as
新テーブル名」の構文で既存のテーブル
名を変更する。
mysql> alter table FRIENDS_T rename as FRIENDS_T2;
上のコマンドで既存のテーブル名FRIENDS_T
が新テーブル名FRIENDS_T2に変更される。
• テーブルの削除
テーブルを削除する場合は
mysql> drop table FRIENDS_T02;
このコマンドでFRIENDS_T02は削除される。
2つ以上のテーブルを一度に削除する場合
は,テーブル名を「,」で区切って記述する。
また、指定したテーブルが存在しない場合
は 「ERROR 1051:Unknown table」 という
エラーが表示されるが、
mysql> drop table if exists TTTT,TTTT2;
のように、「if exists」を付け加えると存在し
ないテーブル名TTTT、TTTT2を削除しよう
としてもエラー表示は出ない。
DBを削除する
• DBに対する可能な操作は、DBの削除だ
けで、既存のDBの名前を変更することは
できない。
• DB名を変更したい場合は、mysqldumpで
ファイルにバックアップし、新しい名前の
DBを作った後、その中へバックアップした
ファイルの内容を流し込む。
mysql> drop database DB_NAME;
上のコマンドでデータベースDB_NAMEと
その中のテーブルすべてが削除される。
また、「if exists」を入れることでDBが存在
しなくてもエラー表示は出なくなる。