続トリガの練習
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 データがありません
* 参考にしたサイトは→ こちら です。
これは赤色の文字例です。
これは青色の文字例です。