mysql事务

mysql 锁和隔离事务

冷暖自知 提交于 2019-12-01 07:45:35
--查询表锁争用情况 show status like 'ord%'; --查看数据库中表的状态,是否被锁; SHOW PROCESSLIST; --脏读 读未提交 --A事务读取了B事务修改但未提交的数据 B稍后时候进行了回滚,那么A就发生了脏读 --不可重复读 读不回去了 --A事务在进行相同条件查询的时候,(两次或者两次以上)出现了每次结果不一样,因为在查询期间有其他事务进行了update操作,导致结果不一致 --幻读 读多了 --A事务在进行相同条件查询的时候,因为在查询期间发现记录数不一样了 ,因为进行了insert操作,导致结果不一致 --隔离级别 --1. 1 Read uncommitted 脏读 --2. 2 Read committed 避免脏读 会有重复读和幻读 --3. 4 repeatable read 可重复读 避免不可重复读 --4. 8 serializable 避免幻读 这样性能会低 --1关闭A自动提交 set autocommit =0; --3开启事务 start transaction; --4执行更新 update tableA set nane='je' where id='1'; --6回滚 rollback; --2设置B隔离级别 读到A的未提交的数据uncommitted --Read uncommitted(脏读)Read

mysql事务隔离级别

谁都会走 提交于 2019-12-01 07:20:50
事务的四大特性 1.原子性 2.一致性 3.隔离性 4.持久性 四种事务隔离级别 1.未提交读 2.已提交读 3.可重复读 4.可串行化 事务隔离要解决三个问题 1.脏读,读取到了未提交事务的数据,比如未提交读就会产生这种数据 2.不可重复读,在同一个事务里两次读取的数据不一样,因为在两次读取的过程中,另一个事务提交改变了该值。未提交读,已提交读又称为不可重复读,会产生这种情况。 3.幻读,与不可重复读类似,幻读是两次查询的行个数不一样。幻读针对的是多行,不可重复读针对的是一行或者一个数据。事务隔离级别前三种都可能会产生这种情况。 可串行化三种情况都不会产生,但是效率比较低,他是一个事务执行完毕,才能执行下一个事务。 来源: https://www.cnblogs.com/scru/p/11668072.html

MySQL事务和隔离级别

那年仲夏 提交于 2019-12-01 07:19:36
Mysql事务 避免事务,会占用内存 事务是啥? 简而言之:事务 - 就是保护多条执行的sql语句,要么全部成功,要么全部失败 比如:转账就是一个事务:从一个用户将资金转出,再将资金转入到另一个用户,这两个操作看做一体 事务是在哪个层实现的? 事务是引擎层实现的,mysql是多引擎的系统,不是所有引擎都支持事务的,比如MySQL原生的MyISAM就不支持事务,这也是MyIASM被InnoDB取代的原因之一。 事务ACID特性 原子性: 一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。 一致性: 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。 隔离性: 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。 持久性: 事务处理结束后

mysql 的逻辑架构

為{幸葍}努か 提交于 2019-12-01 07:07:19
mysql 的逻辑架构分为三层: 最上层的服务大多数基于网络的客户端、服务器的工具或者服务都有类似的架构,比如连接处理,授权认证、安全等 第二层架构:mysql的核心服务功能都在这一层,包括查询解析,分析,优化,缓存以及所有的内置函数,所有跨存储引擎的功能都在这一层实现:存储过程,触发器、视图 第三层:包含存储引擎。负责数据的存储和提取,innoDB是个例外,它会解析外键定义,因为mysql服务器本身没有实现该功能 连接管理与安全性: 当客户端连接到mysql服务器是,服务器需要对其进行认证,认证基于用户名,原始主机信息和密码,一旦客户端连接成功,服务器 会继续验证该客户端是否具有执行某个特定查询的权限 优化与执行: mysql会解析查询,并创建内部数据结构(解析树),然后对其进行各种优化,包括重写查询,决定表的读取顺序,以及选择合适的索引,用户可以通过特殊的关键字提示优化器,影响他的决策过程,也可以请求优化器解释优化过程的各个因素,使yoghurt可以知道服务器是如何进行优化决策的,并提供一个参考基准,便于用户重构查询和修改相关配置,优化查询效率 存储引擎对于优化查询时有影响的 对于select语句,在解析查询之前,服务器会先检查缓存,如果能找到对应的查询,服务器就不会再执行查询解析,优化和执行的整个过程,而是直接返回查询结果 并发控制: 只要有多个查询需要在同一时刻修改数据

6-3 事务

久未见 提交于 2019-12-01 06:55:44
一 事物 事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据完整性。 create table user( id int primary key auto_increment, name char(32), balance int ); insert into user(name,balance) values ('wsb',1000), ('egon',1000), ('ysb',1000); #原子操作 start transaction; update user set balance=900 where name='wsb'; #买支付100元 update user set balance=1010 where name='egon'; #中介拿走10元 update user set balance=1090 where name='ysb'; #卖家拿到90元 commit; #出现异常,回滚到初始状态 start transaction; update user set balance=900 where name='wsb'; #买支付100元 update user set balance=1010 where name='egon'; #中介拿走10元 uppdate user set balance

