トリガーは、データの整合性を確保するために SQL Server によってプログラマやデータ アナリストに提供されるメソッドです。これはテーブル イベントに関連しています。特別なストアド プロシージャは、以下によってトリガーされます。イベント。トリガーは、データ整合性の制約とビジネス ルールを強制するためによく使用されます。
account および account_log データ テーブルの作成:
CREATE TABLE account( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), money DOUBL ); INSERT INTO account VALUES (NULL,'张三',1000),(NULL,'李四',1000); CREATE TABLE account_log( id INT PRIMARY KEY AUTO_INCREMENT, operation VARCHAR(20), operation_time DATETIME, operation_id INT, operation_params VARCHAR(200) );
// 语法格式: BEFORE|AFTER INSERT: 插入 UPDATE:更新 DELETE:删除 // DELIMITER $ // CREATE TRIGGER 触发器名称 // BEFORE|AFTER INSERT|UPDATE|DELETE // ON 表名 // FOR EACH ROW // BEGIN // 触发器要执行的功能; // END$ // DELIMITER ; // 创建INSERT型触发器。用于对account表新增数据进行日志的记录 DELIMITER $ CREATE TRIGGER account_insert AFTER INSERT ON account FOR EACH ROW BEGIN INSERT INTO account_log VALUES (NULL,'INSERT',NOW(),new.id,CONCAT('插入后{id=',new.id,',name=',new.name,',money=',new.money,'}')); END $ DELIMITER ; // 向account表添加一条记录 INSERT INTO account VALUES (NULL, '王五', 2000); // 查询account表 SELECT * FROM account;
// 查看标准语法: SHOW TRIGGERS; // 查看触发器 SHOW TRIGGERS; // 删除标准语法:DROP TRIGGER 触发器名称; // 删除account_delete触发器 DROP TRIGGER account_delete;
リレーショナル データベースでは、トランザクションは SQL ステートメント、SQL ステートメントのグループ、またはプログラム全体。その特徴は、このユニットが同時に成功するか失敗するかのいずれかであり、ユニット内の各 SQL ステートメントが相互に依存して全体を形成することです。トランザクションには、原子性、一貫性、分離性、耐久性という 4 つの属性が必要です。これら 4 つのプロパティは、ACID プロパティと呼ばれることがよくあります。
4 つの主要な特性:
原子性:トランザクションは分割できない作業単位であり、トランザクションにはすべての操作が含まれます。成功または失敗し、ロールバックされます。
一貫性:トランザクションは、データベースをある一貫性状態から別の一貫性状態に変更させる必要があります。つまり、トランザクションは実行の前後に実行される必要があります。 . 一貫した状態にあります。
分離:同じテーブルを操作する場合など、複数のユーザーが同時にデータベースにアクセスする場合、各ユーザーに対してデータベースによって開かれたトランザクションは、他のユーザーが使用することはできません。トランザクション 操作による干渉、複数の同時トランザクションは互いに分離する必要がある
永続性:トランザクションが送信されると、データベース内のデータは永続的に変更されます。 、データベース システムに障害が発生した場合でも、トランザクションをコミットする操作は失われません。
ロールバックポイントを記録し、通知するサーバー
1 つ以上の特定の SQL ステートメントを実行します
: 問題は発生せず、データは更新されます;Rollback: 問題が発生しました、データはトランザクション開始時の状態に復元されます
#基本操作-- 开启事务 START TRANSACTION; -- 执行SQL语句 UPDATE account SET money=money-500 WHERE NAME='张三'; -- 回滚事务(出现问题) ROLLBACK; -- 提交事务(没出现问题) COMMIT;
// 查看提交方式 SELECT @@AUTOCOMMIT; -- 1代表自动提交 0代表手动提交 // 修改事务的提交方式 SET @@autocommit=1;
#反復可能読み取り:
シリアル化:
は問題を引き起こす可能性があります:
ダーティ リード:
Non-repeatable read:
ファントム リーディング:
分離操作
// 查询数据库隔离级别 SELECT @@TX_ISOLATION; // 修改数据库隔离级别 SET GLOBAL TRANSACTION ISOLATION LEVEL 级别字符串;
以上がMySQL データベースにトリガーとトランザクションを適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。