目次
1. ストアド関数の作成
2. ストアド関数の呼び出し
3トリガーの作成
4. トリガーでストアド プロシージャを呼び出す
ホームページ データベース mysql チュートリアル MySQL でストアドファンクションを作成し、トリガーを設定する方法

MySQL でストアドファンクションを作成し、トリガーを設定する方法

Jun 02, 2023 pm 10:43 PM
mysql

ストアド関数もストアド プロシージャと同様、プロシージャ オブジェクトの 1 つです。これらのコード スニペットには、アプリケーションおよび SQL から呼び出すことができる SQL および手続き型ステートメントが含まれています。ただし、いくつかの違いもあります:

1. ストレージ関数自体が出力パラメーターであるため、ストレージ関数には出力パラメーターがありません。

2. CALL ステートメントを使用してストアド関数を呼び出すことはできません。

3. ストアド関数には RETURN ステートメントが含まれている必要があり、この特殊な SQL ステートメントをストアド プロシージャ

1. ストアド関数の作成

CREATE FUNCTION ステートメントを使用してストアド関数を作成します

構文形式:

CREATE FUNCTION ストレージ関数名 ([パラメータ[,...]])
RETURNS タイプ
関数本体

注: ストアド関数にストアド プロシージャと同じ名前を付けることはできません。ストアド関数本体には RETURN value ステートメントが含まれている必要があり、値はストアド関数の戻り値です。

例: Book テーブル内の書籍の数を結果として返すストアド関数を作成します。

DELIMITER $$
CREATE FUNCTION num_book()
RETURNS INTEGER
BEGIN
RETURN(SELECT COUNT(*)FROM Book);
END$$
DELIMITER ;
ログイン後にコピー

RETURN 句に SELECT ステートメントが含まれる場合、SELECT ステートメントの戻り結果は次のとおりです。 1 行であり、値の列が 1 つだけあります。ストアド関数にパラメータが必要ない場合でも、それを呼び出すときに () を使用する必要があります (例: num_book())。

例: Sell テーブルには存在するが Book テーブルには存在しないレコードを削除するストアド関数を作成します。

DELIMITER $$
CREATE FUNCTION del_sell(book_bh CHAR(20))
RETURNS BOOLEAN
BEGIN
DECLARE bh CHAR(20);
SELECT 图书编号 INTO bh FROM Book WHERE 图书编号=book_bh;
IF bh IS NULL THEN
DELETE FROM Sell WHERE 图书编号=book_bh;
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
END$$
DELIMITER ;
ログイン後にコピー

ストアド関数は入力パラメータとして書籍番号を与え、最初に指定されたキーを押します。 book Book テーブル内でその書籍番号の書籍があるかどうかを検索します。書籍がない場合は false を返し、あれば true を返します。同時に、この書籍番号の書籍を Sell テーブルから削除する必要があります。データベース内のストアド プロシージャを一覧表示するには、SHOW FUNCTION STATUS コマンドを使用します。

2. ストアド関数の呼び出し

ストアド関数作成後のストアド関数の呼び出し方法は、システムが提供する組み込み関数を使用する場合と同じで、SELECT 関数を使用します。キーワード。

構文形式:

SELECT ストレージ関数名 ([パラメータ[,...]])

例: ストレージ関数publish_bookを作成します。ストレージ関数 author_book を呼び出して本の著者を取得し、著者の姓が「Zhang」であるかどうかを判断し、そうである場合は出版時刻を返し、そうでない場合は「unsatisfactory」を返します。

DELIMITER $$
CREATE FUNCTION publish_book(b_name CHAR(20))
RETURNS CHAR(20)
BEGIN
DECLARE name CHAR(20);
SELECT author_book(b_name)INTO name;
IF name like'张%' THEN
RETURN(SELECT 出版时间 FROM Book WHERE 书名=b_name);
ELSE
RETURN'不合要求';
END IF;
END$$
DELIMITER ;
ログイン後にコピー

ストアド関数publish_bookを呼び出して、結果を表示します:

SELECTpublish_book('Computer Network Technology');

ストアド関数を削除する方法処理方法は基本的に同じで、DROP FUNCTION ステートメントを使用します。

構文形式:

DROP FUNCTION [IF EXISTS] には関数名が格納されます

注: IF EXISTS 句は MySQL の拡張機能です。関数が存在しない場合、エラーの発生を防ぎます。

例: ストアド関数 a の削除

DROP FUNCTION IF EXISTS a;
ログイン後にコピー

3トリガーの作成

CREATE TRIGGER ステートメントの使用トリガーの作成

構文形式:

CREATE TRIGGER トリガー名 トリガー時間 トリガー イベント
ON テーブル名FOR EACH ROW トリガー アクション

トリガーには、BEFORE と AFTER という 2 つのトリガー オプションがあり、それぞれ、トリガーがアクティブ化されるステートメントの前または後にトリガーされることを示します。通常、AFTER オプションは、トリガーをアクティブにした後にステートメントを実行するために使用されます。 BEFORE オプションは、新しいデータが使用制限に準拠していることを確認するために使用されます。

