数据库事务

Python-常见面试题

杀马特。学长 韩版系。学妹 提交于 2020-03-11 08:59:59
什么是Python Python是一种解释型语言,也就是说,它和C语言以及C的衍生语言不通,Python代码在运行之前不需要编译 Python是一种动态类型语言,指的是,你在声明变量时不需要指定变量的类型 Python让困难的事变的容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节 Python用途非常广泛–网络应用,自动化,科学建模,大数据应用等等,它也常被用作“胶水语言”,用于帮助其他语言和组件改善运行状况 Python支持的数据类型 数字、字符串、元组、字典、列表 下划线的作用 _xxx:表示的是protected类型,即只允许其本身和子类进行访问 __xxx:表示的是private类型 __xxx__:表示的特列方式,如__init__ 如何生成一个不可变集合 使用 frozenset 函数,将一个列表变成一个不可变的集合,如下: s = frozenset([1, 2, 3]) is与== is对比地址,==是对比值 多线程与多进程 对比维度 多进程 多线程 数据共享、同步 数据共享复杂,需要用到IPC;数据是分开的、同步简单 因为共享进程数据,所以共享简单,但也因为这个导致同步复杂 内存、CPU 占用内存多,切换复杂,CPU利用率低 占用内存小,切换简单,CPU利用率高 创建、销毁、切换 创建销毁、切换复杂,速度很慢 创建销毁、切换简单,速度很快 编程

乐观锁与悲观锁

一笑奈何 提交于 2020-03-11 08:25:14
锁 (Lock) 锁是一种保证数据安全的机制和手段,其并不是特定于某项技术的,其主要是通过在并发下控制多个操作的顺序执行,以此来保证数据安全地变动 例如在程序中,当多个线程修改共享变量时,可以给修改操作上锁 (syncronized) ;在数据库中,当多个用户修改表中同一数据时,我们可以给该行数据上锁 悲观锁 (Pessimistic Concurrency Control) 总是假设最坏的情况,每次取数据的时候都认为别人会修改,所以每次取数据都会加锁。这样别人在操作这条数据的时候,如果没有拿到锁,就会发生阻塞,操作就无法执行。 数据库中的行锁,表锁,读锁,写锁等都是悲观锁 乐观锁 (Optimistic Concurrency Control) 总是假设最好的情况,每次取数据的时候都认为别人不会修改数据,所以不对数据加锁。但是会在更新的时候判断一下在此期间别人有没有更新这个数据,判断可以使用版本号机制和 CAS 算法实现。 乐观锁通常是通过在表中增加一个版本 (version) 或时间戳 (timestamp) 来实现,其中版本最为常用. 事务从数据库中取数据时,会将该数据的版本也取出来 (v1) ,当事务对数据变动完毕需要提交至数据库时,会将之前取出的 v1 与数据的最新版本 v2 进行对比 v1 = v2 :说明数据变动期间没有其他事务对该数据进行修改

Spring必备知识点(一)

你离开我真会死。 提交于 2020-03-10 23:48:38
Spring框架的7个模块 组成 Spring框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: 核心容器 : 核心容器提供 Spring框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用 控制反转 (IOC)模式将 应用程序的配置和依赖性规范 与 实际的应用程序代码 分开。 那么我们该如何理解:BeanFactory和FactoryBean 1、 BeanFactory BeanFactory定义了IOC容器的最基本形式,并提供了 IOC 容器应遵守的的最基本的接口,也就是 Spring IOC 所遵守的最底层和最基本的编程规范。在Spring代码中,BeanFactory 只是个接口,并不是 IOC 容器的具体实现,但是 Spring 容器给出了很多种实现,如 DefaultListableBeanFactory 、 XmlBeanFactory 、 ApplicationContext 等,都是附加了某种功能的实现。 2、 FactoryBean 一般情况下,Spring通过反射机制利用<bean>的class属性指定实现类实例化Bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在<bean>中提供大量的配置信息。配置方式的灵活性是受限的

mysql三种备份方式

