2019年5月24日
目次
mysqlにおいてはviewとは仮想的な表を表します。viewに対しては通常のテーブルと同じようにSELECT句を使うことができます。下記にVIEWの作成と使い方について簡単に作成します。
ビューの作成
CREATE VIEW ビュー名 AS SELECT ~
ビューの変更
ALTER VIEW ビュー名 AS SELECT ~
ビューの削除
DROP VIEW ビュー名
作成したビューのスキーマを確認
SELECT * FROM information_schema.views WHERE table_name = "ビュー名";
もしくは下記を入力します。
SHOW CREATE VIEW ビュー名;
ストアドプロシージャーは、データの検索や抽出などの処理を事前に登録しそれを呼び出すことによりデータの検索や抽出を行います。下記にストアドプロシージャーの操作についてまとめていきます。
ストアドプロシージャの作成(引数なし)
CREATE PROCEDURE プロシージャ名 ()
BEGIN
SQL文
SQL文
END
ストアドプロシージャの作成(引数あり)
CREATE PROCEDURE プロシージャ名 (引数名 データ型)
BEGIN
SELECT * FROM test WHERE id = 引数
END
ストアドプロシージャの内容確認
SHOW CREATE PROCEDURE プロシージャ名
ストアドプロシージャの実行
引数がある場合はプロシージャ名に引数を渡します。
CALL プロシージャ名()
ストアドプロシージャの削除
DROP PROCEDURE プロシージャ名
ストアドファンクションでは独自の関数を作成することができる機能です。
関数なので条件分岐などもすることができます。
ストアドファンクションの作成
CREATE FUNCTION ファンクション名 (引数名 データ型) RETURNS データ型
BEGIN
SQL文
RETURN 戻り値 または 式
END
変数の定義
DECLARE 変数名 データ型;
データを変数に代入
データ INTO 変数名
ストアドファンクションの内容確認
SHOW CREATE FUNCTION ファンクション名;
ストアドプロシージャの削除
DROP PROCEDURE プロシージャ名
合計を求めるストアドファンクションのサンプル
DELIMITER //
CREATE FUNCTION fu_sales_num() RETURNS INT
BEGIN
DECLARE s INT;
SELECT SUM(quantity) INTO s FROM sales;
RETURN s;
END
//
DELIMITER ;
SELECT fu_sales_num();
ストアドファンクションの複雑な処理例
DELIMITER //
CREATE PROCEDURE pr_update_goods(c CHAR(4), n SMALLINT)
BEGIN
DECLARE tc CHAR(4);
SELECT goods_code INTO tc FROM goods WHERE goods_code = c AND stocks >= n;
IF tc IS NULL THEN
SELECT "在庫がありません"
INSERT INTO order_goods(order_date, goods_code, quantity)
values(NOW(), c, 100);
ELSE
SELECT "在庫から引きます";
UPDATE goods SET stocks = stocks -n WHERE goods_code = c;
END IF
END
//
DELIMITER ;
CALL pr_update_goods("AAAA", 100);
トリガとは、テーブルのデータに対して更新処理(INSERT UPDATE DELETE)があった場合に自動的にデータ処理をする機能です。
トリガの作成
DELIMITER //
CREATE TRIGGER tr_update_stocking AFTER INSERT ON stocking FOR EACH ROW
BEGIN
UPDATE goods SET stocks = stocks + NEW.quantity
WHERE goods_code = NEW.goods_code;
END
//
トリガの確認
SHOW TRIGGERS
トリガの削除
DROP TRIGGER トリガ名;
トランザクション
トランザクションを設定し任意のタイミングでコミットや特定の段階まで処理を戻すことができます。
トリガの開始と終了
START TRANSACTION;
COMMIT;
ROLLBACK;
SAVEPOINT a;
ROLLBACK TO a;
オートコミットのオン・オフ
SET AUTOCOMMIT = 0; # オフ
SET AUTOCOMMIT = 0; # オン
SELECT @@AUTOCOMMIT; # オートコミットの確認