SELECT ステートメントを含むトリガーはクライアントに結果を返します。この状況を回避するには、トリガー定義で SELECT ステートメントを使用しないようにしてください。同様に、クライアントにデータを返すストアド プロシージャを呼び出すことはできません。

例: 列 a が 1 つだけあるテーブル table1 を作成し、そのテーブルにトリガーを作成し、各挿入操作中にユーザー変数 str の値を TRIGGER IS WORKING に設定します。

CREATE TABLE table1(a INTEGER);
CREATE TRIGGER table1_insert AFTER INSERT
ON table1 FOR EACH ROW
SET@str='TRIGGER IS WORKING';
ログイン後にコピー

データベースにどのトリガーがあるかを確認するには、SHOW TRIGGERS コマンドを使用します。

MySQL トリガーの SQL ステートメントは、テーブル内の任意の列に関連付けることができます。ただし、列の名前を直接使用して列をマークすることはできず、システムが混乱することになります。これは、トリガーをアクティブにするステートメントで新しい列名が変更、削除、または追加されている可能性がある一方で、列の古い名前が最初に存在している可能性があるためです。同時。 NEW.column_name または OLD.column_name という構文を使用して識別する必要があります。 NEW.column_name は新しい行の列を参照するために使用され、OLD.column_name は更新または削除する前に既存の行の列を参照するために使用されます。

INSERT ステートメントの場合は NEW のみが有効であり、DELETE ステートメントの場合は OLD のみが有効です。 UPDATE ステートメントは NEW および OLD と同時に使用できます。

「Book」テーブル内の書籍の情報が削除されると、その書籍に関連する「Sell」テーブル内のデータもすべて削除されるようにトリガーを作成します。

DELIMITER $$
CREATE TRIGGER book_del AFTER DELETE
ON Book FOR EACH ROW
BEGIN
DELETE FROM Sell WHERE 图书编号=OLD.图书编号;
END$$
DELIMITER ;
ログイン後にコピー

トリガーがテーブル自体の更新操作をトリガーしたい場合、使用できるのは BEFORE トリガーのみであり、AFTER トリガーは許可されません。

4. トリガーでストアド プロシージャを呼び出す

例: ブックストア データベースに、Members テーブルと同じ構造を持つテーブル member_b があるとします。トリガーを作成し、そこにデータを追加します。 Members テーブル。 の場合、ストアド プロシージャを呼び出して、member_b テーブルのデータを Members テーブルと同期します。

1. ストアド プロシージャを定義します: Members テーブルと同じ構造を持つテーブル member_b を作成します

DELIMITER $$
CREATE PROCEDURE data_copy()
BEGIN
REPLACE member_b SELECT * FROM Members;
END$$
ログイン後にコピー

2. トリガーを作成します: ストアド プロシージャ data_copy()

DELIMITER $$
CREATE TRIGGER members_ins AFTER INSERT
ON Members FOR EACH ROW
CALL data_copy();
DELIMITER ;
ログイン後にコピー
# を呼び出します##5 、トリガーの削除

構文形式:

DROP TRIGGER トリガー名

例: トリガーの削除 members_ins

DROP TRIGGER members_ins;
ログイン後にコピー

以上がMySQL でストアドファンクションを作成し、トリガーを設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

Navicatプレミアムの作成方法 Navicatプレミアムの作成方法 Apr 09, 2025 am 07:09 AM

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

NavicatでMySQLへの新しい接続を作成する方法 NavicatでMySQLへの新しい接続を作成する方法 Apr 09, 2025 am 07:21 AM

手順に従って、NAVICATで新しいMySQL接続を作成できます。アプリケーションを開き、新しい接続(CTRL N)を選択します。接続タイプとして「mysql」を選択します。ホスト名/IPアドレス、ポート、ユーザー名、およびパスワードを入力します。 (オプション)Advanced Optionsを構成します。接続を保存して、接続名を入力します。

MySQLおよびSQL:開発者にとって不可欠なスキル MySQLおよびSQL:開発者にとって不可欠なスキル Apr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

SQLが行を削除した後にデータを回復する方法 SQLが行を削除した後にデータを回復する方法 Apr 09, 2025 pm 12:21 PM

データベースから直接削除された行を直接回復することは、バックアップまたはトランザクションロールバックメカニズムがない限り、通常不可能です。キーポイント:トランザクションロールバック:トランザクションがデータの回復にコミットする前にロールバックを実行します。バックアップ:データベースの定期的なバックアップを使用して、データをすばやく復元できます。データベーススナップショット:データベースの読み取り専用コピーを作成し、データが誤って削除された後にデータを復元できます。削除ステートメントを使用して注意してください:誤って削除されないように条件を慎重に確認してください。 WHERE句を使用します:削除するデータを明示的に指定します。テスト環境を使用:削除操作を実行する前にテストします。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

See all articles