mysql事务

mybatis自学历程

浪子不回头ぞ 提交于 2019-12-02 01:48:11
第一个mybatis程序 IDE:myeclipse2017 jar包:mybatis3.5.2,mybatis依赖包,mysql8.0.17驱动包 注:mybatis包和所需的依赖包,可到 http://www.mybatis.cn/ 下载, mybatis官方文档 (可选中文) 1.项目结构图 注:本示例参考于 C语言中文网 ,如对本示例有疑问可查看此网站,看是否能解决问题 2.建库建表 CREATE DATABASE test; USE test; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `uid` INT UNSIGNED AUTO_INCREMENT, `uname` varchar(20) DEFAULT NULL, `usex` varchar(10) DEFAULT NULL, PRIMARY KEY (`uid`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 3.导jar包 4.创建日志文件 MyBatis 默认使用 log4j 输出日志信息,如果开发者需要查看控制台输出的 SQL 语句,那么需要在 classpath 路径下配置其日志文件。在 myBatis应用的 src 目录下创建 log4j.properties 文件,其内容如下: # Global logging

MYSQL 基操

三世轮回 提交于 2019-12-01 23:34:19
传授有缘人 /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限验证登录MySQL */ mysqld --skip-grant-tables -- 修改root密码 密码加密函数password() update mysql.user set password=password('root'); SHOW PROCESSLIST -- 显示哪些线程正在运行 SHOW VARIABLES -- /* 数据库操作 */ ------------------ -- 查看当前数据库 select database(); -- 显示当前时间、用户名、数据库版本 select now(), user(), version(); -- 创建库 create database[ if not exists] 数据库名 数据库选项 数据库选项: CHARACTER SET charset_name COLLATE collation_name -- 查看已有库 show databases[ like 'pattern'] -- 查看当前库信息 show create database 数据库名 -- 修改库的选项信息 alter database 库名 选项信息 -- 删除库

浅谈事务

僤鯓⒐⒋嵵緔 提交于 2019-12-01 23:03:18
1、事务是什么。 事务( Transaction)是并发控制的基本单位。所谓的事务, 它 是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。 (数据库引擎innoDB是支持事务的(默认每一条sql语句为一个事务),MyISAM不支持事务。) 在关系数据库中 ,一个事务可以是一条SQL语句、一组SQL语句或整个程序。 开启事务: Start Transaction 事务结束: End Transaction 提交事务: Commit Transaction 回滚事务: Rollback Transaction 在 MySQL中,默认情况下,事务是自动提交的,也就是说,只要执行一条DML语句就开启了事物,并且提交了事务 以上的自动提交机制是可以关闭的 对 t_user进行提交和回滚操作 提交操作 (事务成功) start transaction DML语句 commit mysql> start transaction;#手动开启事务 mysql> insert into t_user(name) values('pp'); mysql> commit;#commit之后即可改变底层数据库数据 mysql> select * from t_user; +----+--

MySQL事务

依然范特西╮ 提交于 2019-12-01 21:52:30
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! (1)在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 (2)事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。 (3)事务用来管理 insert,update,delete 语句 一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 (1)原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 (2)一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 (3)隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力

Mysql 先SELECT 后UPDATE 问题

北慕城南 提交于 2019-12-01 20:34:58
最近做一个统计;需要把一个字段(存放数据是json)里某一个数字加1 然后在修改该字段;当时就那么一写最后发现该数据和明细对不上; 其实这个应该是并发引起的,先select 在update 这样写其实会出现一些问题 参考篇文章 ###第一种解决方案 事务,即用一个事务来包裹上面的SELECT+UPDATE操作+写共享锁。 读共享锁是通过下面这样的SQL获得的: SELECT * FROM parent WHERE NAME = 'Jones' LOCK IN SHARE MODE; 如果事务A获得了先获得了读共享锁,那么事务B之后仍然可以读取加了读共享锁的行数据,但必须等事务A commit或者roll back之后才可以更新或者删除加了读共享锁的行数据。 如果事务A先获得了某行的写共享锁,那么事务B就必须等待事务A commit或者roll back之后才可以访问行数据。 SELECT counter_field FROM child_codes FOR UPDATE; UPDATE child_codes SET counter_field = counter_field + 1; ###第二种解决方案 乐观锁,上面是一种观锁机制,而且 SELECT...FOR UPDATE 方式也不太常用 SELECT counter_field FROM child_codes FOR

Spring 注解方式实现 事务管理

不羁岁月 提交于 2019-12-01 20:31:12
使用步骤: 步骤一、在spring配置文件中引入<tx:>命名空间 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"> 步骤二、具有@Transactional 注解的bean自动配置为声明式事务支持 <!-- 事务管理器配置, Hibernate单数据源事务 --> < bean id ="defaultTransactionManager" class ="org.springframework.orm.hibernate3

mysql、oracle默认事务隔离级别

