ホームページ データベース SQL よく使用される SQL トリガーのステートメント (概要)

よく使用される SQL トリガーのステートメント (概要)

Nov 23, 2019 pm 05:25 PM
sql 引き金

この記事は、一般的に使用される SQL トリガー ステートメントをすべての人に向けてまとめたものです。一定の参考値があります。必要な友人は参照できます。すべての人に役立つことを願っています。

よく使用される SQL トリガーのステートメント (概要)

1. 単純なトリガーを作成します

CREATE TRIGGER 触发器名称
ON 表名
FOR INSERT、UPDATE 或 DELETE
AS
    T-SQL 语句
ログイン後にコピー

注: トリガー名は引用符で囲まれません。

#2. トリガーの削除

drop trigger 触发器名称
ログイン後にコピー

複数のトリガーの削除:

drop trigger 触发器名称,触发器名称
ログイン後にコピー

3. トリガーの名前変更

クエリ アナライザーによる名前の変更

exec sp_rename 原名称, 新名称
ログイン後にコピー

sp_rename は SQL Server に付属するストアド プロシージャで、現在のデータベース内でユーザーが作成したオブジェクト (テーブル名、リスト、インデックス名など) の名前を変更するために使用されます。 . .

4. INSERT、UPDATE または DELETE

INSTEAD OF

トリガー ステートメントを実行しますが、トリガーをトリガーする SQL ステートメントは実行しません。レコードが削除されると、トリガーで指定されたステートメントが実行され、この時点では削除ステートメントは実行されなくなります。例:

create trigger f
on tbl
instead of delete
as
    insert into Logs...
ログイン後にコピー

IF UPDATE(列名)

列が更新されたかどうかを確認します。挿入または更新には使用されますが、削除には使用できません。例:

create trigger f
on tbl
for update
as
    if update(status) or update(title)
        sql_statement --更新了 status 或 title 列
ログイン後にコピー

inserted、deleted

これらは 2 つの仮想テーブルです。insert は挿入または更新後に影響を受けるレコードによって形成されたテーブルを保存し、deleted は削除または更新前に形成されたテーブルを保存します。影響を受けるレコードによって形成されるテーブル。例:

create trigger tbl_delete
on tbl
for delete
as
    declare @title varchar(200)
    select @title=title from deleted
    insert into Logs(logContent) values('删除了 title 为:' + title + '的记录')
ログイン後にコピー

説明: フィールドタイプがテキストまたはイメージのフィールド値を、挿入または削除された仮想テーブルから取得した場合、取得された値は null になります。

#5. データベース内のすべてのトリガーを表示します

use 数据库名
go
select * from sysobjects where xtype='TR'
sysobjects 保存着数据库的对象,其中 xtype 为 TR 的记录即为触发器对象。在 name 一列,我们可以看到触发器名称。
ログイン後にコピー

6. sp_helptext トリガーの内容を表示します

use 数据库名
go
exec sp_helptext '触发器名称'
ログイン後にコピー

7 。sp_helptrigger は、トリガーの属性を表示するために使用されます。


sp_helptrigger には 2 つのパラメーターがあります。最初のパラメーターはテーブル名で、2 番目のパラメーターはトリガーのタイプ (char(6) です) ) Type (INSERT、UPDATE、DELETE のいずれか)。省略すると、指定したテーブル内のすべてのタイプのトリガーのプロパティが表示されます。

例:

use 数据库名
go
exec sp_helptrigger tbl
ログイン後にコピー

8. 再帰、ネストされたトリガー


再帰には、間接再帰と直接再帰の 2 種類があります。例で説明すると、それぞれ T1 と T2 という名前のテーブル 1 とテーブル 2 があり、T1 と T2 にそれぞれフリップフロップ G1 と G2 があるとします。

間接再帰: T1 で操作して G1 をトリガー、G1 で T2 で操作して G2 をトリガー、G2 で T1 で操作して G1 を再度トリガーします...

