当前位置:网站首页>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删除,却发现删除成功
边栏推荐
- 通过建立新的SaaS业务来推动增长的六种方法
- 理论问题与工程问题的差异在哪里?
- Transimpedance amplifier
- 设置 height: auto 却无法触发 transition 动画的解决方案
- 类型“DropDownList”的控件“ContentPlaceHolder1_ddlDepartment”必须放在具有 runat=server 的窗体标记内。
- IO process thread -> process -> day4
- 如何开启mysql慢查询日志?
- MySQL - Detailed Explanation of Database Transactions
- Probability Theory and Mathematical Statistics
- BGP通过MPLS解决路由黑洞
猜你喜欢
ROS file system and related commands
用C写小游戏(三子棋)
A young man with strong blood and energy actually became a housekeeper. How did he successfully turn around and change careers?
7.联合索引(最左前缀原则)
原型模式
数据表格化打印输出
Metasploit (MSF) Basic Super Detailed Edition
CASA模型、CENTURY模型应用与案例分析
HCIP 第十三天
Shell becomes canonical and variable
随机推荐
理论问题与工程问题的差异在哪里?
基本SQL语句(一篇就够了)
gdalinfo: error while loading shared libraries: libgdal.so.30: cannot open shared object file: No su
MySQL - locking mechanism
Transimpedance amplifier
MySQL事务(transaction) (有这篇就足够了..)
WebGPU 导入[2] - 核心概念与重要机制解读
数据中台:始于阿里,兴于DaaS
nodejs 简介
@FeignClient configuration参数配置
[Unity3D] Beginner Encryption Skills (Anti-Cracking)
PostgreSQL学习总结(11)—— PostgreSQL 常用的高可用集群方案
I.MX6U-ALPHA开发板(定时器按键消抖)
设置工作模式与环境(中):建造二级引导器
HCIP 第八天
Seleniu截图代码以及给图片赋值名字
WebForm DropDownList bind year and month respectively
HCIP第三天
CASA模型、CENTURY模型应用与案例分析
HCIP 第九天