数据库事务

Temporary Tables临时表

≡放荡痞女 提交于 2020-02-26 16:30:58
1简介 ORACLE数据库除了可以保存永久表外,还可以建立临时表temporary tables。这些临时表用来保存一个会话SESSION的数据, 或者保存在一个事务中需要的数据。当会话退出或者用户提交commit和回滚rollback事务的时候,临时表的数据自动清空, 但是临时表的结构以及元数据还存储在用户的数据字典中。 临时表只在oracle8i以及以上产品中支持。 2详细介绍 Oracle临时表分为 会话级临时表和事务级临时表。 会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。 事务级临时表是指临时表中的数据只在事务生命周期中存在。当一个事务结束(commit or rollback),Oracle自动清除临时表中数据。 临时表中的数据只对当前Session有效,每个Session都有自己的临时数据,并且不能访问其它Session的临时表中的数据。因此, 临时表不需要DML锁.当一个会话结束(用户正常退出 用户不正常退出 ORACLE实例崩溃)或者一个事务结束的时候,Oracle对这个会话的表执行 TRUNCATE 语句清空临时表数据.但不会清空其它会话临时表中的数据. 你可以索引临时表和在临时表基础上建立视图.同样,建立在临时表上的索引也是临时的,也是只对当前会话或者事务有效. 临时表可以拥有触发器.

Python连接MySQL数据库之pymysql模块使用

妖精的绣舞 提交于 2020-02-26 06:06:10
PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。 Django中也可以使用PyMySQL连接MySQL数据库。 PyMySQL安装 pip install pymysql 连接数据库 注意事项 在进行本文以下内容之前需要注意: 你有一个MySQL数据库,并且已经启动。 你有可以连接该数据库的用户名和密码 你有一个有权限操作的database 基本使用 # 导入pymysql模块 import pymysql # 连接database conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”) # 得到一个可以执行SQL语句的光标对象 cursor = conn.cursor() # 定义要执行的SQL语句 sql = """ CREATE TABLE USER1 ( id INT auto_increment PRIMARY KEY , name CHAR(10) NOT NULL UNIQUE, age TINYINT NOT NULL )ENGINE=innodb DEFAULT CHARSET=utf8; """ # 执行SQL语句 cursor

事务的隔离级相关问题

给你一囗甜甜゛ 提交于 2020-02-26 05:13:52
1.什么是事务 事务指的是逻辑上的一组操作,要么成功,要么都不成功,例如转账! 2.事务有哪些特性? A,原子性,指的是事务不可分割,要么全部成功,要么全部不成功 C,一致性,指的是发生前后数据保持一致,例如转账前后总体的钱数不能变化 I,隔离性,在并发访问数据库时候,一个事务的操作不能被另一组事务干扰 D,持久性,事务一旦提交,对数据库改变是持久的,即使数据库发生故障也不对其有任何影响 3.并发事务带来的问题 脏读:一个事务读取到了另一个操作数据库但是未提交的事务 不可重复读:A事务多次读取数据库,因为B事务修改了数据库,导致A事务前后两次读取到的数据不一致 幻读:A事务多次读取数据库,因为B事务插入了一些数据,导致A事务前后两次读取到的数据不一致 4.不可重复读与幻读的区别 不可重复读在于B事务对于数据库的修改,重点是修改 幻读在于B事务对于数据库的增删,重点是增删 5.事务的隔离级别 1)READ-UNCOMMITTED (读取未提交),最低隔离级别 2)READ-COMMITTED (读取已提交),可阻止脏读,可能发生不可重复读或者幻读 3)REPEATABLE-READ(可重复读),对统同一字段多次读取内容一致,可以避免发生脏读,不可重复读,可能发生幻读 4)SERIALIZABLE(可串行化),最高的隔离级别 来源: oschina 链接: https://my

查看MySQL最近的事务执行信息

痴心易碎 提交于 2020-02-26 04:48:58
课题:查看MySQL最近的事务执行信息 * 虽然我们可以通过查询慢查询日志查询到一条语句的执行总时长,但是如果数据库中存在一些大事务在执行过程中回滚了,,或者在执行过程中异常终止了,这个时候慢查询日志中是不会记录的,这时需要借助 performance_schema的 events transactions— 的表来查看与事务相关的记录,在这些表中详细记录了是否有事务被回滚,活跃(长时间未提交的事务也属于活跃事务)活已提交等信息。** 下面模拟几种事务情况,并查看事务事件记录表: 事务事件,默认是没启用的,首先需要进行配置启用 root@localhost [performance_schema]>select * from setup_instruments where name like 'transaction'; +-------------+---------+-------+ | NAME | ENABLED | TIMED | +-------------+---------+-------+ | transaction | NO | NO | +-------------+---------+-------+ 1 row in set (0.00 sec) root@localhost [performance_schema]>select * from setup

