Mysql ビュー、ストアド プロシージャ、トリガー、関数、Mysql アーキテクチャ

1、ビュー

ビューはクエリに基づく仮想テーブル、つまり sql ステートメントがカプセル化されており、使用時にビューを直接呼び出すことができます.select ステートメントによってクエリされたテーブルはベーステーブルと呼ばれ、その結果セットはクエリは仮想テーブルと呼ばれ、基本的なテーブル データが生成され、変更があればビューも変更され、ビューはクエリ ステートメントを簡略化するために使用されます。

1.CREATE VIEW view_admin AS  SELECT * FROM  admin;  //创建视图
2.    
3. SELECT * FROM  view_admin  //使用视图
4.   
5. DROP VIEW view_admin  //删除视图

2. ストアド プロシージャ

1. 概要:ユーザーの複雑な要件に応じて、いくつかの論理的なビジネス SQL ステートメント セットをデータベースに格納し、この一連の SQL ステートメントを jdbc で呼び出すことができます.データベースにステートメントを書き込むこのプロセスは、ストレージ プロセスと呼ばれます.

ストアド プロシージャを呼び出すと、開発者の作業が簡素化され、データベースとアプリケーション間の転送が減少し、データ処理の効率が向上します。

2. 構文:最初にストアド プロシージャを作成する必要があり (ビジネス ロジックを含む)、パラメーターを渡すことができます。パラメーターには次の 3 種類があります。

in (入力パラメータ。その値は呼び出し側プログラムで指定する必要があります)

out (出力パラメータ。パラメータの値はストアド プロシージャによって計算され、アプリケーションに返されます)

inout (出力と入力の両方)

declare : 変数の宣言に使用

以下は、パラメーターのないストアド プロシージャです。

1.DELIMITER $$  
2. CREATE PROCEDURE `newsdb`.`a`()  //newsdb为数据库名   a为定义的存储过程名
3.    BEGIN  
4.     DECLARE var_num INT DEFAULT  0;  //声明一个变量,默认为0
5.          SET var_num = 10;  
6.          SELECT var_num;  
7.    END$$  
8.DELIMITER;  

以下は、パラメーターを持つストアド プロシージャです。

DELIMITER$$
CREATE PROCEDURE findUserCount(IN p_type INT,OUT p_count INT)
BEGIN
-- into 把 sql 中查询的结果赋给 变量
SELECT COUNT(*) INTO p_count FROM USER WHERE TYPE = p_type;
SELECT p_count;
END$$
测试
CALL findUserCount(1,@p_count); -- @p_count 测试输出参数

以下は、フロー制御ステートメントです。

DELIMITER$$
CREATE PROCEDURE test(IN p_day INT)
BEGIN
IF p_day=0 THEN
SELECT "星期天";
ELSEIF p_day=1 THEN
SELECT "星期一";
ELSEIF p_day=2 THEN
SELECT "星期二";
ELSE
SELECT "无效日期";
END IF;
END$$
测试
CALL test(2)

以下は、フロー制御ステートメントの場合です。

DELIMITER$$
CREATE PROCEDURE test(IN p_day INT)
BEGIN
CASE WHEN p_day = 0 THEN
SELECT "星期天";
ELSE
SELECT "星期一";
END CASE;
END$$
CALL test(2);

3.機能

関数のパラメータ リストは次のとおりです: パラメータ名、パラメータ タイプ

関数本体には return ステートメントが必要です。そうしないと、エラーが報告されます。

セットアップ関数にはパラメーターを指定できません

SET GLOBAL log_bin_trust_function_creators=TRUE;

次の関数は引数を取りません。

#无参的函数
DELIMITER$$
CREATE FUNCTION test() RETURNS INT
BEGIN
DECLARE v_num INT DEFAULT 0;
SELECT COUNT(*) INTO v_num FROM admin;
RETURN v_num;
END$$
#测试
SELECT test(); 

以下は、パラメーターを持つ関数です。

#有参的函数
DELIMITER$$
CREATE FUNCTION findnews(p_id INT) RETURNS VARCHAR(20)
BEGIN
DECLARE v_account VARCHAR(20) DEFAULT '';
SELECT account INTO v_account FROM admin WHERE id=p_id;
RETURN v_account;
END$$
#测试
SELECT m.*,findnews(2) FROM newsmessage m

4.トリガー

トリガーは、ユーザーが呼び出す必要のない特別なストアド プロシージャですが、テーブルの追加、削除、または変更の前または後に実行されるストアド プロシージャです。

トリガーは自動的に実行され、取り消しできません。ストアド プロシージャとは異なり、トリガーは直接呼び出すことができず、パラメーターの受け渡しもできません。

トリガーとそれをアクティブにするステートメントは、トリガー内のどこからでもロールバックできる単一のトランザクションとして扱われます。

#触发器
#删除案例,在删除管理员之前删除管理员与角色关联表
DELETE FROM admin WHERE id=4

