mysql事务

分布式领域CAP理论-学习整理

我与影子孤独终老i 提交于 2019-11-30 16:45:34
分布式领域CAP理论: Consistency(一致性), 数据一致更新,所有数据变动都是同步的。 Availability(可用性), 好的响应性能。 Partition tolerance(分区容错性) 可靠性。 要做到 CP, 系统可以把这个数据只放在一个节点上,其他节点收到请求后向这个节点读或写数据,并返回结果。 要做到 CA, 一个现实的例子就是单点的数据库。 要做到 AP, 系统只要每次对写都返回成功,对读都返回固定的某个值就可以了。 CAP 理论更重要的一个结果是, 在 Partial Synchronous System (半同步系统) 中,一个弱化的 CAP 是能达到的: * 对所有的数据访问,总返回一个结果 * 如果期间没有报文丢失,那么返回一个满足 consistency 要求的结果。 很像mysql的半同步复制技术。 关系数据库的ACID模型拥有:即事物的acid属性。 Atomicity原子性:一个事务中所有操作都必须全部完成,要么全部不完成。 Consistency一致性. 在事务开始或结束时,数据库应该在一致状态。 Isolation隔离层. 事务将假定只有它自己在操作数据库,彼此不知晓。 Durability. 一旦事务完成,就不能返回。 来源: oschina 链接: https://my.oschina.net/u/2460176/blog

InnoDB多版本并发控制——MVCC

ε祈祈猫儿з 提交于 2019-11-30 16:44:57
Multi-Version Concurrency Control -多版本并发控制 MySQL的大多数事务存储引擎实现的都不是简单的行级锁。基于提升并发性能的考虑,它们一般都同时实现了多版本并发控制(MVCC)。MVCC没有统一的实现标准。可以认为MVCC是行级锁的一个变种,它在很多情况下避免了加锁操作,开销更低。Oracle,PostgreSQL都实现了MVCC,实现了非阻塞的读操作,写操作也只锁定必要的行。 MVCC的实现,是通过保存数据在某个时间点的快照来实现的。也就是说,不管执行多长时间,每个事物看到的数据都是一致的。根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。 不同存储引擎的MVCC实现是不同的。典型的有乐观并发控制和悲观并发控制。 乐观并发控制 悲观并发控制 详见: http://my.oschina.net/xinxingegeya/blog/505675 ======END====== 来源: oschina 链接: https://my.oschina.net/u/1469576/blog/208821

jbpm4.3 数据库使用MySql异常 could not delete

我只是一个虾纸丫 提交于 2019-11-30 16:43:50
解决方案:修改属性:jbpm.hibernate.cfg.xml <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property> InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)、多版本并发控制(multi-versioned concurrency control)的事务安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行级锁(locking on row level),提供与 Oracle 类似的不加锁读取(non-locking read in SELECTs)。InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读。另外InnoDB是为处理巨大数据量时的最大性能设计。它的CPU效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的。MySQLInnoDBDialect基于上也就有InnoDB相同的功能. 来源:

mysql 事务

梦想与她 提交于 2019-11-30 15:01:46
事务 # 事务:通常一些业务需要多条sql参与,参与的sql会形参一个执行整体,该整体我们就称之为 事务 # 简而言之:事务 - 就是保护多条执行的sql语句 # 比如:转账就是一个事务:从一个用户将资金转出,再将资金转入到另一个用户 """ 事务的四大特性 1.原子性:事务是一组不可分割的单位,数据库的完整性:如果数据库在某一时间点下,所有的数据都符合所有的约束,则称数据库为完整性的状态要么同时成功,要么同时不成功, 相当于and语句,前后语句都要成功 2.一致性:事物前后的数据完整性应该保持一致,执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态 3.隔离性:事物的隔离性是指多个用户并发访问数据时,一个用户的事物不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离 4.持久性:持久性是指一个事物一旦被提交,它对数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响 """ # mysql中事务的执行 create table bank( id int, name varchar(16), money decimal(65, 2) ); insert into bank values(1, 'Tom', 10), (2, "Bob", 10); # 假设出现以下执行情况 # 步骤为 两个事务处理 一方更改完 数据 # 没有事务支持情况下

