mysql事务

MySQL视图、触发器、事务

为君一笑 提交于 2020-02-08 09:20:14
一、视图 1、什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可 2、为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 3、如何用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id; drop view teacher2course; 强调 1、在硬盘中,视图只有表结构文件,没有表数据文件 2、视图通常是用于插叙,尽量不要修改视图中的数据 二、触发器   1、在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器    2、为何要用触发器?   答: 触发器专门针对我们对某一张表数据增insert、删delete、改update的行为,这类行为一旦执行就会触发触发器的执行,即自动运行另外一段sql代码 -- 语法: delimiter // create trigger trigger名 after/before insert/delete/update on 表名 for each row begin sql代码。。。 END // delimiter ; -- 解释: -- after 事件执行之后触发 before 事件执行之前触发 -- 触发事件 insert

Redis中的事务

坚强是说给别人听的谎言 提交于 2020-02-08 06:21:38
事务特点 1 . 单独的隔离操作:事务中的所有命令会被序列化、按顺序执行,在执行的过程中不会被其他客户端发送来的命令打断 2 . 不保证原子性:redis中的一个事务中如果存在命令执行失败,那么其他命令依然会被执行,没有回滚机制 事务命令 1 、MULTI # 开启事务 mysql begin 2 、命令 1 # 执行命令 3 、命令 2 . . . . . . 4 、EXEC # 提交到数据库执行 mysql commit 4 、DISCARD # 取消事务 mysql 'rollback' 使用步骤 # 开启事务 127.0 .0 .1 : 6379 > MULTI OK # 命令1入队列 127.0 .0 .1 : 6379 > INCR n1 QUEUED # 命令2入队列 127.0 .0 .1 : 6379 > INCR n2 QUEUED # 提交到数据库执行 127.0 .0 .1 : 6379 > EXEC 1 ) ( integer ) 1 2 ) ( integer ) 1 事务中命令错误处理 # 1、命令语法错误,命令入队失败,直接自动discard退出这个事务 这个在命令在执行调用之前会发生错误。例如,这个命令可能有语法错误(错误的参数数量,错误的命令名) 处理方案:语法错误则自动执行discard # 2、命令语法没错,但类型操作有误

MySQL的四种事务隔离级别

让人想犯罪 __ 提交于 2020-02-08 06:02:56
一、事务的四大特性(ACID) (1)原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚. (2)一致性(Consistency) 一个事务执行之前和执行之后都必须处于一致性状态。 例如:A和用户B两者的钱加起来一共是,A和B之间无论如何转账,转几次账,事务结束后两个用户的钱相加起来应该是5000,这就是事务的一致性。 (3)隔离性(Isolation) 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束, 要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。隔离级别见下文。 (4)持久性(Durability) 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。 二、MySQL事务隔离级别 1.读未提交(造成脏读)   读取其他事物未提交的结果。   公司发工资了,领导把5000元打到singo的账号上,但是该事务并未提交,而singo正好去查看账户,发现工资已经到账,是5000元整,非常高兴。可是不幸的是,领导发现发给singo的工资金额不对

mysql事务回滚机制概述

柔情痞子 提交于 2020-02-08 05:11:47
应用场景: 银行取钱,从ATM机取钱,分为以下几个步骤 1 登陆ATM机,输入密码; 2 连接数据库,验证密码; 3 验证成功,获得用户信息,比如存款余额等; 4 用户输入需要取款的金额,按下确认键; 5 从后台数据库中减掉用户账户上的对应金额; 6 ATM吐出钱; 7 用户把钱拿走。 对于上面的取钱这个事情,如果有一步出现错误的话,那么就会取消整个取钱的动作,但是如果在第5步,系统后台已经把钱减了,但是ATM机没有取出来,那么就应用到mysql中的事务。简单地 来说,就是取钱这7步要么都完成,要么就啥也不做,在数据库中就是这个道理。 事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位,事务回滚是指将该事务已经完成的对数据库的更新操作撤销,在事务中,每个正确的原子 操作都会被顺序执行,直到遇到错误的原子操作。回滚的意思其实即使如果之前是插入操作的话,那么会执行删除之前插入的记录,如果是修改操作的话,那么会执行将update之前的记录还原。 因此,正确的原子操作是真正被执行过的,是物理执行。 事务是由一条或者多条sql语句组成,在事务的操作中,要么这些sql语句都执行,要么都不执行。 事务的ACID特性:原子性,一致性,隔离性,持久性。 在当前事务中确实能看到插入的记录,最后只不过被删除了,但是auto_increament不会删除而是改变值