直接再帰: T1 で操作して、トリガー G1 , G1 は T1 を操作して G1 を再度トリガーします...

ネストされたトリガー

は間接再帰と似ています。間接再帰はループを形成する必要がありますが、ネストされたトリガーは必ずしも形成する必要はありませんこのようにして、リングを T1->T2->T3... と連続的にトリガーでき、最大 32 レベルのネストが可能です。

直接再帰の設定

デフォルトでは、直接再帰は禁止されています。許可するように設定するには 2 つの方法があります:

T-SQL: exec sp_dboption 'dbName', '再帰トリガー'、true

EM: データベースを右クリックし、[プロパティ] > [オプション] をクリックします。

間接再帰とネストを設定する

デフォルトでは、間接再帰とネストが許可されています。これを無効にする方法は 2 つあります:

T-SQL: exec sp_configure 'ネストされたトリガー', 0 -- 2 番目のパラメータは 1 で、許可されていることを意味します。

EM: [登録] -> [プロパティ] -> [サーバー設定] を右クリックします。

9. ロールバックのトリガー

多くの登録システムでは登録後にユーザー名を変更できないことがわかりましたが、これは主にアプリケーションによって決定されます。データベース テーブルを変更する場合、そのユーザー名も変更できます。トリガーでロールバックを使用すると、ユーザー名が変更できないことをうまく認識できます。

use 数据库名
go
create trigger tr
on 表名
for update
as
    if update(userName)
        rollback tran
ログイン後にコピー

重要なのは最後の 2 つの文にあり、次のように説明されています。 userName 列が更新された場合は、トランザクションをロールバックします。

10. トリガーの無効化と有効化

Disable: alter table テーブル名 disable trigger トリガー名

Enable: alter table テーブル名 Enable Trigger トリガー名

複数のトリガーがある場合は、トリガー名をカンマで区切ります。

「トリガー名」を「ALL」に置き換えると、テーブルのすべてのトリガーを無効または有効にすることを意味します。

11. 挿入、変更、削除を決定する

create TRIGGER [updatetest] ON [dbo].[TEST] 
FOR INSERT, UPDATE, DELETE 
AS
begin
    DECLARE
    @IsInsert bit,
    @IsUpdate bit,
    @IsDelete bit
    IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)
        SET @IsInsert = 1
    ELSE
        SET @IsInsert = 0
     
    IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
        SET @IsUpdate = 1
    ELSE
        SET @IsUpdate = 0
     
    IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
        SET @IsDelete = 1
    ELSE
        SET @IsDelete = 0 
     
    if (@IsUpdate=1)
       PRINT 'updated '
     if (@IsInsert=1)
       PRINT 'insert '
     if (@IsDelete=1)
       PRINT 'delete 'end
ログイン後にコピー
推奨学習: MySQL チュートリアル

以上がよく使用される SQL トリガーのステートメント (概要)の詳細内容です。詳細については、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)

Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Apr 17, 2024 pm 02:57 PM

HQL と SQL は Hibernate フレームワークで比較されます。HQL (1. オブジェクト指向構文、2. データベースに依存しないクエリ、3. タイプ セーフティ)、SQL はデータベースを直接操作します (1. データベースに依存しない標準、2. 複雑な実行可能ファイル)。クエリとデータ操作)。

Oracle SQLでの除算演算の使用法 Oracle SQLでの除算演算の使用法 Mar 10, 2024 pm 03:06 PM

「OracleSQLでの除算演算の使用方法」 OracleSQLでは、除算演算は一般的な数学演算の1つです。データのクエリと処理中に、除算演算はフィールド間の比率を計算したり、特定の値間の論理関係を導出したりするのに役立ちます。この記事では、OracleSQL での除算演算の使用法を紹介し、具体的なコード例を示します。 1. OracleSQL における除算演算の 2 つの方法 OracleSQL では、除算演算を 2 つの異なる方法で実行できます。

