続トリガの練習
2つのテーブルの片方をアップデートするともう片方にも同じデータを格納させる free64
Friday,July,12,2013 USE sadachika_shop; ○テーブルを作る ↓db名 ↓テーブル名 mysql> create table sadachika_shop.sadachi_art2013(sada_id int, sada_name varchar(20)); *データを入力 カラム名sada_id INT型, カラム名sada_name VARCHAR型 mysql> create table sadachika_shop.sadachi_art2013address(sada_name varchar(20), sada_pref varchar(20)); *トリガによりデータの格納を行なう *カラム名sada_name VARCHAR型, カラム名sada_pref VARCHAR型 ○データを入力 mysql> insert into sadachika_shop.sadachi_art2013 values(1, '木炭デッサン'); mysql> insert into sadachika_shop.sadachi_art2013(sada_id, sada_name) values(2, '日本画'); mysql> insert into sadachika_shop.sadachi_art2013(sada_id, sada_name) values(3, '油絵'); mysql> insert into sadachika_shop.sadachi_art2013address values('木炭デッサン', 'Hiroshima'); mysql> insert into sadachika_shop.sadachi_art2013address(sada_name, sada_pref) values('日本画', 'Kyoto'); mysql> insert into sadachika_shop.sadachi_art2013address(sada_name, sada_pref) values('油絵', 'Osaka'); ○テーブルの中身の表示 mysql> select * from sadachika_shop.sadachi_art2013; sada_id sada_name 1 木炭デッサン 2 日本画 3 油絵 mysql> select * from sadachika_shop.sadachi_art2013address; sada_name sada_pref 木炭デッサン Hiroshima 日本画 Kyoto 油絵 Osaka ○○UPDATEトリガ mysql> delimiter $$ ↓トリガ名 ↓db名 ↓テーブル名 mysql> create trigger sadachika_triggerupdate201307 after update on sadachika_shop.sadachi_art2013 for each row -> begin ↓db名 ↓テーブル名 ↓カラム名 ↓新しい ↓古い -> update sadachika_shop.sadachi_art2013address set sada_name = new.sada_name where sada_name = old.sada_name; -> end; -> $$ mysql> delimiter ; ○作成したトリガの一覧を取得する SHOW TRIGGERS\G sadachika_triggerupdate201307 ○トリガを削除 DROP TRIGGER trigger_name; mysql> drop trigger sadachika_triggerupdate201307; ○アップデートしてみます ↓古いデータ値 mysql> update sadachika_shop.sadachi_art2013 set sada_name = 'Kubo' where sada_name = 'Kudou'; ↓古いデータ値 *格納されていないデータのアップデートは無効 mysql> update sadachika_shop.sadachi_art2013 set sada_name = 'もくたんデッサン' where sada_name = '木炭デッサン'; *トリガは正常に働いた ↑新しいデータ値 ○テーブルの中身の表示 mysql> select * from sadachika_shop.sadachi_art2013; sada_id sada_name 1 もくたんデッサン *アップデートしました 2 日本画 3 油絵 mysql> select * from sadachika_shop.sadachi_art2013address; sada_name sada_pref もくたんデッサン Hiroshima *トリガも無事に動きました アップデートしました 日本画 Kyoto 油絵 Osaka _________________________ __________________________ ○作成したトリガの一覧を取得する 作成するにあたり、トリガ名が重複していないか確認する mysql> USE sadachika_shop; SHOW TRIGGERS; SHOW TRIGGERS\G ↓2つあるうちデータを入力するテーブル名 ↓db名 ↓テーブル名 SHOW TRIGGERS LIKE 'sadachi_triggertestuser'\G *データを書き込む方のテーブル名だと表示される(sadachika_shop.sadachi_triggertestuser) SHOW TRIGGERS LIKE 'sadachi_triggertestlog'\G *プログラムによる自動追記のテーブル名は表示されない(sadachika_shop.sadachi_triggertestlog) ↓db名 ↓テーブル名 show triggers like 'sadachi_user'\G *データを書き込む方のテーブル名だと表示される(sadachika_shop.sadachi_user) show triggers like 'sadachi_log'\G ○特定のデータベース内のテーブル 作成するにあたり、テーブル名が重複していないか確認する SHOW TABLES FROM sadachika_shop; ○テーブルの中身の表示 mysql> select * from sadachika_shop.sadachi_user; ------------------------------------------------------------------------------ ○現在接続されているデーターベース MySQL> select database(); database(); sadachika_shop ←接続されている ○テーブルを作る ↓db名 ↓テーブル名 mysql> create table sadachika_shop.sadachi_triggeruser(sada_id int, sada_name varchar(20)); *データを入力 カラム名sada_id INT型, カラム名sada_name VARCHAR型 mysql> create table sadachika_shop.sadachi_address(sada_name varchar(20), sada_pref varchar(20)); *トリガによりデータの格納を行なう *カラム名sada_name VARCHAR型, カラム名sada_pref VARCHAR型 カラムをプライマリーキー設定にしたい ○テーブルの構造を見る mysql> show columns from sadachika_shop.sadachi_triggeruser; Field Type Null Key Default Extra sada_id int(11) YES NULL *Key項目を変更する sada_name varchar(20) YES NULL ○○カラム定義だけを変更する mysql> alter table sadachika_shop.sadachi_triggeruser modify sada_id int primary key default'データがありません'; *ERROR *ついでにデフォルトも設定する ↑対象のカラム ↑*後続に変更したい型を入力する {INT型 primary key(重複データを許さない) default(無記入時に警告文を表示)} mysql> alter table sadachika_shop.sadachi_triggeruser modify sada_id int primary key; *デフォルトを取って再度挑戦 ○テーブルの構造を見る mysql> show columns from sadachika_shop.sadachi_triggeruser; Field Type Null Key Default Extra sada_id int(11) NO PRI NULL *Key項目を変更する sada_name varchar(20) YES NULL ○○カラム定義だけを変更する mysql> alter table sadachika_shop.sadachi_triggeruser modify sada_name varchar(20) default'データがありません'; *デフォルトNULL→データがありません ○テーブルの構造を見る mysql> show columns from sadachika_shop.sadachi_triggeruser; Field Type Null Key Default Extra sada_id int(11) NO PRI NULL sada_name varchar(20) YES データがありません *Default項目が変更された ○テーブルの構造を見る(sadachi_address) mysql> show columns from sadachika_shop.sadachi_address; Field Type Null Key Default Extra sada_name varchar(20) YES NULL sada_pref varchar(20) YES NULL ○○カラム定義だけを変更する(sadachi_address) mysql> alter table sadachika_shop.sadachi_address modify sada_name varchar(20) default'データがありません'; ↑変更したいカラムの名前 後続に型を記入していく ○テーブルの構造を見る(sadachi_address) mysql> show columns from sadachika_shop.sadachi_address; Field Type Null Key Default Extra sada_name varchar(20) YES データがありません *Default項目が変更された sada_pref varchar(20) YES NULL ○データをカラムに入力(sadachi_triggeruser) mysql> insert into sadachika_shop.sadachi_triggeruser values(1, 'Sadachika'); *全カラムを選択する省略文 mysql> insert into sadachika_shop.sadachi_triggeruser(sada_id) values(2); *データがありませんをテスト mysql> insert into sadachika_shop.sadachi_triggeruser(sada_id, sada_name) values(3, 'Atsushi'); mysql> insert into sadachika_shop.sadachi_triggeruser(sada_id, sada_name) values(4, 'Sakamoto'); mysql> insert into sadachika_shop.sadachi_triggeruser(sada_id, sada_name) values(5, 'Takeda'); mysql> insert into sadachika_shop.sadachi_triggeruser(sada_id, sada_name) values(6, 'Hayashi'); ○データをカラムに入力(sadachi_address) mysql> insert into sadachika_shop.sadachi_address values('sadachika', 'Hiroshima'); *全カラムを選択する省略文 mysql> insert into sadachika_shop.sadachi_address(sada_pref) values('Japan'); *データがありませんをテスト mysql> insert into sadachika_shop.sadachi_address(sada_name, sada_pref) values('Atsushi', 'Hiroshima'); mysql> insert into sadachika_shop.sadachi_address(sada_name, sada_pref) values('Sakamoto', 'Kyoto'); mysql> insert into sadachika_shop.sadachi_address(sada_name, sada_pref) values('Takeda', 'Osaka'); mysql> insert into sadachika_shop.sadachi_address(sada_name, sada_pref) values('Hayashi', 'Hokkaido'); mysql> insert into sadachika_shop.sadachi_address(sada_name, sada_pref) values('Goto', 'Fuchu'); ○テーブルの中身の表示 (sadachi_triggeruser) mysql> select * from sadachika_shop.sadachi_triggeruser; sada_id sada_name 1 Sadachika 2 データがありません 3 Atsushi 4 Sakamoto 5 Takeda 6 Hayashi 1 Sadachika 2 データがありません 3 Atsushi 4 Sakamoto 5 Takeda 6 Hayashi ○テーブルの中身の表示 (sadachi_address) mysql> select * from sadachika_shop.sadachi_address; sada_name sada_pref *sadachikaは頭が小文字 sadachika Hiroshima データがありません Japan Atsushi Hiroshima Sakamoto Kyoto Takeda Osaka Hayashi Hokkaido Goto Fuchu sadachika Hiroshima データがありません Japan Atsushi Hiroshima Sakamoto Kyoto Takeda Osaka Hayashi Hokkaido Goto Fuchu ○○○UPDATEトリガ mysql> delimiter $$ ↓トリガ名 ↓db名 ↓テーブル名 mysql> create trigger sadachika_triggerupdate after update on sadachika_shop.sadachi_triggeruser for each row -> begin ↓db名 ↓テーブル名 ↓カラム名 ↓新しい ↓古い -> update sadachika_shop.sadachi_address set sada_name = new.sada_name where sada_name = old.sada_name; -> end; -> $$ mysql> delimiter ; ○○アップデート ↓db名 ↓テーブル名 ↓カラム名 ↓更新するデータ ↓古いデータ mysql> update sadachika_shop.sadachi_triggeruser set sada_name = '定近' where sada_name = 'Sadachika'; Query OK, 2 row affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> update sadachika_shop.sadachi_triggeruser set sada_name = '充始' where sada_name = 'データがありません'; Query OK, 2 row affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> update sadachika_shop.sadachi_triggeruser set sada_name = '平山' where sada_name = 'Atsushi'; Query OK, 2 row affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> update sadachika_shop.sadachi_triggeruser set sada_name = '坂本' where sada_name = 'Sakamoto'; Query OK, 2 row affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> update sadachika_shop.sadachi_triggeruser set sada_name = '武田' where sada_name = 'Takeda'; Query OK, 2 row affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> update sadachika_shop.sadachi_triggeruser set sada_name = '林' where sada_name = 'Hayashi'; Query OK, 2 row affected (0.00 sec) Rows matched: 2 Changed: 2 Warnings: 0 mysql> insert into sadachika_shop.sadachi_triggeruser(sada_id, sada_name) values(7, 'Suzuki'); *トリガは働かない*sadachi_triggeruser→sadachi_addressへ上書きできるかテスト mysql> insert into sadachika_shop.sadachi_triggeruser(sada_id, sada_name) values(8, 'Yamazaki'); *トリガは働かない*sadachi_triggeruser→sadachi_addressへ追記できるかテスト mysql> update sadachika_shop.sadachi_triggeruser set sada_name = '鈴木' where sada_name = 'Suzuki'; *トリガは働かない Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 ○テーブルの中身の表示 (sadachi_triggeruser) mysql> select * from sadachika_shop.sadachi_triggeruser; sada_id sada_name 1 定近 *アップデート完了 2 充始 *アップデート完了 3 平山 *アップデート完了 4 坂本 *アップデート完了 5 武田 *アップデート完了 6 林 *アップデート完了 1 定近 *アップデート完了 2 充始 *アップデート完了 3 平山 *アップデート完了 4 坂本 *アップデート完了 5 武田 *アップデート完了 6 林 *アップデート完了 7 鈴木 *アップデート完了 ただトリガは働きません 8 Yamazaki ○テーブルの中身の表示 (sadachi_address) mysql> select * from sadachika_shop.sadachi_address; sada_name sada_pref 定近 Hiroshima *トリガ正常に働きました*sadachikaは頭が小文字→定近 where sada_name = 'Sadachika'; 充始 Japan *トリガ正常に働きました 平山 Hiroshima *トリガ正常に働きました 坂本 Kyoto *トリガ正常に働きました 武田 Osaka *トリガ正常に働きました 林 Hokkaido *トリガ正常に働きました Goto Fuchu 定近 Hiroshima *トリガ正常に働きました 充始 Japan *トリガ正常に働きました 平山 Hiroshima *トリガ正常に働きました 坂本 Kyoto *トリガ正常に働きました 武田 Osaka *トリガ正常に働きました 林 Hokkaido *トリガ正常に働きました Goto Fuchu ___ 記入ミスでことごとくエラーがでたため、もしかしたらプレイマリキーが問題ではと考えて、キーを削除することにした。 結局はトリガーのプログラム記入に問題があったんだけど。 もったいないので残しておきます。 ○テーブルの構造を見る mysql> show columns from sadachika_shop.sadachi_triggeruser; Field Type Null Key Default Extra sada_id int(11) NO PRI NULL sada_name varchar(20) YES データがありません *Default項目が変更された ○○カラム定義だけを変更する(sadachi_address) mysql> alter table sadachika_shop.sadachi_triggeruser modify sada_id int; ↑カラムの名前の後続に型を記入していく 変わらない mysql> alter table sadachika_shop.sadachi_triggeruser modify sada_id varchar(20) default'データがありません'; ↑カラムの名前の後続に型を記入していく primary keyが変わらない mysql> alter table sadachika_shop.sadachi_triggeruser modify sada_id int null; ↑カラムの名前の後続に型を記入していく ○○主キーを削除する mysql> alter table sadachika_shop.sadachi_triggeruser DROP PRIMARY KEY; mysql> alter table sadachika_shop.sadachi_triggeruser modify sada_id int null; ↑カラムの名前の後続に型を記入していく ○テーブルの構造を見る mysql> show columns from sadachika_shop.sadachi_triggeruser; Field Type Null Key Default Extra sada_id int(11) YES NULL *やっと元にもどった sada_name varchar(20) YES データがありません
* 参考にしたサイトは→ こちら です。
これは赤色の文字例です。
これは青色の文字例です。