还没弄懂分布式场景下数据一致性问题?一文教你轻松解决!

一世执手 提交于 2020-02-26 03:23:33
文章纲要 此次分享的缘由 目前分布式事务问题是怎么解决的 行业中有什么解决方案 这些解决方案分别有什么优缺点 别人是怎么做的 我们可以怎么来做 此次分享的缘由 支付重构 考虑支付重构的时候,自然想到原本属于一个本地事务中的处理,现在要跨应用了要怎么处理。拿充值订单举个栗子吧,假设:原本订单模块和账户模块是放在一起的,现在需要做服务拆分,拆分成订单服务,账户服务。原本收到充值回调后,可以将修改订单状态和增加金币放在一个mysql事务中完成的,但是呢,因为服务拆分了,就面临着需要协调2个服务才能完成这个事务 所以就带出来,我们今天要分享和讨论的话题是: 怎么解决分布式场景下数据一致性问题,暂且用分布式事务来定义吧。 同样的问题还存在于其他的场景: 送礼: 调用支付服务:先扣送礼用户的金币,然后给主播加相应的荔枝,确认第一步成功后,播放特效,发聊天室送礼评论等复制代码 充值成功消息: 完成充值订单,发送订单完成的kafka消息,在涉及支付交易等付费接口的时候,数据一致性的问题就显得尤为重要,因为都是钱啊 目前分布式事务是怎么解决的呢? 问题肯定不是新问题,也就是目前已经有相应的解决方案了,那就看一下现在是怎么来解决这类问题的吧。 以购买基础商品成功后发送支付订单完成消息为例:假设支付下单购买基础商品,此刻已经收到支付回调,订单已经处理成功了,这个时候kafka服务故障,消息发送失败

面试官:分布式事务了解吗?你们是如何解决分布式事务问题的?

▼魔方 西西 提交于 2020-02-26 03:05:33
面试官心理分析 只要聊到你做了分布式系统,必问分布式事务,你对分布式事务一无所知的话,确实会很坑,你起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。 现在面试,分布式系统成了标配,而分布式系统带来的分布式事务也成了标配了。因为你做系统肯定要用事务吧,如果是分布式系统,肯定要用分布式事务吧。先不说你搞过没有,起码你得明白有哪几种方案,每种方案可能有啥坑?比如 TCC 方案的网络问题、XA 方案的一致性问题。 面试题剖析 分布式事务的实现主要有以下 5 种方案: XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案 两阶段提交方案/XA方案 所谓的 XA 方案,即:两阶段提交,有一个事务管理器的概念,负责协调多个数据库(资源管理器)的事务,事务管理器先问问各个数据库你准备好了吗?如果每个数据库都回复 ok,那么就正式提交事务,在各个数据库上执行操作;如果任何其中一个数据库回答不 ok,那么就回滚事务。 这种分布式事务方案,比较适合单块应用里,跨多个库的分布式事务,而且因为严重依赖于数据库层面来搞定复杂的事务,效率很低,绝对不适合高并发的场景。如果要玩儿,那么基于 Spring + JTA 就可以搞定,自己随便搜个 demo 看看就知道了。 这个方案,我们很少用,一般来说某个系统内部如果出现跨多个库的这么一个操作,是不合规的。我可以给大家介绍一下,

程序员悲催瞬间:来之不易的美团面试,竟然挂了(还原真实场景)

老子叫甜甜 提交于 2020-02-26 02:36:39
一面 1、自我介绍 答:自我介绍是面试中唯一的自己主动介绍自己的环节,一定要好好把握好,你数据结构学的号可以手撕一个红黑树你就说我数据结构掌握地很好,反正就是要把自己的优势凸显出来,比如自己对于java的知识较熟悉,我介绍完自己的本科经历以后,我就说我是保送到本校继续读研究生,然后最末尾会加上自己熟悉java,然后面试官就会问java的一些东西; 2、项目介绍及其亮点 答:使劲吹... 3、java的8种数据类型有哪些? 答:感觉这个问题被问烂了,int,short,long,float,double,byte,boolean,char; 4、问了Integer缓存数据的范围? 答:-128-127 5、紧接着问了Object类有哪些方法? 答:这个我有背过,clone,getClass,toString,finalize,equals,hashCode,wait,notify,notifyALL。(不懂面试这个什么意思) 6、问到这里然后拿出了一个题,面试官有小纸条,题目在上面,String A = "123"; String B = new String("123");,问我生成了几个String对象? 答:我说如果常量池中,原来没有“123”那么就是生成了2个对象,如果常量池中有“123”那么只要1个对象生成(面试官别问这种问题了) 7、由于提到了wait