Spring事务@Transactional和@EnableTransactionManagement的使用与源码解析(一)

馋奶兔 提交于 2020-02-08 04:43:29
一.Spring事务 1.什么是声明式事务? 百度定义: 以方法为单位,进行事务控制;抛出异常,事务回滚,最小的执行单位为方法,决定执行成败是通过是否抛出异常来判断的,抛出异常即执行失败 2. Spring的声明事务实现 [1]事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编码式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于 AOP,将具体业务逻辑与事务处理解耦。声明式事务管理使业务代码逻辑不受污染, 因此在实际使用中声明式事务用的比较多。声明式事务有两种方式,一种是在配置文件(xml)中做相关的事务规则声明,另一种是基于@Transactional 注解的方式,下面我们是针对注解的使用进行讲解 [2] @Transactional:事务注解,对我们的实例类进行事务声明 [3] @EnableTransactionManagement 事务管理注解,开启事务管理器,对声明了@Transactional的类进行管理 3.业务代码的实现: 前置工作:使用mysql数据库在自己新建的test 库中创建order表 [1]在pom.xml文件下导入相关依赖 <!-- 声明事务时使用的数据源 --> <dependency> <groupId>c3p0</groupId> <artifactId

视图、触发器、事务、存储过程、内置函数、流程控制、索引

爱⌒轻易说出口 提交于 2020-02-08 04:43:23
视图 什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用即可 为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询 如何用视图 create view teacher2course as select * from teacher inner join course on teacher.t.id = course.teacher_id 强调 在硬盘中,视图只有表结构文件,没有表数据文件 视图通常是用于查询,尽量不要修改视图中的数据 drop view teacher2course; 思考:开发过程中会不会去使用视图? 不会!!视图是mysql的功能,如果你的项目里面大量的是用到了视图,那意味着你后期想要扩展某个功能的时候这个功能恰巧又需要对视图进行修改,意味着你需要现在mysql端将视图先修改一下,然后再去应用程序中修改对应的sql语句,这就涉及到跨部门沟通的问题,所以通常不会使用视图,而是通过重新修改sql语句来扩展功能 触发器 ​ 在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器 为何要用触发器 触发器专门针对我们对某一张表数据增insert、删delete、改update的行为,这类行为一旦执行,就会触发触发器的执行,即自动运行另一段sql代码 创建触发器的语法 # 针对插入 create trigger tri_after

视图、触发器、事务、存储过程、函数

空扰寡人 提交于 2020-02-08 04:40:25
视图 1、什么是视图 ​ 视图就是通过查询得到一张虚拟表,然后保存下来,下次直接使用就可以 2、为什么要用视图 ​ 如果要频繁使用一张虚拟表,可以不用重复查询 3、如何使用使用视图 create view teacher2course as select * from teacher inner join course on teacher.tid=course.teacher_id 强调 1、在硬盘中,视图只有表结构文件,没有表数据文件 2、视图通常用于查询,尽量不要修改视图的数据 # 删除视图 drop view teacher2course; 记住:开发过程中不会去使用视图,因为视图是mysql的功能,如果项目里面大量的使用到了视图,意味着后期想要扩张某个功能的时候这个功能恰巧又需要对视图进行修改,意味着需要先在mysql这边将视图修改,然后再去应用程序中修改对应的sql语句,这就涉及到了跨部门沟通的问题,所以通常不会使用视图,而是通过重新修改sql语句来扩展功能 触发器 在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器 为何要用触发器 ​ 触发器专门针对我们对某一张表数据增insert、删delete、改update的行为,这类行为一旦执行 ​ 就会触发触发器的执行,即自动运行另外一段sql代码 创建触发器语法 # 针对插入 create trigger