DELIMITER $$
CREATE TRIGGER delete_admin_role BEFORE DELETE
ON admin
FOR EACH ROW
BEGIN
DELETE FROM admin_role WHERE adminid = old.id;//  old表示原来的数据
END$$;
#新增管理员之前想一个表增加一条信息
DELIMITER $$
CREATE TRIGGER saveadmin AFTER INSERT
ON admin
FOR EACH ROW
BEGIN
INSERT INTO LOGS(account,PASSWORD,oper_time)VALUES(new.account,new.password,NOW());
END$$;   //new表示新增加的数据

INSERT INTO admin(account,PASSWORD)VALUES('jim',111)

5.Mysql アーキテクチャ

1. 接続層:最上位層は、いくつかのクライアントと接続サービスであり、ローカル sock 通信と、クライアント/サーバー ツールに基づく tcp/ip に類似したほとんどの通信を含みます。主に、いくつかの同様の接続処理、承認認証、および関連するセキュリティ ソリューションを完了します。つまり、検証可能なクライアントの接続要求を担当します (アカウントのパスワードを検証します)。

2. サービス層:第 2 層アーキテクチャは、主に SQL インターフェースなどのコア サービス機能のほとんどを完了し、キャッシュされたクエリ、SQL 分析と最適化、およびいくつかの組み込み関数の実行を完了します。プロシージャーや関数など、すべてのストレージ間エンジン機能もこの層で実装されます。この層で、サーバーはクエリを解析し、対応する内部解析ツリーを作成し、それに応じて最適化します。たとえば、クエリ テーブルの順序やインデックスを使用するかどうかなどを決定し、最後に対応する実行操作を生成します。select ステートメントの場合、サーバーは内部キャッシュにもクエリを実行します。キャッシュスペースが十分に大きい場合、多数の読み取り操作を解決する環境でシステムのパフォーマンスを大幅に向上させることができます。それは、SQL、言語分析、最適化、キャッシングを受け取ることです。

3. エンジン レイヤー:ストレージ エンジン レイヤー。ストレージ エンジンは、MysQL でのデータの保存と抽出を実際に担当し、サーバーは API を介してストレージ エンジンと通信します。ストレージエンジンが異なれば機能も異なるため、実際のニーズに応じて選択できます。つまり、実際の実装の具体的な方法であり、異なるストレージ エンジンには異なる特性があります。

4. 物理ファイル ストレージ レイヤー:データ ストレージ レイヤーは、主にベア デバイスで実行されているファイル システムにデータを格納し、ストレージ エンジンとのやり取りを完了します。

6.Mysql ストレージ エンジン

概要: MySQL のデータは、さまざまなテクノロジを使用してファイルに格納されます。これらのテクノロジはそれぞれ、異なるストレージ メカニズム、インデックス作成手法、ロック レベルを使用しており、最終的にはさまざまな機能と能力を提供します。別のテクノロジを選択すると、速度や機能が向上し、アプリケーションの全体的な機能が向上します。これらのさまざまなテクノロジーとそれらをサポートする関連機能は、MySQL ではストレージ エンジン (テーブル タイプとも呼ばれます) と呼ばれます。MySQL には、デフォルトで構成された多数の異なるストレージ エンジンが付属しており、MySQL サーバー内で事前構成または有効化することができます。サーバー、データベース、およびテーブル用のストレージ エンジンを選択して、情報の保存方法、取得方法、およびデータに必要なパフォーマンスと機能を最大限に柔軟に選択できます。データベース エンジンは、データの保存、処理、および保護に使用されるコア サービスです。データベース エンジンを利用して、アクセス権を制御し、トランザクションを迅速に処理します。これは、企業内で大量のデータを処理する必要があるほとんどのアプリケーションの要件を満たします。

ストレージ エンジンの種類: 1. MyIsam 、2. InnoDB、3. メモリ、4. Blackhole、5. CSV、6.

Performance_Schema、7.アーカイブ、8.フェデレーテッド、9 Mrg_Myisam

一般的に使用されるものは次の 2 つです。

1.InnoDB

Innodb はデフォルトのトランザクション ストレージ エンジンであり、行レベルのロックと外部キーの制約があり、全文検索 (フルテキスト インデックス作成) をサポートしています. その設計目標は、大容量のデータベース システムを処理することです. MySQL が実行されている場合、Innodbメモリ内にバッファ プールを構築します。データとインデックスのバッファリングに使用されます。主キーの自動インクリメントをサポートします。テーブル内の行の総数は格納しません。

2.ミーサム

MyISAM は MySQL のエンジンでもありますが、データベース トランザクションをサポートしておらず、行レベルのロックと外部キーもサポートしていません。テーブル全体、および効率が低下します. 低い; 全文検索をサポートします; テーブル内の行の総数を格納します. 主に、追加と削除が少なく、クエリが多いシナリオで使用されます

おすすめ

転載: blog.csdn.net/weixin_71243923/article/details/129229461