萝らか妹 提交于 2020-03-10 19:37:14
一、备份的目的 做灾难恢复:对损坏的数据进行恢复和还原 需求改变:因需求改变而需要把数据还原到改变以前 测试:测试新功能是否可用 二、备份需要考虑的问题 可以容忍丢失多长时间的数据; 恢复数据要在多长时间内完; 恢复的时候是否需要持续提供服务; 恢复的对象,是整个库,多个表,还是单个库,单个表。 三、备份的类型 1、根据 是否需要数据库离线 冷备 (cold backup):需要关mysql服务,读写请求均不允许状态下进行; 温备 (warm backup): 服务在线,但仅支持读请求,不允许写请求; 热备 (hot backup):备份的同时,业务不受影响。 注: 1、这种类型的备份,取决于业务的需求,而不是备份工具 2、 MyISAM不支持热备,InnoDB支持热备 ,但是需要专门的工具 2、根据要 备份的数据集合的范围 完全备份:full backup,备份全部字符集。 增量备份: incremental backup 上次完全备份或增量备份以来改变了的数据,不能单独使用,要借助完全备份,备份的频率取决于数据的更新频率。 差异备份:differential backup 上次完全备份以来改变了的数据。 建议的恢复策略: 完全+增量+二进制日志 完全+差异+二进制日志 3、 根据备份数据或文件 物理备份:直接备份数据文件 优点: 备份和恢复操作都比较简单,能够跨mysql的版本

mysql锁和事务

孤街浪徒 提交于 2020-03-10 14:55:07
1,事务具有acid特性 2,事务的隔离级别   事务的隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。MySQL事务包含4个隔离级别(从低到高)   1)read uncommitted(dirty read)也称读未提交。事务可以看到其他事务更改了但没有提交的数据,即存在脏读的情况。   2)read committed 也称读提交。事务可以看到在它执行的时候,其他事务已经提交的数据,已经被大部分数据库采用。允许不可重复读,但不允许脏读。   3)repeatable read 也称可重复读。同一个事务同一个查询请求多次执行,获得记录相同,但不能出现幻读。   4)serializable也称序列化,最高级别,解决了幻读。它将锁加在所有访问的数据上。   该锁把普通的select语句默认改成select 。。。lock in share mode。 即查询语句涉及到的数据加上共享锁,阻塞其他事务修改真实的数据。  如下命令查询当前事务的隔离级别 show variables like ‘%tx%’;  不建议更改innodb的事务隔离级别。一些传统的数据库,如oracle使用了read-commited的隔离级别。但是大部分场景下,MySQL的用户都是由默认的repeatable read,此隔离级别下使用的验证比其他的隔离级别完善的多

MySQL笔记总结

