当前位置:网站首页>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删除,却发现删除成功
边栏推荐
- cas:139504-50-0 美登素DM1|Mertansine|
- sql创建表格 如图 运行完提示invalid table name 是什么原因
- 常用的云安全防护措施盘点
- 2022-7-31 12点 程序爱生活 恒指底背离中,有1-2周反弹希望
- 17、生成长图,并上传至服务器
- ROS文件系统以及相关命令
- 用C写小游戏(三子棋)
- uniapp 禁止默认返回事件
- Control 'ContentPlaceHolder1_ddlDepartment' of type 'DropDownList' must be placed inside a form tag with runat=server.
- 【Network】IP, subnet mask
猜你喜欢
52.【bool类型输入任何非0数值不为1的版本原因】
Kind of weird!Access the destination URL, the host can container but not
WebRTC系列-SDP之编码信息收集
静态路由综合实验
ROS file system and related commands
A young man with strong blood and energy actually became a housekeeper. How did he successfully turn around and change careers?
2022-08-01 第四小组 修身课 学习笔记(every day)
MySQL事务(transaction) (有这篇就足够了..)
prometheus监控mysql_galera集群
Biotin-C6-amine|N-生物素基-1,6-己二胺|CAS:65953-56-2
随机推荐
[Unity3D] Beginner Encryption Skills (Anti-Cracking)
Biotinyl Cystamine|CAS:128915-82-2|生物素半胱胺
MySQL优化之慢日志查询
HCIP第一天
Figure robot software digital twin station oil and gas pipelines, oil and gas transportation control platform
MFC最详细入门教程[转载]
数据中台:始于阿里,兴于DaaS
Seleniu截图代码以及给图片赋值名字
小说里的编程 【连载之二十二】元宇宙里月亮弯弯
Biotin-EDA|CAS:111790-37-5| 乙二胺生物素
@RequestParam使用
R语言plotly可视化:plotly可视化回归模型实际值和回归预测值的散点图分析回归模型的预测效能、一个好的模型大部分的散点在对角线附近(predicted vs actual)
HCIP 第五天
2022年防止网络攻击的15个网络安全实践,你学会了吗?
【Network】IP, subnet mask
MGRE环境下的OSPF
血气方刚的年轻小伙竟去做家政小哥,是怎样成功逆袭转行的
常用的云安全防护措施盘点
Biotin-LC-Hydrazide|CAS:109276-34-8|生物素-LC-酰肼
PostgreSQL学习总结(11)—— PostgreSQL 常用的高可用集群方案