MysqL主从复制_模式之GTID复制

不问归期 提交于 2019-11-30 14:45:28
介绍: 基于GTID的复制是从Mysql5.6开始支持的一种新的复制方式,此方式与传统基于日志的方式存在很大的差异,在原来的基于日志的复制中,从服务器连接到主服务器并告诉主服务器要从哪个二进制日志的偏移量开始执行增量同步,这时我们如果指定的日志偏移量不对,这与可能造成主从数据的不一致,而基于GTID的复制会避免。 在基于GTID的复制中,首先从服务器会告诉主服务器已经在从服务器执行完了哪些事务的GTID值,然后主库会有把所有没有在从库上执行的事务,发送到从库上进行执行,并且使用GTID的复制可以保证同一个事务只在指定的从库上执行一次,这样可以避免由于偏移量的问题造成数据不一致。 什么是GTID,也就是全局事务ID,其保证为每一个在主上提交的事务在复制集群中可以生成一个唯一的ID。 一个GITD由两部分组成的,分别是source_id 和transaction_id,GTID=source_id:transaction_id,其中source_id就是执行事务的主库的server-uuid值,server-uuid值是在mysql服务首次启动生成的,保存在数据库的数据目录中,在数据目录中有一个auto.conf文件,这个文件保存了server-uuid值(唯一的)。而事务ID则是从1开始自增的序列,表示这个事务是在主库上执行的第几个事务

2019.9.26学习内容及小结

