ホームページ >バックエンド開発 >PHPチュートリアル >MySQLトリガーを使用したアクションオートメーション

MySQLトリガーを使用したアクションオートメーション

William Shakespeare
William Shakespeareオリジナル
2025-02-25 17:52:09180ブラウズ

Action Automation with MySQL Triggers

コアポイント

  • MySQLトリガーは、データベースクエリ、ファイル操作、データ処理などの自動操作でPHPプロジェクトを簡素化します。それらは、テーブルでアクションの前またはアクション(挿入、更新、削除)を自動的に呼び出します。
  • トリガーはMySQLバージョン5.0.2で導入され、対応する権限を作成する必要があります。データベースには、作成されたデータベースに一意の名前が必要であり、元のSQLステートメントが実行されたときにのみ起動されます。
  • トリガーは、テーブルのセットの整合性を維持し、新しい挿入/削除のときに統計テーブルを自動的に増加または減少させ、データベース内のデータの変更を記録し、テーブルを他のテーブルと同期させます。
  • MySQLトリガーは、Webサイトのパフォーマンスにプラスの影響を与え、開発者が多くのPHPコードを作成して操作を処理することを避けることができます。これらを使用して、特定のデータの変更に応答するタスクを自動的に実行できます。
私たちが書くコードの多くは、操作を実行することです。データベースクエリ、ファイル操作、データ処理などであろうと、これはすべて、スクリプトが意図した目的を達成できるようにするためです。しかし、以前の操作を検証するために書く必要があるコードの量に気づきましたか?私の最近のプロジェクトの1つにはかなり面倒な問題があり、そのため、すべてのデータが各操作後にテーブルに同期されたままであることを確認するためだけに、無数のクエリを使用するようになりました。これはエレガントとはほど遠いものであり、かなり単純なスクリプトであるはずですが、複雑なクエリページになっています。メンテナンスの観点から見ると、これは実行可能ではなく、ページの機能の一部を更新したい場合は悪夢です。 MySQLトリガーが私のプロジェクトに入るのはここです。 MySQLにトリガーでより多くの作業を行わせることにより、私のプロジェクトのPHP側が大幅に簡素化されます。したがって、この記事の目的は、MySQLトリガーの作成と使用をより深く理解して、読書の最後に自分のプロジェクトでそれらを使用できるようにすることです。

mysqlトリガーとは何ですか?

トリガーはMySQLバージョン5.0.2で導入され、開発者としての仕事を簡素化するのに役立つMySQLの追加機能の1つにすぎません。それらは、テーブルでアクションの前またはアクション(挿入、更新、削除)を自動的に呼び出します。トリガーを作成するには、適切な権限が必要です。 MySQL 5.1.6の前には、スーパー許可が必要でしたが、5.1.6ではこれが変更され、トリガー許可が必要でした。通常、共有ホスティング計画では、簡単に乱用されるため、スーパーは許可されません。そのため、(仮想)専用サーバーやローカルホストなど、より多くのアクセス許可があるため、サーバーでのみ使用できる場合があります。 mysqlバージョン。トリガーに関する他のクイック指示を以下に示します:

  • データベースに作成されたデータベースに、一意の(ケース非感受性)名前が必要です。
  • 同じイベント(更新/挿入/削除)と時間(前/後)で1つのトリガーのみ。
  • テーブルが削除されると、それに関連付けられたトリガーも削除されます。
  • alterステートメントを使用して(イベントとは異なり)トリガーを明示的に変更することはできません。トリガーを削除して再作成する必要があります。
  • トリガーは、元のSQLステートメントが実行された場合にのみトリガーされます。

トリガーの基本的な構文を元のフォームに分解して、次のように見てみましょう。

<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>
トリガーを作成すると、アクションが発生する前または後にトリガーするかどうかを選択できます。データベースに入力する着信データを変更する場合は、前に必要です。ただし、以前のアクションのために何かをしている場合は、後のステートメントを使用する必要があります。トリガーをトリガーする操作は、これらの3つのステートメントがテーブル内のデータを変更する唯一のステートメントであるため、挿入、更新、または削除できます。

トリガーを実際の状況に適用します

トリガーは多くの場合非常に役立ちます。よく知られている使用法は、外国の鍵を使用していないときに時代遅れのレコードの削除をトリガーすることにより、テーブルのセットの完全性を維持することです。また、新しい挿入/削除、データベース内のデータの変更を記録する、他のテーブルと同期するなど、統計テーブルを自動的に増加または削減するために使用することもできます。この記事では、それらを使用していくつかの計算を処理します。これは、ホールを1時間あたり30ポンドで賃貸する会社がある場合です。彼らは、ホールで開催された各イベントの名前、開始、終了時間を記録し、収入表で支払う時間と費用を計算します。イベントの名前と開始時間が最初にイベントテーブルに挿入されてロビーを予約すると、イベントが終わった後にのみ、レンタルコストがその行に更新されます。イベントの期間(数分)を計算する必要があります。ここで、開始時間は終了時間から差し引かれ、レンタル料金は合計時間に0.5(1時間あたり30ポンド、あたり50ペンス)を掛けることで計算されます。分)。 PHPを使用して、イベント情報を更新するときにイベントの期間と費用の計算を実行することができます(挿入されたデータを選択し、期間とレンタル費用を計算してから、収益リストを挿入または更新するか、トリガーを使用してこのプロセスを自動化して減らすことができます。いくつかのPHPコード。 2つの基本テーブルを設定し、イベントに仮想サブスクリプションデータを挿入して操作を開始しましょう。

2つのテーブルを設定した後、CostCalcという名前のトリガーを作成し続けることができます。トリガーは、イベントテーブルで更新が発生した後に発火するように設定され、前述の計算を実行します。次に、収益リストを挿入または更新します(既存のイベントIDが設定されている場合)。
<code class="language-sql">CREATE TABLE events (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_name VARCHAR(50) NOT NULL,
    event_start TIMESTAMP NOT NULL DEFAULT 0,
    event_end TIMESTAMP NOT NULL DEFAULT 0,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE revenue (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_id INTEGER NOT NULL,
    hire_time INTEGER NOT NULL,
    hire_fees FLOAT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE CASCADE,
    UNIQUE (event_id)
)ENGINE=INNODB;

INSERT INTO events VALUES
    (NULL, 'Birthday Party', '2012-11-08 14:30:00', 0),
    (NULL, 'Wedding', '2012-12-02 13:00:00', 0);</code>
<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>

トリガー(イベントや保存されたルーチンに似ています)を作成する場合、最初に行う必要があることは、トリガーの終了を表す新しいデリミターを指定することです。これは、Delimiterキーワードを使用して行われ、その後にカスタムシンボル(またはシンボル)が続き、MySQLではなく、全体としてトリガーを実行する必要があります。次に、トリガーの名前、その時間、イベント、およびトリガーされるように設定されるテーブルを指定します。この例では、更新されたステートメントが発生した後、トリガーの作業時間を設定します。これは、更新が成功した後にのみトリガーを実行したいからです。次に、トリガーの機能に対応するために、begin ... end化合物ステートメントを使用します。トリガーの本体は、最初に行と時間の2つの変数を宣言します。イベントテーブルから行数を選択します。ここでは、IDは変更されたばかりの行を参照し、Event_startとEvent_end Timesの1つ(または2つ)が変更され、Event_End時間はゼロに等しくありません。これは、レンタル料金はこれらの変更を通してのみ計算できるため、損益計算書にアクションが必要かどうかを明確にするためです。時間と費用を計算できることがわかったら、時間変数を列の最初から最後まで数分数に等しく設定します。この数値に0.5を掛けることで、レンタルコストを取得することもできます。 event_id列は一意であるため、イベントテーブルに対応するIDは1つだけです。 MySQLステートメントでは、古いキーワードと新しいキーワードが、上記のSelect StatementおよびTime変数値の式の式で使用されていることに気付くかもしれません。これらの2つのキーワードの使用は、あなたの状況でのイベントと、トリガーがトリガーされるときに依存します。

  • 新しいキーワードを使用して、データベースに入力する着信データにアクセスします。これは、挿入ステートメントと更新ステートメントでのみ使用できます。
  • 古いキーワードは、レコードに変更が行われる前に、レコード内の現在のデータにアクセスするために使用されます。これは、更新および削除ステートメントでのみ使用できます。
トリガーの起動に使用される対応するPHPスクリプトには、クラス(EventHandlerと呼ばれる)とクライアントの呼び出しコードが含まれます。クラスはPDOを介してMySQLデータベースに接続し、イベントコンテンツを更新する必要があるときに呼び出されるメソッドUpdateEvent()が含まれます。

<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>

最初にイベントハンドラークラスを作成します。ここで、プロパティ$ DBは、コンストラクターメソッドによって設定されたPDOクラスのインスタンスを保持するように定義されています。次に、3つのパラメーターが定義されているUpdateEvent()メソッドを作成します。最初のパラメーターは、イベントテーブルで更新する列を指定し、名前、開始、終了の3つの値のいずれかを許可します。 2番目のパラメーターは、挿入する値または更新された列の現在の値を保持します。列名が有効であることを確認した後、パラメーター化されたクエリを使用してテーブルを照会し、最後に行が更新されているかどうかを確認します。クラスを作成した後、私たちはそれを呼び続けます。 PDOオブジェクトのインスタンスをパラメーターとしてEventHandlerクラスに渡します。 updateEvent()メソッドは、異なる値で4回呼び出され、トリガーがイベントテーブルで行われた更新にどのように反応するかを示します。最初の2つの更新では、トリガーが行を挿入または更新することはありません。イベント期間とレンタル料金を計算するために必要な情報がまだないためです。私たちがしたのは、イベント名を更新し、開始時間を2日間遅らせることだけでした。ただし、次の2つの更新では、最初の更新で終了時間を定義するため、トリガーの機能が必要になります。2番目のアップデートでは、1時間後の終了時間を再定義し、期間の変化になり、レンタルコストも変更されます。これは、テーブルを作成するときにテーブルに制約を課し、イベントIDごとに1つのレコードしか持てないため、置換ステートメントが必要な場所です。

結論

MySQLトリガーは、適切に使用すると、Webサイトのパフォーマンスにプラスの影響を与えるだけでなく、そのような操作を処理するために多くのPHPコードを作成することも避けてください。私のプロジェクトと同じように、あなたがあなたのプロジェクトで役立つと思うことを願っていますので、トリガーを大胆に使用してください! Fotoliaの写真 mysqlトリガーとは何ですか?それはどのように機能しますか?

mysqlトリガーは、テーブルで発生するイベント(挿入、更新、削除など)に応じて自動的に呼び出される保存プログラムです。トリガーは、データベース内の情報の整合性を維持するために使用され、特定の操作がテーブルで発生したときに自動的に呼び出されます。それらはイベントの前後に実行できます。 mysqlトリガーを作成する方法は?

MySQLトリガーの作成には、トリガーの名前、トリガーイベント、およびイベントが発生したときに実行されるステートメントの作成を含む作成トリガーステートメントが含まれます。基本的な例は次のとおりです

mySQLトリガーからPHPスクリプトを呼び出すことはできますか?

直接呼び出すことはできません。 MySQLは、トリガーからのPHPスクリプトの呼び出しをサポートしていません。ただし、UDF(ユーザー定義関数)を使用するか、外部システムを使用してデータベースの変更を監視し、PHPスクリプトを呼び出すことにより、これを間接的に実行できます。

mysqlトリガーの構文は何ですか?

<code class="language-sql">CREATE TABLE events (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_name VARCHAR(50) NOT NULL,
    event_start TIMESTAMP NOT NULL DEFAULT 0,
    event_end TIMESTAMP NOT NULL DEFAULT 0,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE revenue (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_id INTEGER NOT NULL,
    hire_time INTEGER NOT NULL,
    hire_fees FLOAT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE CASCADE,
    UNIQUE (event_id)
)ENGINE=INNODB;

INSERT INTO events VALUES
    (NULL, 'Birthday Party', '2012-11-08 14:30:00', 0),
    (NULL, 'Wedding', '2012-12-02 13:00:00', 0);</code>
mysqlでトリガーを作成するための構文は次のとおりです。
<code class="language-sql">CREATE TRIGGER TrigName [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON tableName
FOR EACH ROW
BEGIN
     #action(s) to perform
END</code>

MySQLを使用してタスクを自動化する方法は?

MySQLの自動化は、トリガー、ストアドプロシージャ、およびイベントを通じて実現できます。トリガーは、特定のデータの変更に応じて実行する必要があるタスクを自動化するために使用できます。ストアドプロシージャを使用すると、一連のコマンドを単一の呼び出し可能なルーチンにカプセル化することができます。イベントは、スケジュールに応じて実行されるタスクです。

mysqlトリガーの制限は何ですか?

mySQLトリガーのいくつかの制限には、次のものが含まれます。単一のテーブルにのみ関連付けられ、結果セットを返すことができず、パラメーターを受け入れることができず、ストアドプロシージャと直接呼ぶことはできません。

mysqlトリガーをデバッグする方法は?

ビルトインデバッガーがないため、MySQLトリガーのデバッグは困難な場合があります。ただし、実行フローを追跡するために値を個別のテーブルに挿入したり、MySQLデバッガーなどのサードパーティツールを使用したりするなど、回避策を使用できます。

mysqlトリガーはストアドプロシージャを呼び出すことができますか?

はい。ただし、管理してデバッグするのが難しいイベントの複雑なチェーンにつながる可能性があるため、これを行う際には注意する必要があります。

mysqlトリガーを削除する方法は?

ドロップトリガーステートメントを使用してMySQLトリガーを削除できます。たとえば、

MySQLトリガーをデータ検証に使用できますか?
<code class="language-sql">CREATE TABLE events (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_name VARCHAR(50) NOT NULL,
    event_start TIMESTAMP NOT NULL DEFAULT 0,
    event_end TIMESTAMP NOT NULL DEFAULT 0,
    PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE revenue (
    id INTEGER NOT NULL AUTO_INCREMENT,
    event_id INTEGER NOT NULL,
    hire_time INTEGER NOT NULL,
    hire_fees FLOAT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (event_id) REFERENCES events(id) ON DELETE CASCADE,
    UNIQUE (event_id)
)ENGINE=INNODB;

INSERT INTO events VALUES
    (NULL, 'Birthday Party', '2012-11-08 14:30:00', 0),
    (NULL, 'Wedding', '2012-12-02 13:00:00', 0);</code>

はい。トリガーを作成して、データが挿入または更新されたかどうかを確認し、それに応じてアクションを実行できます。

以上がMySQLトリガーを使用したアクションオートメーションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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