pymsql及事务

南笙酒味 提交于 2020-02-08 04:37:14
MySQL知识点补充 1、去重 distinct select distinct name,age from t1; # 针对查找出来的结果整行(记录)进行去重,也就是相同行只保存一个 注意点:distinct 必须放在查询列的第一个(放后面就会报错) 2、保存操作记录 tee tee D:a.txt; 可以把你对于MySQL的所有操作都记录到D盘下的a.txt中(包括一些报错信息) pymysql包的基本用法 基本的查看 import pymysql # 导入pymysql包 conn = pymysql.connect(host='localhost',user='root',password='123',database='db1',charset='utf8') # 连接mysql服务器,必须指定主机、用户、密码和你要使用的数据库 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 实例化拿到光标对象,可以对服务器发送sql语句 # cursor=pymysql.cursors.DictCursor是为了让输出变成字典(列名与值对应),不设置的话就是元组 sql = 'select * from t1 where id > %s'% 1 # 写的sql语句不需要封号结尾,如果需要给sql语句传参,需要通过

mysql事务

删除回忆录丶 提交于 2020-02-08 04:34:57
事务:一组操作, 要么都成功, 要么都失败 特性: 原子性: 一组操作, 要么都成功, 要么都失败 一致性(Consistency):指事务发生前和发生后,数据的总额依然匹配 隔离性(Isolation):简单点说,某个事务的操作对其他事务不可见的 持久性(Durability):当事务完成后,其影响应该保留下来,不能撤消,只能通过“另开起一个事物”来抵消之前的错误 场景: 我去银行给朋友汇款, 我卡上有1000元, 朋友卡上500元, 我给朋友转账100元(无手续费), 如果,网线断了, 我的钱刚扣,而朋友的钱又没加时, 怎么办? create table t11 ( id int auto_increment primary key, name varchar(32) not null default '', money int not null default 0 )engine=Innodb charset=utf8; insert into t11 (name,money) values ('aaa', 1000), ('bbb', 500); 解决方法: 开启事务 (start transaction) (执行sql操作) commit : 提交上面的SQL, 让其生效 rollback: 回滚 show full tables; 显示全部类型 来源: https:/

mysql的 视图、触发器、事务、存储过程、函数、索引与慢查询优化

試著忘記壹切 提交于 2020-02-08 04:32:37
视图假设有两张表学生和老师,学生表(sid,name,tid)关联老师表(tid,tname)创建视图的语法: create view 视图名 as SQL语句 实例:create view student2teacher as select * from student inner join teacher on student.tid=teacher.tid; 创建视图后会产生一个名为 student2teacher 的表,可以直接调用。 思考:开发过程中会不会去使用视图? 不会!视图是mysql的功能,如果你的项目里面大量的使用到了视图,那意味着你后期想要扩张某个功能的时候这个功能恰巧又需要对视图进行修改, 意味着你需要先在mysql这边将视图先修改一下,然后再去应用程序中修改对应的sql语句,这就涉及到跨部门沟通的问题,所以通常不会使用视图, 而是通过重新修改sql语句来扩展功能 强调 1、在硬盘中,视图只有表结构文件,没有表数据文件 2、视图通常是用于查询,尽量不要修改视图中的数据 然后说一个关于删除视图的方法 语法:DROP VIEW 视图名称 DROP VIEW student2teacher 触发器 在某张表对数据进行增删改时自动触发的功能称之为触发器 这类行为一旦执行了就会触发触发器的执行,自动运行另一段的sql代码 创建触发器的语法 # 创建两张表create