ホームページ > データベース > mysql チュートリアル > MySQL で関数とトリガーをカスタマイズする方法

MySQL で関数とトリガーをカスタマイズする方法

王林
リリース: 2023-06-01 12:13:31
転載
1527 人が閲覧しました

1. ストアド関数 (カスタム関数)

  • カスタム関数は MySQL を拡張する方法であり、使い方は組み込み関数と同じです。

  • 関数を定義するために必要な 2 つの条件: パラメータと戻り値。関数は任意の型の値を返すことができ、これらの型のパラメータを受け取ることもできます。

関数本体について:

  • 関数本体は、正当な SQL ステートメントで構成されます。

  • 関数本体には、単純な SELECT ステートメントまたは INSERT ステートメントを使用できます。

  • 関数本体が構造に準拠している場合は、BEGIN....AND ステートメントでラップされます。

  • 複合構造には、宣言、ループ、制御構造などを含めることができます。

重要: カスタム関数に同じ名前を付けることはできません。グローバル変数を定義するのと同様、変数名に一貫性を持たせることはできません。

1.1 ストアド関数の定義

構文形式:

create function 函数名(参数列表)
returns type(返回值类型)
begin
    --SQL语句
end;
ログイン後にコピー

要件: ストアド プロシージャの関数を定義する, 条件を満たすレコードの総数を取得します

実装:

delimiter $
create function fun(countryId int)
returns int 
begin
    # 定义一个存储总数据条数的变量
    declare cum int default 0;
    # 查询等于传递参数的全部的数据数,然后将其赋值给定义的变量
    select count(*) into cum from city where country_id = countryId;
    # 返回结果值。存储函数必须有返回值
    return cum;
end $

delimiter ;
ログイン後にコピー

1.2 storage関数を呼び出します

構文形式:

select 函数名(参数列表);
ログイン後にコピー

注: call キーワードはストアド プロシージャを呼び出すときに使用されますが、MySQL の通常の集計関数を呼び出すのと同じように、ストアド関数を呼び出すときに select を直接使用できます。

select fun(1);
# 这里和存储过程一样,调用的时候需要加小括号和参数,但是在删除的时候指定函数名即可
ログイン後にコピー

1.3 ストアド関数の削除

構文形式

drop [if exists] function fun;
ログイン後にコピー

2. トリガー

2.1 トリガーの概要

  • トリガーはテーブルに関連するデータベース オブジェクトであり、insert/update/delete の前後にトリガーで定義された SQL セットをトリガーして実行することを指します。トリガーのこの機能は、アプリケーションがデータベース側でデータの整合性、ログ記録、およびデータ検証を保証するのに役立ちます。

  • トリガーは、追加、削除、または変更する場合にのみ使用でき、クエリを実行する場合には使用できません。

  • トリガーでは、他のデータベースと同様に、OLD および NEW エイリアスを使用してレコードの変更された部分を参照します。 MySQL トリガーは行レベルのトリガーのみをサポートし、ステートメント レベルのトリガーはサポートしません。 Oracle は、行レベルとステートメントレベルの両方のトリガーをサポートしています。

  • 2 つの変数 OLD と NEW は、行レコード変数とも呼ばれます。

    これら 2 つの変数を使用して、操作対象のデータ テーブルのデータを取得できます。

MySQL で関数とトリガーをカスタマイズする方法2.2 トリガーの作成

# 構文形式:

create trigger(触发器) trigger_name(触发器名称)
before/after insert/update/delete
on tab_name(表名)
[for each row](行级触发器)
begin
    trigger_stmt;(触发器的逻辑)
end;
ログイン後にコピー

要件: 追加、変更、削除を含む、トリガーによる emp テーブルのデータ変更ログ emp_logs を記録します。

実装:

分析:

トリガーは 1 種類のデータ操作のみを実行でき、追加、変更、削除の操作を同時に完了することはできません。したがって、このログ記録タスクを完了するには、この時点で複数のトリガーを定義する必要があります。

MySQL は行レベルの操作のトリガーであるため、新しいものと古いものにはデータの行全体が保存されます。

挿入を実行するトリガーを作成します:

MySQL で関数とトリガーをカスタマイズする方法

  • 挿入モードでは、キーワード new を使用して、挿入するデータを取得します。

  • #after が使用され、テーブル emp の追加後にこのトリガーが実行されてログが記録されます。完成されました。
  • このトリガーがいつ実行されるかは、次の 2 つの点に依存します。
  • 必ず動作する必要があります。 emp テーブル。on の後に宣言されたテーブルです。
    • #挿入操作を実行する必要があります。

    • 更新を実行するトリガーを作成します:

この時点では、古い変数 変更前のデータは新しい変数に格納され、変更後のデータは新しい変数に格納されます。MySQL で関数とトリガーをカスタマイズする方法

削除を実行するトリガーの作成:

現時点で古い変数に保存されている削除対象のデータMySQL で関数とトリガーをカスタマイズする方法

テスト: テストは、次の emp テーブルである必要があります。上記の定義されたトリガーがトリガーされるように操作を実行します。

#2.3 トリガーの削除

MySQL で関数とトリガーをカスタマイズする方法構文構造:

drop trigger [schema_name.](数据库名)trigger_name(触发器名);
ログイン後にコピー

指定しない場合 schema_name (データベース名)、デフォルトは現在のデータベースです。

2.4 トリガーの表示

show Triggers コマンドを実行すると、トリガーのステータス、構文、その他の情報を表示できます。

文法構造:

show triggers;
ログイン後にコピー

以上がMySQL で関数とトリガーをカスタマイズする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート