私のphpサイトでは、管理者はサイトのコンテンツを毎週更新する必要があります。彼がデータを更新するのを忘れた場合、私は彼に電子メールアラートを送りたい. それはどのように可能ですか?バックエンドからメールを送信することは可能ですか。私はググって、トリガーを書くことができるようになりました。しかし、私はそれを行う方法がわかりません。誰でも私を助けてください。
2 に答える
MySQL トリガー構文
トリガーを作成するには、CREATE TRIGGER ステートメントを使用します。以下は、CREATE TRIGGER ステートメントの構文を示しています。
CREATE TRIGGER trigger_name trigger_time trigger_event
ON table_name
FOR EACH ROW
BEGIN
...
END
上記の構文をさらに詳しく調べてみましょう。
CREATE TRIGGER ステートメントの後にトリガー名を置きます。トリガー名は命名規則 [トリガー時間] [テーブル名] [トリガー イベント] に従う必要があります (例: before_employees_update)。
トリガーのアクティブ化時間は、BEFORE または AFTER のいずれかです。トリガーを定義するときは、アクティブ化時間を指定する必要があります。テーブルで変更が行われる前にアクションを処理する場合は BEFORE キーワードを使用し、変更が行われた後にアクションを処理する必要がある場合は AFTER キーワードを使用します。
トリガー イベントは、INSERT、UPDATE、および DELETE です。これらのイベントにより、トリガーが呼び出されます。トリガーは、1 つのイベントによってのみ呼び出すことができます。複数のイベントによって呼び出されるトリガーを定義するには、イベントごとに 1 つずつ、複数のトリガーを定義する必要があります。
トリガーは、特定のテーブルに関連付ける必要があります。テーブル トリガーがなければ存在しないため、ON キーワードの後にテーブル名を指定する必要があります。
SQL コードは、BEGIN キーワードと END キーワードの間に配置されます。
OLD および NEW キーワードは、トリガーをより効率的に開発するのに役立ちます。OLD キーワードはデータを変更する前の既存のレコードを参照し、NEW キーワードはデータを変更した後の新しい行を参照します。
MySQL トリガーの例
従業員テーブルの変更を監査するために、MySQL でトリガーの作成を開始しましょう。
まず、次のように、MySQL サンプル データベースに employees テーブルがあります。
次に、employees_audit という名前の新しいテーブルを作成して、従業員レコードの変更を保持します。次のスクリプトは、employee_audit テーブルを作成します。
CREATE TABLE employees_audit (
id int(11) NOT NULL AUTO_INCREMENT,
employeeNumber int(11) NOT NULL,
lastname varchar(50) NOT NULL,
changedon datetime DEFAULT NULL,
action varchar(50) DEFAULT NULL,
PRIMARY KEY (id)
)
3 番目に、従業員レコードに変更が加えられる前に呼び出される BEFORE UPDATE トリガーを作成します。
DELIMITER $$
CREATE TRIGGER before_employee_update
BEFORE UPDATE ON employees
FOR EACH ROW BEGIN
INSERT INTO employees_audit
SET action = 'update',
employeeNumber = OLD.employeeNumber,
lastname = OLD.lastname,
changedon = NOW();
END$$
DELIMITER ;
スキーマを見ると、次のように、employees テーブルの下に before_employee_update トリガーが表示されます。
次に、従業員レコードを更新して、トリガーが実際に呼び出されるかどうかをテストします。
UPDATE employees
SET lastName = 'Phan'
WHERE employeeNumber = 1056
トリガーが UPDATE ステートメントによって呼び出されたかどうかを確認するには、次のクエリを使用して employees_audit テーブルをクエリできます。
SELECT *
FROM employees_audit
クエリの出力は次のとおりです。
ご覧のとおり、トリガーが実際に呼び出されたので、employees_audit テーブルに新しいレコードが作成されました。
このチュートリアルでは、MySQL でトリガーを作成する方法を学習しました。employees 表の変更を監査するトリガーを作成しました。
ウェブホストがスケジュールされたジョブの実行を許可している場合は、トリガーなしでこれを行うこともできます。php スクリプトを定期的に実行して、データベースをチェックし、電子メールを送信することができます。