当前位置:网站首页>Database triggers and transactions
Database triggers and transactions
2022-08-02 08:23:00 【face to face】
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
一、触发器
概念
触发器是SQL server提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,是由事件来触发.Triggers are often used to strengthen the integrity of the data and business rules.
二、 触发器的操作
创建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)
);
复制代码The trigger of deletion operation
// 语法格式: 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;
复制代码The trigger view the delete operation
// Check the standard grammar: SHOW TRIGGERS;
// 查看触发器
SHOW TRIGGERS;
// Delete the standard grammar:DROP TRIGGER 触发器名称;
// 删除account_delete触发器
DROP TRIGGER account_delete;
复制代码三、事务
概念
在关系数据库中,一个事务可以是一个SQL语句,一组SQL语句或整个程序.其特点是这个单元要么同时成功要么同时失败,单元中的每条 SQL 语句都相互依赖,形成一个整体.事务应该具有4个属性:原子性、一致性、隔离性、持久性.这四个属性通常称为ACID特性.
四大特性:
- 原子性:一个事务是一个不可分割的工作单位,事务包含的所有操作要么全部成功,要么全部失败回滚.
- 一致性:事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态.
- 隔离性: 当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
- 持久性: 一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作.
四、事务的操作
基本流程
- 开启事务:记录回滚点,并通知服务器
- 执行SQL语句:执行具体的一条或多条sql语句
- 结束事务(提交|回滚):提交:没出现问题,数据进行更新;回滚:出现问题,数据恢复到开启事务时的状态
基础操作
-- 开启事务
START TRANSACTION;
-- 执行SQL语句
UPDATE account SET money=money-500 WHERE NAME='张三';
-- 回滚事务(出现问题)
ROLLBACK;
-- 提交事务(没出现问题)
COMMIT;
复制代码事务的提交方式
// 查看提交方式
SELECT @@AUTOCOMMIT; -- 1代表自动提交 0代表手动提交
// 修改事务的提交方式
SET @@autocommit=1;
复制代码事务的隔离级别
四种隔离级别
- 读未提交:read uncommitted
- 读已提交:read committed
- 可重复读:repeatable read
- 串行化:serializable
可能引发问题
- 脏读:是指在一个事务处理过程中读取了另一个未提交的事务中的数据 , 导致两次查询结果不一致
- 不可重复读:是指在一个事务处理过程中读取了另一个事务中修改并已提交的数据, 导致两次查询结果不一致
- 幻读:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入.或不存在执行delete删除,却发现删除成功
边栏推荐
- gdalinfo: error while loading shared libraries: libgdal.so.30: cannot open shared object file: No su
- PanGu-Coder: A function-level code generation model
- uniapp 禁止默认返回事件
- The crawler video crawl tools you get
- Biotin-LC-Hydrazide|CAS:109276-34-8|生物素-LC-酰肼
- @RequestBody使用
- 用户身份标识与账号体系实践
- MySQL - locking mechanism
- UG NX二次开发(C#)-外部模式-导出dwg格式的文件
- @Repository详解
猜你喜欢
随机推荐
数据中台:始于阿里,兴于DaaS
MySQL - Detailed Explanation of Database Transactions
多表的查询
HCIP 第六天
用户身份标识与账号体系实践
mysql启动报错The server quit without updating PID file几种解决办法
通过建立新的SaaS业务来推动增长的六种方法
AcWing 2811. 最长公共子串(后缀自动机 fa 指针的性质)
Stop mental exhaustion Daily sharing
The crawler video crawl tools you get
JVM垃圾回收与性能调优方式
52. [Bool type input any non-0 value is not 1 version reason]
redis-advanced
HCIP 第五天
停止精神内耗 每日分享
Application and case analysis of CASA model and CENTURY model
小说里的编程 【连载之二十二】元宇宙里月亮弯弯
小说里的编程 【连载之二十五】元宇宙里月亮弯弯
MySQL事务隔离级别详解
五款优秀免费的在线抠图工具