怎么找115资源

余生颓废 提交于 2020-02-26 02:06:15
【T55B66】【十伟】【永久保存】 Redis 知识点整理 JavaTimo Chat 作者 一个节操泛滥,一身凛然正气,刚正不阿的Java程序员 附上了高清知识图谱 当前内容版权归码字科技所有并授权显示,盗版必究。 文章正文 1、什么是 Redis?. 2、Redis 的数据类型? 3、使用 Redis 有哪些好处? 4、Redis 相比 Memcached 有哪些优势? 5、Memcache 与 Redis 的区别都有哪些? 6、Redis 是单进程单线程的? 7、一个字符串类型的值能存储最大容量是多少? 8、Redis 的持久化机制是什么?各自的优缺点? 9、Redis 常见性能问题和解决方案: 10、redis 过期键的删除策略? 11、Redis 的回收策略(淘汰策略)? 12、为什么 edis 需要把所有数据放到内存中? 13、Redis 的同步机制了解么? 14、Pipeline 有什么好处,为什么要用 pipeline? 15、是否使用过 Redis 集群,集群的原理是什么? 16、Redis 集群方案什么情况下会导致整个集群不可用? 17、Redis 支持的 Java 客户端都有哪些?官方推荐用哪个? 18、Jedis 与 Redisson 对比有什么优缺点? 19、Redis 如何设置密码及验证密码? 20、说说 Redis 哈希槽的概念? 21、Redis

一文解析数据库系统并发控制原理

那年仲夏 提交于 2020-02-26 01:28:02
数据库访问是通过事务完成的,首先我们搞清楚什么是事务? 被视为整体的一组工作 这组工作要么完全完成,要么全部不完成,不存在部分完成情况 真实生活中以转账说明事务: 第一步,从账户A中减去X元金额; 第二步,将X元金额存入账户B 这些多步操作必须全部完整完成,不能半途而废。数据库事务的工作方式与此相同。他们能保证,无论发生什么事情,数据的操作处理都被看成是原子的(你永远不会看到“转变一半”的情况)。 原子性是DBMS维护ACID属性的一部分,ACID包括: Atomicity原子性 : 事务中所有操作要么全部发生,要么全部不。 Consistency一致性 : 数据库从一致状态开始到一致状态结束。 Isolation隔离性 : 一个事务的执行是隔离于其他事务的。 Durability :如果事务已经确认提交,其效果是持久保存在数据库中。 那么在并发访问数据库的情况下会发生什么问题?并发流程可能会改变隔离性和一致性这两个属性。让我们假设两个用户预订了一架飞机的同一个座位: 客户1 发现一个空座位 客户2 发现同样的空座位 客户1预订了这个座位 客户2也同时预订了这个座位 我们将事务的顺序执行称为 schedule 调度,它表示基于时间先后的一系列事务执行,在这里客户1和客户2分别存在两个事务,这个两个事务同时发生,我们需要通过串行化 serializability 来保证事务正确执行

MySQL伪事务和性能

时光总嘲笑我的痴心妄想 提交于 2020-02-26 01:26:26
用表锁定代替事务 在MySQL 的MyISAM类型数据表中,并不支持COMMIT(提交)和ROLLBACK(回滚)命令。当用户对数据库执行插入、删除、更新等操作时,这些变化的数据都被立刻保存在磁盘中。这样,在多用户环境中,会导致诸多问题,为了避免同一时间有多个用户对数据库中指定表进行操作。可以应用表锁定来避免在用户操作数据表过程中受到干扰。当且仅当该用户释放表的操作锁定后,其他用户才可以访问这些修改后的数据表。 应用表锁实现伪事务 实现伪事务的一般步骤如下: 对数据库中的数据表进行锁定操作,可以对多个表做不同的方式锁定 执行数据库操作,向锁定的数据表中执行添加、删除、修改操等操作 释放锁定的数据表,以便让正在队列中等待查看或操作的其他用户可以浏览数据表中的数据或对操作表执行各种数据的操作。 事务和性能 应用不同孤立级的事务可能会对系统造成一系列影响,采用不同孤立级处理事务,可能会对系统稳定性和安全性等诸多因素造成影响。另外,有些数据库操作中,不需要应用事务处理,则用户在选择数据表类型时,需要选择合适的数据表类型。所以,在选择表类型时,应该考虑数据表具有完善的功能,且高效的执行前提下,也不会对系统增加额外的负担。 应用小事务 应用小事务的意义在于:保证每个事务不会在执行前等待很长时间,从而避免各个事务因为互相等待而导致系统的性能大幅度下降。 选择合适的孤立级