MySQL-SQLストアドファンクションとトリガーの詳細な説明

♥️作者: Xiao Liu at Station C

♥️個人ホームページ:  Xiao Liu のホームページ 

♥️努力は必ずしも報われるとは限りませんが、必ず得るものはあります。より良い人生を目指して一緒に頑張りましょう!

♥️ 2 年間で要約された運用とメンテナンスの経験と、Cisco シミュレータのネットワーク実験チュートリアルの完全なセットを学びます。コラム:クラウドコンピューティング技術

♥️Xiao Liu のプライベート メッセージは気軽に尋ねることができます。知っている限り、ケチることはありません。あなたと私に会わせてくれて CSDN に感謝します!

目次

MySQL

SQL

ストアド関数

1 はじめに

2).ケース

 引き金

導入

 文法

1).作成

2). 表示

3). 削除

ケース

A. データトリガーの挿入

テスト:

B. データトリガーの変更

テスト:

C. データ削除トリガー

テスト:


MySQL

MySQL は、スウェーデンの会社 MySQL AB によって開発されたリレーショナル データベース管理システムであり、Oracle の製品です。MySQL は最も人気のあるリレーショナル データベース管理システムの 1 つであり、WEB アプリケーションの観点から見ると、MySQL は最高の RDBMS (Relational Database Management System、リレーショナル データベース管理システム) アプリケーション ソフトウェアの 1 つです。MySQL はリレーショナル データベース管理システムです。リレーショナル データベースは、すべてのデータを 1 つの大きなウェアハウスに置くのではなく、異なるテーブルにデータを保存するため、速度が向上し、柔軟性が向上します。MySQL で使用される SQL 言語は、データベースにアクセスするために最も一般的に使用される標準化された言語です。MySQL ソフトウェアは、コミュニティ エディションと商用エディションに分かれる二重認証ポリシーを採用しており、その小型、高速、総所有コストの低さ、特にオープン ソース機能により、MySQL は一般に、開発用の Web サイトとして選択されます。小規模、中規模、大規模の Web サイト、データベース。

SQL

SQL と呼ばれる構造化クエリ言語 (Structured Query Language) は、専用のプログラミング言語であり、データにアクセスし、リレーショナル データベース システムのクエリ、更新、管理を行うためのデータベース クエリおよびプログラミング言語です。構造化クエリ言語は、ユーザーが高レベルのデータ構造を操作できるようにする高レベルの非手続き型プログラミング言語です。ユーザーがデータ保存方法を指定する必要も、特定のデータ保存方法を理解する必要もありません。そのため、基盤となる構造が完全に異なる異なるデータベース システムでも、同じ構造化クエリ言語をデータ入力およびインターフェースとして使用できます。管理。構造化クエリ言語ステートメントはネストできるため、非常に柔軟で強力になります。

ストアド関数

1).はじめに

ストアド関数は戻り値を持つストアド プロシージャであり、ストアド関数のパラメータは IN 型のみにすることができます。具体的な構文は次のとおりです。
CREATE FUNCTION 存储函数名称 ([ 参数列表 ])
RETURNS type [characteristic ...]
BEGIN
-- SQL语句
RETURN ...;
END ; 
特性の 説明
DETERMINISTIC : 同じ入力引数は常に同じ結果を生成します
NO SQL : SQLステートメントが 含まれません
READS SQL DATA : データを読み取るステートメントは含まれますが、データを書き込むステートメントは含まれません。

2).ケース

1から nまでの 累積値 を計算します。ここで、 nは渡されたパラメーターの値です。
create function fun1(n int)
returns int deterministic
begin
declare total int default 0;
while n>0 do
set total := total + n;
set n := n - 1;
end while;
return total;
end;
select fun1(50);
mysql8.0バージョン では binlog が デフォルトで有効になっています。有効にすると、 mysql は ストアド プロシージャを定義するときに、次のように指定する必要があります。
特徴的な 機能がなければ、次のエラーが報告されます。

 引き金

導入