你。 提交于 2019-12-01 20:28:23
1.事务的特性(ACID) (1)原子性(Atomicity)。事务中所涉及的程序对数据库的修改操作要么全部成功,要么全部失败。 (2)一致性(Consistency)。事务执行前和执行后来源和去向保持平衡。 (3)隔离性(Isolation)。并发时每个事务是隔离的,相互不影响。 (4)持久性(Durubility)。一旦事务成功提交,应该保证数据的完整存在。 2.事务隔离级别 (1)read uncommitted 未提交读 所有事务都可以看到没有提交事务的数据。 (2)read committed 提交读 事务成功提交后才可以被查询到。 (3)repeatable 重复读 同一个事务多个实例读取数据时,可能将未提交的记录查询出来,而出现幻读。mysql默认级别 (4)Serializable可串行化 强制的进行排序,在每个读读数据行上添加共享锁。会导致大量超时现象和锁竞争。 MySQL mysql默认的事务处理级别是'REPEATABLE-READ',也就是可重复读 1.查看当前会话隔离级别 select @@tx_isolation; 2.查看系统当前隔离级别 select @@global.tx_isolation; 3.设置当前会话隔离级别 set session transaction isolatin level repeatable read; 4

spring 事务(1)

隐身守侯 提交于 2019-12-01 20:28:15
spring的事务是spring aop应用的典范。本文从以下几个方面入手来看看事务在spring中是如何实现的。 1、事务基础知识 2、spring事务的配置形式有哪些 3、spring事务的关键类 4、问题 #事务基础知识 ##数据库层面的事务 说到事务,我们脑海里就应该出现事务的四个特性 原子性、隔离性、一致性、持久性。 ' 四种隔离 级别 1、序列化:串行化 2、可重复读:可重复读(会出现幻读) 3、读已提交:读已提交数据(会出现不可重复读和幻读) 4、读未提交:读未提交数据(会出现脏读,不可重复读和幻读) ##spring层面的事务 spring层面的事务和mysql的事务有所不同。 四个特性 原子性、隔离性、一致性、持久性。 五种隔离级别 ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别. 另外四个与JDBC的隔离级别相对应 ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。 这种隔离级别会产生脏读,不可重复读和幻像读。 ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据 ISOLATION

Python服务端工程师就业面试指导 网盘下载

北战南征 提交于 2019-12-01 20:24:47
Python后端技术栈(六)--数据库 每日分享 What makes you different or weird—that’s your strength. 那些让你与众不同或怪异的,就是你的力量所在。 1.6数据库 上篇文章对网络编程中的一些经典问题做了总结,比如各种网络协议、IO 多路复用模型、并发库等等。 本篇文章将开始数据库的相关内容,开始咯~ 1.6.1 MySQL 1.6.1.1 MySQL 基础知识点 1.事务的原理,特性,事务并发控制 2.常用的字段、含义和区别 3.常用数据库引擎之间区别 1.6.1.2事务 Transaction 1.事务是数据库并发控制的基本单位 2.事务可以看做是一系列 SQL 语句的集合 3.事务的特性就是要么全部执行成功,要么全部执行失败(回滚) 我们最常见的就是转账操作这样一个使用案例。比如 A 给 B 转账,第一步是从 A 的账户查询一下余额还够不够,然后扣款。第二步是 B 的账户里面增加对应的金额。 从代码的层面来说,下面举一个 SQLAlchemy 框架执行回滚操作的例子: session.begin() try: item1 = session.query(Item).get(1) item2 = session.query(Item).get(2) item1.foo = 'bar' item2.bar = 'foo'

事务的隔离级别

馋奶兔 提交于 2019-12-01 20:10:18
事务的隔离级别 READ UNCIMMITTED(未提交读)   事务中的修改,即使没有提交,其他事务也可以看得到,这种现象就叫做脏读,   例如: ​ A账户2000元,B账户0元,C账户0元 ​ A给B转账 2000元 ​ 1、开启事务 ​ 2、查看 A 有没有 2000 元 ​ 3、有——A 减 2000元;无——回滚 ​ 4、B 加 2000元(停在这一步了) ​ 5、提交事务 ​ 这是一个正常的事务 ​ 假如这个事务还没有提交,但是已经走到第三步了,这个时候又来了一个事务:B 给 C 转账 2000 元 ​ B给C转账 2000元 ​ 1、开启事务 ​ 2、查看 B 有没有 2000 元 (可以查询到其他事务未提交的数据) ​ 3、有——B 减 2000元;无——回滚 ​ 4、B 加 2000元 ​ 5、提交事务   总结:这就是事务还没提交,而别的事务可以看到他其中修改的数据的后果,也就是脏读。    READ COMMITTED(读已提交)   大多数数据库系统的默认隔离级别是READ COMMITTED(读已提交),这种隔离级别就是一个事务的开始,只能看到已经完成的事务的结果,正在执行的,是无法被其他事务看到的。这种级别会出现读取 旧数据 的现象   重复读就是在事务内重复读取了别的线程已经提交的数据,但两次读取的结果不一致,原因是查询的过程中其他事物做了更新的操作