橙三吉。 提交于 2020-03-10 13:12:37
总结一下我之前自己学习MySQL的笔记,仅供参考。 使用命令行调用MySQL一定要注意分号,不然会出现报错。建议自己练习的时候,可以先把代码打到记事本里,再粘贴到命令行中运行,就不容易犯错了。 1.数据库常用操作 1)查询数据库:show databases; 2)创建数据库:create databases 数据库名字; 3)使用某一个数据库:use 数据库名字; 4)显示当前数据库里的数据表: show tables; 5)创建数据表: create table 表名字( 数据类型+字段); 6)显示数据表:describe 数据表名; 7)查看数据表中的记录:select * from 数据表名; 8)向数据表中添加数据记录: insert into 数据表名 values(‘a’,‘b’,‘c’,NULL); 9)从数据表中删除数据记录:delete from 数据表名 where name = ’ ‘; 10)从数据表中修改记录: update 数据表名 set name= ’ 改后的名’ where 所属的类名=‘ 对应的名’; 2.MySQL支持的数据类型有三种:数值,日期/时间,字符串类型 3.MySQL建表约束 1) 主键约束 :能够唯一确定一张表中的一条记录,即通过给某个字段增加约束,可使得该字段不重复且不为空。 create table 数据表名( id

没想到MySQL还会问这些...

我怕爱的太早我们不能终老 提交于 2020-03-10 09:45:27
前言 文本已收录至我的GitHub精选文章,欢迎Star : https://github.com/ZhongFuCheng3y/3y 在前一阵子,大哥问过我:”你知道MySQL的原子性是怎么保证的吗“。我懵逼了,MySQL怎么保证原子性?我不会啊。 谁都知道在事务里边原子性的意思:” 一个事务包含多个操作,这些操作要么全部执行,要么全都不执行 “ 于是大哥就给我讲:”用的就是 undo log 啊“。 我:”卧槽,又是知识盲区“ 后来在网上翻了一下,MySQL里边还有几种常见的 log ,分别为: undo log binlog redo log 如果你也未曾关注过这些 log ,麻烦在评论区给我留个言, 让我觉得不是只有我一个人这么菜,行不行 ? 后来我又去搜了一下,其实这几种log在 面试 的时候也经常会问到,这篇文章以最简单的方式来讲讲,希望对大家有帮助。 一、什么是binlog binlog 其实在日常的开发中是听得很多的,因为很多时候数据的更新就依赖着 binlog 。 举个很简单的例子:我们的数据是保存在数据库里边的嘛,现在我们对某个商品的某个字段的内容改了(数据库变更),而 用户检索的出来数据是走搜索引擎的 。为了让用户能搜到最新的数据,我们需要把引擎的数据也改掉。 一句话: 数据库的变更,搜索引擎的数据也需要变更 。 于是,我们就会监听 binlog 的变更,如果

Redis事务

自闭症网瘾萝莉.ら 提交于 2020-03-10 05:57:10
Redis事务 事务提供了一种将多个命令请求打包,然后一次性、按顺序地执行多个命令的机制,并且在事务执行期间,服务器不会中断事务而改去执行其他客户端的命令请求,它会将事务中的所有命令都执行完毕,然后才去处理其他客户端的命令请求。 MULTI 命令可以将执行该命令的客户端从非事务状态切换至事务状态 在 redis 开始事务状态时,所有的操作都将被放入一个队列里面。( 除过 multi exec watch discard ) 如果遇见上述四个命令,则立即执行 1 、 watch 命令 redis 数据库使用 watched_keys 这个字典,来保存被监控的 key 以及所监控的客户端。在此字典中, key 为所被监视的 key ,而 value 则为一个链表,保存着客户端的地址信息。 在 redis 的客户端中, REDIS_DIRTY_CAS 标识用来决定是否执行事务。默认情况下,此标识为关闭状态。当客户端所监控的 key 被修改时,此标识被打开。此时执行事务,则会被 redis 所拒绝。 首先用第一个客户端给 message 设置值。然后没开启事务的时候,两个客户端都可以修改 message 的值。 当第二个客户端开始事务的时候,用客户端 1 修改 message 的值,然后在客户端 2 里面对 message 进行一系列操作,最后提交事务,这时候, redis 返回 nil

MySQL索引事务

耗尽温柔 提交于 2020-03-10 00:10:51
索引 什么是索引 索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现。 索引的作用 数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。 索引所起的作用类似书籍目录,可用于快速定位、检索数据。 索引对于提高数据库的性能有很大的帮助 使用场景 要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点: 数据量较大,且经常对这些列进行条件查询。 该数据库表的插入操作,及对这些列的修改操作频率较低。 索引会占用额外的磁盘空间。 满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。 反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。 使用 创建主键约束(PRIMARY KEY)、唯一约束(UNIQUE)、外键约束(FOREIGN KEY)时,会自动创建对应列的索引。 查看索引 show index from 表名 ; 创建索引 对于非主键、非唯一约束、非外键的字段,可以创建普通索引 create index 索引名 on 表名 ( 字段名 ) ; 删除索引 drop index 索引名 on 表名 ; 事务 事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。 在不同的环境中,都可以有事务

Oracle索引和事务

。_饼干妹妹 提交于 2020-03-09 20:34:39
Oracle索引和事务 1. 什么是索引?有什么用? 1.索引是数据库对象之一,用于加快数据的检索,类似于书籍的目录。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量,类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。 2.索引是建立在表上的可选对象;索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式,从而提高检索效率 3.索引在逻辑上和物理上都与相关的表和数据无关,当创建或者删除一个索引时,不会影响基本的表; 4.索引一旦建立,在表上进行DML操作时(例如在执行插入、修改或者删除相关操作时),oracle会自动管理索引,索引删除,不会对表产生影响 5.索引对用户是透明的,无论表上是否有索引,sql语句的用法不变 6.oracle创建主键时会自动在该列上创建索引 2. 索引的底层实现原理 当一列索引创建成功后,oracle系统会这个列复制一个份放入缓存,并按照一定规则做排序和去重,从而减少检索数据的范围。 但是索引不是创建的越多越好,因为一个索引的创建,就需要在缓存中开辟一个空间,过多的索引反而会加重数据库的检索速度。 3. 索引的设计理念 1.某个字段在条件查询中会被高频率的调用 where 条件 2.表关联的连接字段 on 条件 3.实际业务需求 4.索引的创建是不是越多越好?为什么? 1.首先数据量小的表不需要建立索引