トリガーはテーブルに関連するデータベース オブジェクトであり、 insert /update/delete の前 (BEFORE) または後 (AFTER)のトリガーを指します。
トリガーで定義された一連の SQLステートメント を同時に実行します。 トリガーのこの機能は、アプリケーションが データベース側でデータの整合性、 ログ記録 、データ検証、その他の操作を保証するのに役立ちます。
別名 OLD および NEWを使用して 、トリガーで変更されたレコードの内容を参照します。これは、他のデータベースと同様です。現在、トリガーは行レベルのトリガーのみをサポートしており、ステートメントレベルのトリガーはサポートしていません。

 文法

1).作成

CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT/UPDATE/DELETE
ON tbl_name FOR EACH ROW -- 行级触发器
BEGIN
trigger_stmt ;
END; 

2) .ビュー

SHOW TRIGGERS ;

3).削除

DROP TRIGGER [schema_name.]trigger_name ; -- 如果没有指定 schema_name,默认为当前数
据库 。

ケース

トリガーを通じて tb_userテーブルのデータ変更ログ を記録し、増加分を含む 変更ログをログ テーブル user_logsに挿入します
変更 削除
テーブル構造の準備 :
-- 准备工作 : 日志表 user_logs

create table user_logs(

id int(11) not null auto_increment,

operation varchar(20) not null comment '操作类型, insert/update/delete',

operate_time datetime not null comment '操作时间',

operate_id int(11) not null comment '操作的ID',

operate_params varchar(500) comment '操作参数',

primary key(`id`)

)engine=innodb default charset=utf8;

A.データトリガーの挿入

create trigger tb_user_insert_trigger

after insert on tb_user for each row

begin
insert into user_logs(id, operation, operate_time, operate_id, operate_params)

VALUES

(null, 'insert', now(), new.id, concat('插入的数据内容为:

id=',new.id,',name=',new.name, ', phone=', NEW.phone, ', email=', NEW.email, ',

profession=', NEW.profession));

end;

テスト:

-- 查看

show triggers ;

-- 插入数据到tb_user

insert into tb_user(id, name, phone, email, profession, age, gender, status,

createtime) VALUES (26,'三皇子','18809091212','[email protected]','软件工

程',23,'1','1',now());
テスト完了後、ログテーブルのデータが正常に挿入できるか、挿入されたデータが正しいか確認してください。

B.データトリガーの変更

create trigger tb_user_update_trigger

after update on tb_user for each row

begin

insert into user_logs(id, operation, operate_time, operate_id, operate_params)

VALUES

(null, 'update', now(), new.id,

concat('更新之前的数据: id=',old.id,',name=',old.name, ', phone=',

old.phone, ', email=', old.email, ', profession=', old.profession,

' | 更新之后的数据: id=',new.id,',name=',new.name, ', phone=',

NEW.phone, ', email=', NEW.email, ', profession=', NEW.profession));

end;

テスト:

-- 查看
show triggers ;
-- 更新
update tb_user set profession = '会计' where id = 23;
update tb_user set profession = '会计' where id <= 5;
テスト完了後、ログテーブルのデータが正常に挿入できるか、挿入されたデータが正しいか確認してください。

C.データ削除トリガー

create trigger tb_user_delete_trigger

after delete on tb_user for each row

begin

insert into user_logs(id, operation, operate_time, operate_id, operate_params)

VALUES

(null, 'delete', now(), old.id,

concat('删除之前的数据: id=',old.id,',name=',old.name, ', phone=',

old.phone, ', email=', old.email, ', profession=', old.profession));

end;

テスト:

-- 查看
show triggers ;
-- 删除数据
delete from tb_user where id = 26; 
テスト完了後、ログテーブルのデータが正常に挿入できるか、挿入されたデータが正しいか確認してください。

♥️以下が私の創作の原動力です

♥️いいね、それが私にとって最大の評価です

♥️Xiaoliu です。どの記事もうまく書くよう励まされています、皆さんありがとうございます

おすすめ

転載: blog.csdn.net/lzl10211345/article/details/131357296