Oracle と DB2 の SQL 構文の比較と相違点 Oracle と DB2 の SQL 構文の比較と相違点 Mar 11, 2024 pm 12:09 PM

Oracle と DB2 は一般的に使用される 2 つのリレーショナル データベース管理システムであり、それぞれに独自の SQL 構文と特性があります。この記事では、Oracle と DB2 の SQL 構文を比較し、相違点を示し、具体的なコード例を示します。データベース接続 Oracle では、次のステートメントを使用してデータベースに接続します: CONNECTusername/password@database DB2 では、データベースに接続するステートメントは次のとおりです: CONNECTTOdataba

SQL の ID 属性は何を意味しますか? SQL の ID 属性は何を意味しますか? Feb 19, 2024 am 11:24 AM

SQL における Identity とは何ですか? 具体的なコード例が必要です。SQL では、Identity は自動インクリメント数値の生成に使用される特別なデータ型です。多くの場合、テーブル内のデータの各行を一意に識別するために使用されます。 Identity 列は、各レコードが一意の識別子を持つようにするために、主キー列と組み合わせてよく使用されます。この記事では、Identity の使用方法といくつかの実用的なコード例について詳しく説明します。 Identity の基本的な使用方法は、テーブルを作成するときに Identity を使用することです。

MyBatis動的SQLタグのSetタグ機能の詳細説明 MyBatis動的SQLタグのSetタグ機能の詳細説明 Feb 26, 2024 pm 07:48 PM

MyBatis 動的 SQL タグの解釈: Set タグの使用法の詳細な説明 MyBatis は、豊富な動的 SQL タグを提供し、データベース操作ステートメントを柔軟に構築できる優れた永続層フレームワークです。このうち、Set タグは、UPDATE ステートメントで SET 句を生成するために使用され、更新操作でよく使用されます。この記事では、MyBatis での Set タグの使用法を詳細に説明し、特定のコード例を通じてその機能を示します。 SetタグとはMyBatiで使用するSetタグです。

SQL の 5120 エラーを解決する方法 SQL の 5120 エラーを解決する方法 Mar 06, 2024 pm 04:33 PM

解決策: 1. ログインしているユーザーがデータベースにアクセスまたは操作するための十分な権限を持っているかどうかを確認し、ユーザーが正しい権限を持っているかどうかを確認します; 2. SQL Server サービスのアカウントに指定されたファイルまたはデータベースにアクセスする権限があるかどうかを確認します。 3. 指定されたデータベース ファイルが他のプロセスによって開かれているかロックされているかどうかを確認し、ファイルを閉じるか解放して、クエリを再実行します。管理者として試してください。Management Studio をなどとして実行します。

MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか? MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか? Dec 17, 2023 am 08:41 AM

MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか?データの集計と統計は、データ分析と統計を実行する際の非常に重要な手順です。 MySQL は強力なリレーショナル データベース管理システムとして、データの集約と統計操作を簡単に実行できる豊富な集約機能と統計機能を提供します。この記事では、SQL ステートメントを使用して MySQL でデータの集計と統計を実行する方法を紹介し、具体的なコード例を示します。 1. カウントには COUNT 関数を使用します。COUNT 関数は最も一般的に使用されます。

データベース技術コンテスト: Oracle と SQL の違いは何ですか? データベース技術コンテスト: Oracle と SQL の違いは何ですか? Mar 09, 2024 am 08:30 AM

データベース技術コンテスト: Oracle と SQL の違いは何ですか?データベース分野では、Oracle と SQL Server の 2 つは非常に評判の高いリレーショナル データベース管理システムです。どちらもリレーショナル データベースのカテゴリに属しますが、両者の間には多くの違いがあります。この記事では、Oracle と SQL Server の違い、実際のアプリケーションにおけるそれらの機能と利点について詳しく説明します。まず、Oracle と SQL Server の間には構文に違いがあります。

See all articles