mysql事务

MySQL锁

夙愿已清 提交于 2019-12-02 13:04:25
MySQL锁 三类锁 全局锁 表级锁 行锁 全局锁 全局锁就是对整个数据库加锁 Flush tables with lock(FTWRL)全局读锁 使用场景,给全库做逻辑备份 如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆; 如果你在从库上备份,那么备份期间从库不能执行主库同步过来的 binlog,会导致主从延迟。 全局读锁期间只能读,不能更新是个问题 mysqldump工具 官方自带的逻辑备份工具是 mysqldump。当 mysqldump 使用参数–single-transaction 的时候,导数据之前就会启动一个事务,来确保拿到一致性视图。而由于 MVCC 的支持,这个过程中数据是可以正常更新的。 你一定在疑惑,有了这个功能,为什么还需要 FTWRL 呢?一致性读是好,但前提是引擎要支持这个隔离级别。比如,对于 MyISAM 这种不支持事务的引擎,如果备份过程中有更新,总是只能取到最新的数据,那么就破坏了备份的一致性。这时,我们就需要使用 FTWRL 命令了。所以,single-transaction 方法只适用于所有的表使用事务引擎的库。 如果有的表使用了不支持事务的引擎,那么备份就只能通过 FTWRL 方法。这往往是 DBA 要求业务开发人员使用 InnoDB 替代 MyISAM 的原因之一。 表级锁 MySQL 里面表级别的锁有两种:一种是表锁

MySQL数据库-简单概念和数据库操作

非 Y 不嫁゛ 提交于 2019-12-02 11:45:22
数据库 什么是数据库:存储数据的仓库,按照一定的数据结构来组织,管理存储数据,还提供了增删改查的功能。 事务 什么是事务: 将一组有序的增删改操作,当做一个独立的执行单元,如果操作都成功,那么事务就执行成功,如果有一个操作执行失败,真个事务都失败,事务将会执行回滚,恢复到事务开始之前的状态。 事物的四大特性 原子性:将事务看做最小的执行单元,不可分割,要么都成功,要么都失败。 一致性:事务在执行前和执行后的状态都保持一致。 隔离性:当多用户并发访问数据库时,数据库会给每个用户开启一个事务,每个事务之间相互隔离,互补影响。 持久性:事务一旦执行成功,数据的变化将会永久性的作用于真个数据库,就算数据库出现故障也不会影响数据。 在不考虑隔离性的情况下会出现的问题 脏读:当一个未提交的事务,使用了另一个未提交事务的数据 不可重复度:A事务重复读取一条数据,在这期间B事务修改了这条数据,导致A事务两次读取的数据不一样 幻读:A事务读取一张表所有数据,并做了统计计算,B事务修改了这张表的某一条数据,导致A事务的结构和实际情况出现偏差,类似出现幻觉。 四种隔离级别 read uncommit 读未提交:最低的隔离级别,会出现以上三个问题的任意一种情况 read commit 读已提交:可以避免脏读 repeatable read 可重复读:可以避免脏读和不可重复读 serializable

MySQL基本用法

杀马特。学长 韩版系。学妹 提交于 2019-12-02 11:38:18
以下内容的一些总结 create,alter,drop,show, 用于 表/数据库 DDL CRUD后都要加database/databases/table/tables select database(); -DOS窗口中查询当前正在使用的数据库,使用用use。 表中数据的增加用insert into,修改update,删除delete这两个一般加上限定条件WHERE DQL中NULL不能用“==” 等运算符判读,需要使用IS/IS NOT where与hanving限定的区别,在分组查询中,where限定是在分组之前,不满足条件不参与分组,having限定是在分组之后,不满足条件不会被查询出来。 where 后不能进行聚合函数的判断,having可以 修改表,进行数据项约束: alter table 表名 modify 列名 数据类型 NOT NULL; mysql中,唯一约束限定的列的值可以有多个null 删除特例 删除主键约束:ALTER TABLE stu DROP PRIMARY KEY; 删除唯一约束:ALTER TABLE stu DROP INDEX 列名; MySQL数据库软件安装与卸载 卸载 去mysql的安装目录找到my.ini文件 复制 datadir="C:/ProgramData/MySQL/MySQL Server 5.5/Data/"