3-1 存储引擎的介绍

你。 提交于 2019-12-01 06:53:18
一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方 法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和 操作此表的类型) 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql 数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据 自己的需要编写自己的存储引擎 SQL 解析器、SQL 优化器、缓冲池、存储引擎等组件在每个数据库中都存在,但不是每 个数据库都有这么多存储引擎。MySQL 的插件式存储引擎可以让存储引擎层的开发人员设 计他们希望的存储层,例如,有的应用需要满足事务的要求,有的应用则不需要对事务有这 么强的要求 ;有的希望数据能持久存储,有的只希望放在内存中,临时并快速地提供对数据 的查询。 二 mysql支持的存储引擎 MariaDB [(none)]> show

Spring系列(六):Spring事务源码解析

给你一囗甜甜゛ 提交于 2019-12-01 06:21:13
一、事务概述   1.1 什么是事务   事务是一组原子性的SQL查询,或者说是一个独立的工作单元。要么全部执行,要么全部不执行。   1.2 事务的特性(ACID)    ①原子性( atomicity )   一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部回滚,对于一个事务来说,不可能只执行其中的一部分操作    ②一致性(consistency)   数据库总是从一个一致性的状态转换到另外一个一致性的状态。    ③隔离性(isolation)   一个事务所做的修改在最终提交以前,对其他事务是不可见的。也就是说多个并发事务之间要相互隔离。    ④持久性(durability)   一旦事务提交,则其所做的修改就会永久的保存在数据库中,接下来即使数据库系统崩溃了,修改的数据也不会丢失   1.3 事务的隔离级别   ①读未提交(READ UNCOMMITTED)   事务中的修改,即使没有提交,对其他事务也是可见的,也就是说事务可以读取到未提交的数据,这也被称为脏读。    ② 读已提交(READ COMMITTED)   一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的,这个级别有时候也叫不可重复读,因为两次执行同样的查询,可能会得到不一样的结果。    ③可重复读(REPEATABLE READ)  

MySQL 视图、事务

百般思念 提交于 2019-12-01 05:40:52
一、 视图:   视图(view)是保存了查询语句的一种数据库对象,其数据来源是查询语句对应的数据表,他的结果与数据表查询的结果一样也是一张虚拟的数据表   1、 为什么需要视图:     1) 不同的用户关心的数据可能是不相同的,每个用户可以将关心的数据的查询语句定义为视图,方便以后使用     2) 针对一些不能被所有用户访问的数据可以通过创建视图只公开不需要保密的数据,提高数据的安全性     3) 针对复杂的查询,可以将它保存为视图,以后可以简化查询的操作   2、 视图的创建:     语法:     CREATE VIEW<视图名称>AS<查询语句>     举例:     CREATE VIEW vw_score AS SELECT id 编号,student_no 学生编号,subject_id 课程编号,exam_date 考试日期 FROM tb_score;   3、 视图的使用:查询视图与查询数据表的操作完全相同SELECT * FROM vw_score WHERE 课程编号=2; -- 课程编号为2的成绩 二、 事务:   1、 什么是事务?     当在执行一些重要的增删改时,往往需要将他们当作一个整体来看待,要么全部执行,要么全部不执行,当所有操作都正常结束后可以通过commit语句提交,当其中的全部或部分操作失败后,可以通过rollback语句回滚

Mysql-事务 笔记

限于喜欢 提交于 2019-12-01 05:39:30
原文地址:http://www.zsythink.net/archives/1204      http://www.zsythink.net/archives/1216      http://www.zsythink.net/archives/1233 原文讲的很详细,以下为个人理解笔记。 概述 事务的ACID四大特性 A:atomicity 原子性 整个事务中的所有操作要么全部执行成功,要么全部执行失败后回滚到最初状态 B:consistency 一致性 数据库中式从一个一致性状态转为另一个一致性状态 C:isolation 隔离性 一个事务在提交前所做的操作是否能为其他事务课件,由于不同的场景需求不同,所以针对隔离性来说,有不同的隔离级别 D:durability 持久性 事务一旦提交,事务所做出的修改将会永久保存,此时即使数据库崩溃,修改的数据也不会丢失, 事务日志可分为redo log 和undo log 1、redo log : mysql会将事务中的sql语句涉及到的所有数据操作先记录到redo log中,然后再将操作从redo log中同步到对应的数据文件中。例如修改50条数据,现将此操作记录到redo log中,然后再从redo log中一条一条同步到数据文件对应的记录中,即使出现打断比如停电,那么依靠redo

MySQL手册

☆樱花仙子☆ 提交于 2019-12-01 04:56:52
/* 启动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 库名 选项信息 – 删除库 drop database[ if