当前位置:网站首页>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删除,却发现删除成功
边栏推荐
- PanGu-Coder: A function-level code generation model
- flutter解决键盘和输入框不适配问题
- 牛客2022 暑期多校4 D Jobs (Easy Version)(递推优化策略)
- cas:139504-50-0 美登素DM1|Mertansine|
- flutter在导航栏处实现对两个列表的点击事件
- 读入、输出优化
- Biotin-EDA|CAS:111790-37-5| 乙二胺生物素
- MFC最详细入门教程[转载]
- Stop mental exhaustion Daily sharing
- Application and case analysis of CASA model and CENTURY model
猜你喜欢
随机推荐
HCIP9_BGP增加实验
学习笔记(7)Funtion
科技云报道:实现元宇宙,英伟达从打造基础建设平台开始
小说里的编程 【连载之二十五】元宇宙里月亮弯弯
图扑软件数字孪生油气管道站,搭建油气运输管控平台
Understand Chisel language. 31. Chisel advanced communication state machine (3) - Ready-Valid interface: definition, timing and implementation in Chisel
A young man with strong blood and energy actually became a housekeeper. How did he successfully turn around and change careers?
小说里的编程 【连载之二十一】元宇宙里月亮弯弯
MySQL事务(transaction) (有这篇就足够了..)
Buried development process
typescript学习
WebRTC系列-SDP之编码信息收集
I.MX6U-ALPHA开发板(EPIT定时器实验)
59: Chapter 5: Develop admin management services: 12: MongoDB usage scenarios; (non-core data, non-core data with a relatively large amount of data, small private files such as face photos;)
读入、输出优化
OSPF 综合实验
[ansible]playbook结合项目解释执行步骤
MFC最详细入门教程[转载]
redis的安装与应用
ROS文件系统以及相关命令