视图、事务、索引,触发器,流程控制。

这一生的挚爱 提交于 2019-12-02 11:31:59
视图、事务、索引,触发器,流程控制。 视图:view 视图与真实表共享数据,视图和真实表的数据会相互映射, 视图的表结构只要存在真实表的数据只要存在,视图就可以使用。 数据依赖:单表emp 1)视图是存在内存中的临时表 2)视图的创建依赖select语句,所有就是select语句操作的结果形参的表 3)视图支持对数据的增删查改 ? 4)视图不允许对视图表的字段做修改 5)视图不仅支持创建,也支持更新与删除 语法:创建视图 mysql>: create view 视图名[(别名们)] as select 语句; eg>: create view v1 as select dep, max(salary) from emp group by dep; # 创建或替换视图 mysql>: create or replace 视图名[(别名们)] as select 语句; mysql>: alter 视图名[(别名们)] as select 语句; eg>: create or replace view v1(dep_name, max_salary) as select dep, max(salary) from emp group by dep; eg>: alter view v1(name, salary) as select dep, max(salary) from emp

Go语言操作MySQL

空扰寡人 提交于 2019-12-02 10:55:36
Go语言操作MySQL Go操作MySQL 连接 Go语言中的 database/sql 包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动。使用 database/sql 包时必须注入(至少)一个数据库驱动。 我们常用的数据库基本上都有完整的第三方实现。例如: MySQL驱动 下载依赖 go get -u github.com/go-sql-driver/mysql 使用MySQL驱动 func Open(driverName, dataSourceName string) (*DB, error) Open打开一个dirverName指定的数据库,dataSourceName指定数据源,一般包至少括数据库文件名和(可能的)连接信息。 import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) func main() { // DSN:Data Source Name dsn := "user:password@tcp(127.0.0.1:3306)/dbname" db, err := sql.Open("mysql", dsn) if err != nil { panic(err) } defer db.Close() } 初始化连接 Open函数可能只是验证其参数,而不创建与数据库的连接

转载:全球级分布式数据库Google Spanner

强颜欢笑 提交于 2019-12-02 10:54:07
一.Spanner功能概要 Spanner具有 高扩展性 , 多版本 (multi-version)、 世界级分布 (globally-distributed)及 同步复制 (synchronously-replicated)等特性。 Spanner立足于高抽象层次,使用Paxos协议横跨多个数据集把数据分散到世界上不同数据中心的状态机中。世界范围内响应,出故障时客户副本之间的自动切换。当数据总量或服务器的数量发生改变时,为了平衡负载和处理故障,Spanner自动完成数据的重切片和跨机器(甚至跨数据中心)的数据迁移。 Spanner可以轻松的横跨数百个数据中心将万亿级数据库行扩展到数百万台机器中。高可靠性更是让应用程序如虎添翼,即使面对大范围的自然灾害,可靠性仍然能得到良好的保障(因为Spanner有着世界级的数据转移)。最初的用户来自F1 — 使用了美国境内的5个拷贝。多数其他应用程序都是在同一个地理区域将数据复制3到5份,使用相对独立的故障模式。也就是说多数的应用程序会选择低延迟超过高有效性,只用一两个数据中心来保障数据的可靠性。 Spanner的 主旨是数据中心的管理 ,但是在分布系统基础设施的特色上同样是下足了功夫。尽管Bigtable很讨一些项目欢心,我们还是收到了一些Bigtable在某些应用程序(复杂的、不断变化的架构或者需要在大区域响应中保持强一致性

MySQL 性能优化总结

本小妞迷上赌 提交于 2019-12-02 10:53:54
一、影响mysql的性能因素 io: 磁盘IO、随机IO、网络IO 扫描行数 内存、临时表、key cache、query cache cpu:排序、分组查询、distinct查询 事务导致的表锁等 一条慢sql查询消耗的性能 > 1000条快查询消耗的性能。性能优化归根结底就是查询语句的优化,如何写出高效的查询语句呢? 对mysql的索引结构要有一定深度的了解,才能更好的写出高效的查询语句。 二、b+ tree结构索引的特点 b+tree 适应于全键值、键值范围或左前缀匹配查找 支持order by排序 b+ tree 索引不支持跳过索引中的列查找 三、hash结构索引特点 hash索引是基于hash表实现。 全值匹配、只有全键值精确匹配才可以查到,也就是说只有等值比较,如:=、in 不支持范围、部分匹配查找 不支持排序 当hash冲突较多的话,索引维护代价较高,查询性能也会受到影响。 四、聚簇索引的select,没有union和子查询 MySQL innodb存储引擎是基于聚簇索引构建而来,一般是基于主键id构建的b+tree索引和数据行而来, 如果表不存在主键,那么mysql会自动选择其他的非空的索引字段;如果非空索引字段不存在,而mysql内部会自动生成内部的唯一标识作为主键构建聚簇索引。 插入速度严重依赖于插入顺序。当主键不是数值自增长类型,而是varchar类型

什么是事务?事务的四个特性以及事务的隔离级别

一笑奈何 提交于 2019-12-02 09:38:07
转自: https://www.cnblogs.com/Kevin-ZhangCG/p/9038371.html 什么是事务?事务的四个特性以及事务的隔离级别 什么是事务   事务是指是程序中一系列严密的逻辑操作,而且所有操作必须全部成功完成,否则在每个操作中所作的所有更改都会被撤消。可以通俗理解为:就是把多件事情当做一件事情来处理,好比大家同在一条船上,要活一起活,要完一起完 。 事物的四个特性(ACID)    ● 原子性 (Atomicity) : 操作这些指令时,要么全部执行成功,要么全部不执行。只要其中一个指令执行失败,所有的指令都执行失败,数据进行回滚,回到执行指令前的数据状态。 eg: 拿转账来说,假设用户A和用户B两者的钱加起来一共是20000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是20000,这就是事务的一致性。    ● 一致性 (Consistency) : 事务的执行使数据从一个状态转换为另一个状态,但是对于整个数据的完整性保持稳定。    ● 隔离性 (Isolation) : 隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。              即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来

事务

橙三吉。 提交于 2019-12-02 09:11:07
所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 事务的标准特性: A.原子性:建立事务后,操作要么全部完成,要么失败回滚。 C.一致性:sql语句正在执行时,在commit(提交)之前,不会因为系统突然挂掉而导致数据出现错误。 两个或多个用户对同一记录的同一字段进行操作,必须先等前边的事务执行完。 I.隔离性:一个sql语句的执行对其他sql语句来说是隔离的 D.持久性:永久性存储 开启事务:begin或者start transaction 提交事务用commit 回滚事务用rollback 想转帐之类的事情要用到事务 mysql客户端默认每一条sql语句都自成事务 pymysql默认开启事务,执行(增删改)必须commit 来源: https://blog.csdn.net/nlrkbqndrhh/article/details/102711713

【MySQL】事务隔离级别及ACID

99封情书 提交于 2019-12-02 08:46:47
注:begin或start transaction并不是一个事务的起点,而是在执行它们之后的第一个操作InnoDB表的语句,事务才真正开始。start transaction with consistent snapshot命令可以马上启动一个事务。 1、隔离级别 1.1、基本概念 读未提交 当前事务能读取到其他事务尚未提交的修改值。 读提交 当前事务能读取到其他事务已经提交的修改值。 可重复读 一个事务在任何时刻查询到的结果跟事务一开始启动时查询的结果一样。 串行化 强行使所有事务串行执行。 1.2、小测试一 理解了隔离级别的基本概念后,我们做个小测试, 看看 是不是真的理解了,下面两个会话按顺序执行,最后在各个隔离级别下的V1、V2值各为多少呢? sessionA sessionB 启动事务 查询得到值1 启动事务 把值1更新成值2 查询得到值V1 提交事务 查询得到值V2 提交事务 查询得到值V3 读未提交 可以读取到其他事务未提交的值,所以V1读取到了sessionB未提交的更改,值为2。 读提交 不能读取到其他事务未提交的值,所以V1的值为1,当查询V2时,sessionB已经提交了,这时读取到的V2为2。 可重复读 查询得到的值为事务启动时的值,所以V1和V2值都为1。 串行化 时,sessionA启动事务后,sessionB会被卡住