事务管理

重新学习MySQL数据库6:浅谈MySQL的中事务与锁

陌路散爱 提交于 2019-11-28 10:36:27
『浅入深出』MySQL 中事务的实现 在关系型数据库中,事务的重要性不言而喻,只要对数据库稍有了解的人都知道事务具有 ACID 四个基本属性,而我们不知道的可能就是数据库是如何实现这四个属性的;在这篇文章中,我们将对事务的实现进行分析,尝试理解数据库是如何实现事务的,当然我们也会在文章中简单对 MySQL 中对 ACID 的实现进行简单的介绍。 事务其实就是并发控制的基本单位;相信我们都知道,事务是一个序列操作,其中的操作要么都执行,要么都不执行,它是一个不可分割的工作单位;数据库事务的 ACID 四大特性是事务的基础,了解了 ACID 是如何实现的,我们也就清除了事务的实现,接下来我们将依次介绍数据库是如何实现这四个特性的。 原子性 在学习事务时,经常有人会告诉你,事务就是一系列的操作,要么全部都执行,要都不执行,这其实就是对事务原子性的刻画;虽然事务具有原子性,但是原子性并不是只与事务有关系,它的身影在很多地方都会出现。 由于操作并不具有原子性,并且可以再分为多个操作,当这些操作出现错误或抛出异常时,整个操作就可能不会继续执行下去,而已经进行的操作造成的副作用就可能造成数据更新的丢失或者错误。 事务其实和一个操作没有什么太大的区别,它是一系列的数据库操作(可以理解为 SQL)的集合,如果事务不具备原子性,那么就没办法保证同一个事务中的所有操作都被执行或者未被执行了

重新学习Mysql数据库2:『浅入浅出』MySQL 和 InnoDB