孤街浪徒 提交于 2019-11-30 14:28:58
复习 ''' 1.单表查询 增删改查的完整语法 select distinct 字段 from 表 where group by having order by limit 比较: > < = 区间: between and | in | not in 逻辑: and or not 相似: like _% (一个 _ 代表 一个任意字符, % 代表不限制数量任意字符) 正则: regexp '.*[0-9]' 表示包含数字[0-9],用 not regexp '.*[0-9]' 就是不包含数字 聚合函数: group_concat()、max()、min()等;注:group_concat就是将字段合在一起,用于group by的拼接,用法和直接concat是一样的 也可以用于直接加上某条字段:group_concat(name) 名字, 来用于group by 后面没有字段的情况 having: 可以对 聚合函数 结果进行筛选,不能使用 聚合函数 别名 order by: 分组后对 聚合函数 进行排序,能使用 聚合函数 别名 limit: 条数 | 偏移量,条数 如limit(5,3), 过滤掉前五条数据,取出之后三条数据 2. 多表查询 内连接:from emp [inner] join dep on emp.dep_id = dep.id :只保留两表有对应关系的记录 左连接

关系型数据库基础总结

爷,独闯天下 提交于 2019-11-30 14:23:13
关系型数据库架构 整体思维架构 架构 如何设计一个关系型数据库 1、需要一个文件存储系统(RDBMS) 2、需要一个程序实例(对存储系统进行逻辑管理) 包括:存储管理、缓存机制、SQL解析、日志管理、权限划分、容灾机制、索引管理、锁管理 索 引 为什么要使用索引 快速查询数据 什么样的信息能成为索引 主键、唯一键以及普通键等 索引的数据结构 1、生成索引,建立二叉查找树进行二分查找 2、生成索引,建立B-Tree结构进行查找 3、生成索引,建立B+-Tree结构进行查找 4、生成索引,建立Hash结构进行查找 B-Tree定义: 1、根节点至少包括两个孩子 2、树种每个节点最多含有m个孩子(m>=2) 3、除根节点和叶节点外,其他每个节点至少有ceil(m/2)(取上限)个孩子 4、所有叶子节点都位于同一层 5、 B+-树的定义 1、非叶子节点的子树指针与关键字个数相同 2、非叶子节点的子树P[i],指向关键字值[K[i],K[i+1]]的子树 3、非叶子节点仅用来索引,数据都保存在子节点中 4、所有叶子节点均 有一个链指针指向下一个叶子节点 hash索引的缺点: 1、仅仅能满足 “=”,“in”,不能使用范围查询 2、无法被用来避免数据的排序操作 3、不能利用部分索引键查询 4、不能避免表扫描 5、遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高

08.Django基础六之ORM中的锁和事务

烈酒焚心 提交于 2019-11-30 14:22:18
一 锁    行级锁     select_for_update(nowait=False, skip_locked=False) #注意必须用在事务里面,至于如何开启事务,我们看下面的事务一节。     返回一个锁住行直到事务结束的查询集,如果数据库支持,它将生成一个 SELECT ... FOR UPDATE 语句。     举个例子: entries = Entry.objects.select_for_update().filter(author=request.user) #加互斥锁,由于mysql在查询时自动加的是共享锁,所以我们可以手动加上互斥锁。create、update、delete操作时,mysql自动加行级互斥锁     所有匹配的行将被锁定,直到事务结束。这意味着可以通过锁防止数据被其它事务修改。     一般情况下如果其他事务锁定了相关行,那么本查询将被阻塞,直到锁被释放。 如果这不想要使查询阻塞的话,使用select_for_update(nowait=True)。 如果其它事务持有冲突的锁,互斥锁, 那么查询将引发 DatabaseError 异常。你也可以使用select_for_update(skip_locked=True)忽略锁定的行。 nowait和  skip_locked是互斥的,同时设置会导致ValueError。     目前

第一阶段:Python开发基础 day45 数据库基础知识之子查询视图的相关操作事务和游标等

房东的猫 提交于 2019-11-30 13:36:29
目录 复习 案例 联合分组 子查询 all与any:区间修饰条件 视图:view 视图的增删改 事务 pymysql:python操作mysql 游标操作 pymysql事务 sql注入 索引 复习 """ 1、单表查询 增删改查的完整语法 select distinct 字段 from 表 where group by having order by limit 比较:> < = 区间:between and | in | not in 逻辑: and or not 相似:like _% 正则:regexp 聚合函数:group_concat()、max() having:可以对 聚合函数 结果进行筛选,不能使用 聚合函数 别名 order by:分组后对 聚合函数 进行排序,能使用 聚合函数 别名 limit:条数 | 偏移,条数 2、多表查询 内连接:from emp inner join dep on emp.dep_id = dep.id 只保存两表有对应关系的记录 左连接:from emp left join dep on emp.dep_id = dep.id 左表记录全部保存,右边没有对应记录空填充 右连接:from emp right join dep on emp.dep_id = dep.id 右表记录全部保存,左边没有对应记录空填充 全连接: from

子查询/联合分组/all与any/视图/事务

青春壹個敷衍的年華 提交于 2019-11-30 13:36:01
子查询 将一条查询sql的结果作为另一条sql的条件 使用方法总结: # 增:insert into 表 select子查询 # 删:delete from 表 条件是select子查询(表不能与delete表相同) # 查:select 字段 from 表 条件是select子查询 # 改:update 表 set 字段=值 条件是select子查询(表不能与update表相同) 联合分组: 按多个字段综合结果进行分组 使用方法总结: # 按 area与port组合后的结果进行分组,只有组合后的结果还一致,才认为是一组 select group_concat(name),area,port from emp group by area,port; 区间修饰条件(all与any): 使用方法总结: # 语法规则 # where id in (1, 2, 3) => id是1或2或3 # where id not in (1, 2, 3) => id不是1,2,3 # where salary < all(3, 6, 9) => salary必须小于所有情况(小于最小) # where salary > all(3, 6, 9) => salary必须大于所有情况(大于最大) # where salary < any(3, 6, 9) => salary只要小于一种情况(小于最大)