☆樱花仙子☆ 提交于 2019-11-28 10:34:29
作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL、PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的、不了解数据库的有所帮助。 ![](https://img2018.cnblogs.com/blog/1092007/201908/1092007-20190824162501679-1707813820.png) 添加描述 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者实现会在文中单独指出。 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有两个词非常容易混淆,也就是数据库和实例: 数据库:物理操作文件系统或其他形式文件类型的集合; 实例:MySQL 数据库由后台线程以及一个共享内存区组成; 对于数据库和实例的定义都来自于 MySQL 技术内幕:InnoDB 存储引擎 一书,想要了解 InnoDB 存储引擎的读者可以阅读这本书籍。 数据库和实例 在 MySQL 中,实例和数据库往往都是一一对应的,而我们也无法直接操作数据库

事务的管理

China☆狼群 提交于 2019-11-28 10:17:37
事务的基本流程: 开启事务:start transaction; 创建一个保存点:savepoint 保存点名 回到保存点(根据具体情况):rollback to保存点名 在MySQL上具体演示: mysql> start transaction; --开启事务 Query OK, 0 rows affected (0.00 sec) mysql> savepoint aa; --设置保存点aa Query OK, 0 rows affected (0.00 sec) mysql> insert into account values(1, '张三', 10); --添加一条记录 Query OK, 1 row affected (0.00 sec) mysql> savepoint bb; -- 设置保存点bb Query OK, 0 rows affected (0.00 sec) mysql> insert into account values(2, '李四', 10000); --再添加一条记录 Query OK, 1 row affected (0.00 sec) mysql> select * from account; --两条记录都在了 +----+--------+----------+ | id | name | balance | +----+-------

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

限于喜欢 提交于 2019-11-28 08:29:42
一、视图   1:什么是视图:       一个查询语句的结果是一张虚拟表,将这种虚拟表保存下来,就形成了一张虚拟表   2:为什么要用视图:       当频繁需要用到多张表的连表结果时,就可以事先生成好视图,基于这张视图的前提上之后的查找直接调用即可,避免了反复写连表操作的mysql语句   3:如何使用视图:     语法:create view 视图名称 as MySQL语句 eg:caeate view teacher_view as select tid from teacher where tname='李平老师' # 如何使用视图 create view teacher2course as select * from teacher inner join course on teacher.tid = course.teacher_id;  4:使用视图注意事项:    (1):视图只是表结果,视图中的数据还是来源于原来的表     (2):创好的视图就不要轻易的改动视图表中的数据,因为它的数据来自原来的表中     (3):一般情况下不会频繁的使用视图来写业务逻辑,数据量过大时消耗空间资源,效率不高 视图是存放到数据库中去的,过分的依赖于数据库中存放的视图,一旦涉及sql语句的修改,就必须去数据库进行修改,通常数据是由专门的DBA来管理的,这样操作起来及其的不便

JDBC的API详解之Connection

佐手、 提交于 2019-11-28 07:42:50
1.1.1 Connection:与数据库连接对象 1.1.1.1 作用一:创建执行SQL语句的对象 执行SQL语句对象: l Statement :执行SQL l CallableStatement :执行数据库中存储过程 l PreparedStatement :执行SQL.对SQL进行预处理。解决SQL注入漏洞。 1.1.1.2 作用二:管理事务 来源: https://blog.51cto.com/14473726/2431940

MySQL--高性能MySQL笔记一

喜夏-厌秋 提交于 2019-11-28 07:22:42
链接管理与安全性: 每个客户端连接都在服务器进程中拥有一个线程。 MySQL5.5以及更新的版本提供了一个API,支持线程池插件,可以使用池中少量的线程服务大量的链接。 认证基于用户名、密码和原始主机信息。 并发控制: 在处理并发读或者写时,可以通过实现一个由两种类型的锁组成的锁系统来解决问题,这两种类型的锁通常被称为共享锁(shared lock)、排他锁(exclusive lock)。也叫读锁或者写锁。 锁策略: 在锁的开销和数据的安全性之间寻求平衡,一般都是在表中施加行级锁(row-level-lock)。 表锁和行级锁 事务:一组原子性的sql查询,一个独立的工作单元。如果数据库引擎能够成功的对数据库应用该组查询的全部语句,那么就执行该组查询。 ACID:原子性atomicity 一致性consistency 隔离性isolation 持久性 durability 四种隔离级别: READ UNCOMMITTED 未提交读 : 事务中的修改,即使没有提交,对于其他事务也都是可见的。事务可以读取未提交的数据,脏读。 READ COMMITTED 提交读: 大多数数据库的默认隔离级别, read committed ,但是MySQL不是。一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的。 REPEATABLE READ 可重复读 : 解决了脏读的问题

Spring中的@Transactional(rollbackFor = Exception.class)属性详解

风流意气都作罢 提交于 2019-11-28 06:46:23
序言 今天我在写代码的时候,看到了。一个注解@Transactional(rollbackFor = Exception.class),今天就和大家分享一下,这个注解的用法; 异常 如下图所示,我们都知道Exception分为运行时异常RuntimeException和非运行时异常 error是一定会回滚的 如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。 如果不想终止,则必须捕获所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。 非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如IOException、SQLException等以及用户自定义的Exception异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。 事务管理方式 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。 spring支持编程式事务管理和声明式事务管理两种方式。   

WEB 10.MySQL

|▌冷眼眸甩不掉的悲伤 提交于 2019-11-28 06:20:48
MySQL 1. Mysql数据库的安装与介绍 数据库: 事务: 事务的特性: 事务的回滚: 在不考虑事务的隔离性的情况下,会导致以下情况: 事务的四种隔离级别: 数据库的分类: Mysql引擎: 1. Mysql数据库的安装与介绍 (1) 概念介绍 数据库: 存储数据的仓库,按照数据结构,来组织,管理和存储数据,并提供了增、删、改、查的功能。 学查询 架构 优化 数据库的建模:是用来描述业务实体之间的关系 事务: 转账:A给B转账 第一步a的账户先把钱扣除 第二部 将b账户的钱更新 将一组增删改的操作看成一个独立的执行单元,要么都成功,如果有一个操作失败,那么数据库会执行回滚,一组操作都会不生效(事务定义) 事务的特性: 原子性 :事务被当做一个不可分割的执行单元,要么全部成功,要么全部失败,成功则将数据应用到数据库,失败不会对数据产生影响 一致性 :开始事务前的状态必须和事务执行之后的状态保持一致 隔离性 :当用户并发访问数据库时,数据库会给每个用户线程开启一个事务,事务和事务之间相互隔离,互不影响 持久性 :一旦事物提交,那么数据就会永久行的应用于数据库,就算机器出现故障,也不会将数据修改 事务的回滚: 事务作为一个独立不可分割的执行单元,要么都成功,只要这一组操作中有一个失败,事务会执行回滚,恢复到事务执行之前的状态 在不考虑事务的隔离性的情况下,会导致以下情况: 脏读 :

Spring JdbcTemplate&声明式事务

时间秒杀一切 提交于 2019-11-28 05:52:36
1、JdbcTemplate基本使用 1)、JdbcTemplate基本使用-概述(了解) JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的Jdbc API对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和HibernateTemplate,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等。 2)、JdbcTemplate基本使用-开发步骤(理解) ①导入spring-jdbc和spring-tx(事务)坐标 ②创建数据库表和实体 ③创建JdbcTemplate对象 设置连接池 ④执行数据库操作 3)、JdbcTemplate基本使用-快速入门代码实现(应用) ①导入Spring-jdbc和Spring-tx坐标(依赖) <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.0.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId

asp.net中数据库事务管理

江枫思渺然 提交于 2019-11-28 05:10:56
英文搜索关键字: 文章地址:https://stackoverflow.com/questions/313199/sql-transactions-best-way-to-implement-in-asp-net 文章标题: Sql Transactions:ASP.Net中实现的最佳方式 Database transaction management in asp.net 示例代码: 首先,我不会在页面中处理事务逻辑。 编写某种类型的业务类来实现这一点 - 服务,数据实用程序类,您可以从ASP.Net中抽象出来。 接下来, 如果您使用的数据库可以订阅像SQL Server这样的分布式事务 ,您可以查看使用 TransactionScope 类(在System.Transactions命名空间中,引用System.Transactions.dll)。 using(TransactionScope scope = new TransactionScope()) { SaveObjectOne(); //these are just psuedo-code statements SaveObjectTwo(); //replace these with your code that saves various objs SaveObjectThree(); scope.Complete