mysql事务

史上最全大厂Mysql面试题总结

心不动则不痛 提交于 2019-11-30 07:01:11
今天跟大家分享下大厂Mysql面试题的知识。 1 MySQL的复制原理以及流程 基本原理流程,3个线程以及之间的关联; 主:binlog线程——记录下所有改变了数据库数据的语句,放进master上的binlog中; 从:io线程——在使用start slave 之后,负责从master上拉取 binlog 内容,放进 自己的relay log中; 从:sql执行线程——执行relay log中的语句; 2 MySQL中myisam与innodb的区别,至少5点 (1)、问5点不同; 1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁 3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持 5>.InnoDB不支持全文索引,而MyISAM支持。 (2)、innodb引擎的4大特性 插入缓冲(insert buffer),二次写(double write),自适应哈希索引(ahi),预读(read ahead) (3)、2者selectcount(*)哪个更快,为什么 myisam更快,因为myisam内部维护了一个计数器,可以直接调取。 3 MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义 (1)、varchar与char的区别

数据库基础

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-30 06:36:01
数据库 MySQL初步 MySQL基础认知 (Oracle真的是走哪祸害到哪23333) Java多用MySQL和Oracle SQLServer也收费,但是还行,比Oracle便宜,一个差不多3w多 SQLite被嵌入到了安卓系统中,主要用于安卓开发,是完全免费的 关于MySQL收费的问题,这篇文章说的很透: 你使用开源软件并不受GPL约束,只有在你基于开源软件,修改开源软件的源码的时候才受 GPL约束。MySQL作为一个开源数据库,几乎所有的用户都只是通过自己的程序去操作这个数据库,不涉及到改动源码的问题,根本不用去考虑是否要遵循 GPL的问题。只有在你修改MySQL源码的情况下,才需要考虑GPL。 如果你只是使用MySQL而不是改写MySQL,那么在这些情况下你应该考虑购买Oracle的商业版本,一是Oracle的商用版本提供的附加组件(监控器、备份工具等)对你有价值,二是Oracle的年度技术支持是你需要的,三是各种潜规则。而不应该是你想合法的使用MySQL才去购买其商业版本。另外,如果你是基于MySQL的源码开发你自己的产品,那么你需要购买的是商业授权,而不是subscription这些商业版本。 除了以上情况,使用社区版就好 关闭服务需要使用管理员权限 服务器无法连接时,要检查服务是否正常开始了 登录MySQL: mysql -uroot -proot /

SSH框架之Spring第四篇

蓝咒 提交于 2019-11-30 06:31:11
1.1 JdbcTemplate概述 : 它是spring框架中提供的一个对象,是对原始JdbcAPI对象的简单封装.spring框架为我们提供了很多的操作模板类. ORM持久化技术 模板类 JDBC org.springframework.jdbc.core.JdbcTemplate. Hibernate3.0 org.springframework.orm.hibernate3.HibernateTemplate. IBatis(MyBatis) org.springframework.orm.ibatis.SqlMapClientTemplate. JPA org.springframework.orm.jpa.JpaTemplate. 在导包的时候需要导入spring-jdbc-4.24.RELEASF.jar,还需要导入一个spring-tx-4.2.4.RELEASE.jar(它和事务有关) <!-- 配置数据源 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> <property name="url" value=

mysql事务与锁

淺唱寂寞╮ 提交于 2019-11-30 06:20:47
事务acid原则 原子性 隔离性 一致性 持久性 事务的概念 把需要保证原子性、隔离性、一致性和持久性的一个或者多个数据库操作称为事务。 事务的使用 语法 begin;//开启一个事务 some sql;//需要执行的语句 savepoint bussiness1;//事务保存点 some sql; roll back to bussiness1;//回滚 commit;//提交事务 rollback;//如果需要手动回滚的话在提交之前删除这句 事务的自动提交 通常情况下mysql默认自动提交事务。既每一个语句都都会直接提交事务,可以通过 set autocommit=off 来实现手动提交。 隐式提交 在一些操作下,哪怕在事务中也可能会自动把事务进行提交。 定义或者修改数据库对象的数据定义语言,指对数据库、表、视图、存储过程等进行修改。 隐式使用或者修改mysql数据库中的表:当我们使用ALTER USER、CREATE USER、DROP USER、GRANT、RENAME USER、SET PASSWORD等语句时也会隐式的提交前边语句所属于的事务。 事务控制或关于锁定的语句:前一个事务尚未完成又开启事务时上一个会自动提交。使用lock tables、unlock tables等关于锁定的语句也会隐式提交之前的事务。 加载数据的语句:如果使用load

redo log和undo log、事务

徘徊边缘 提交于 2019-11-30 05:40:43
redo log和undo log、事务 redo log 如果系统突然崩溃,一些在缓存中的修改还没来的及同步到磁盘中,用redo log就可以恢复这些修改,Redo log就是记录这些修改的日志。这些对页面的修改有一些是原子操作,比如有些插入伴随着页面分裂和页的新建(悲观插入),此时这些分裂和修改必须一气呵成,这样的操作叫mini-transition,一条语句可能包含多个mini-transition,而一个又包含多个redo日志,这种原子性用一个特殊位来标记,在恢复时读到标志位才恢复之前的内容,否则放弃之前的日志。每次的redo日志也是存到buffer pool中,选择合适的时机刷新到磁盘,可以选择事务提交时同步到磁盘或写入缓存。 (LSN:记录的一个字段,一个redo日志对应的编号,一个页的LSN越大说明刚刚修改过) undo log 为了事务回滚而记录的日志信息,undo日志有几种类型,插入数据、删除数据、更新数据都会产生不同的undo log,记录有一个roll_pointer的指针指向它的undo log,所有关于这条记录的undo log都连成一条链表,称为版本链,根据undo log的事务ID来判断是哪个事务中修改了该记录,事务回滚时找到对应事务ID的undo log恢复数据除此之外,undo log还可以用来维护MVCC(多版本并发控制)。

盘点分库分表中,你一定要避开的那些坑!

寵の児 提交于 2019-11-30 04:15:10
来自:51CTO技术栈 例如:单表中出现了,动辄百万甚至千万级别的数据。“分表分库”就成为解决上述问题的有效工具。 今天和大家一起看看,如何进行分表分库以及期间遇到的问题吧。 为什么会分表分库 数据库数据会随着业务的发展而不断增多,因此数据操作,如增删改查的开销也会越来越大。 再加上物理服务器的资源有限(CPU、磁盘、内存、IO 等)。最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。 换句话说需要合理的数据库架构来存放不断增长的数据,这个就是分库分表的设计初衷。目的就是为了缓解数据库的压力,最大限度提高数据操作的效率。 数据分表 如果单表的数据量过大,例如千万级甚至更多,那么在操作表的时候就会加大系统的开销。 每次查询会消耗数据库大量资源,如果需要多表的联合查询,这种劣势就更加明显了。 以 MySQL 为例,在插入数据的时候,会对表进行加锁,分为表锁定和行锁定。 无论是哪种锁定方式,都意味着前面一条数据在操作表或者行的时候,后面的请求都在排队,当访问量增加的时候,都会影响数据库的效率。 那么既然一定要分表,那么每张表分配多大的数据量比较合适呢?这里建议根据业务场景和实际情况具体分析。 一般来说 MySQL 数据库单表记录最好控制在 500 万条(这是个经验数字)。既然需要将数据从一个表分别存放到多个表中,那么来看看下面两种分表方式吧。 垂直分表 根据业务把一个表中的字段

《即时消息技术剖析与实战》学习笔记7——IM系统的消息未读

半世苍凉 提交于 2019-11-30 03:38:32
一、什么是消息未读 消息未读包括 会话未读 和 总未读 。前者指的是当前用户和某一聊天方的未读消息数,后者指的是当前用户的所有未读消息数,也就是所有会话未读的和。比如用户A收到用户B的2条消息,还收到用户C的3条消息,则用户A与B的会话未读数是2,用户A与C的会话未读数是3,用户A的总未读是5。 二、消息未读的维护 会话未读和总未读数一般都是单独维护的。这是因为: 1)总未读的使用场景较多,会被高频使用。如APP角标未读展示; 2)如果不单独维护,则总未读数需要通过计算所有的会话未读数,一旦会话数较多,就需要多次读取存储,多次获取累加的操作容易出现性能瓶颈。而且一旦发生超时等意外,就会无法获取到会话未读数,导致总未读数不准确。 三、消息未读的一致性 单独维护总未读和会话未读数会带来新问题,也就是消息总未读数与(多个)会话未读数不一致的问题。比如APP角标显示5,表示有5条未读消息,但用户点进去却发现没有新消息或只有3条消息,就会给用户造成不好的体验。 消息未读不一致的原因 用户B的初始状态:会话未读数和总未读数都是0。 用户A给用户B发消息,消息到达IM服务后,执行加未读操作:先把用户B与用户A的会话未读数加1,再把用户B的总未读数加1,然后消息推送给用户B。 case1 :假设加会话未读数的操作成功、加总未读数的操作失败了,则用户B的最新状态是:会话未读数是1,总未读数是0。

『浅入浅出』MySQL 和 InnoDB

不想你离开。 提交于 2019-11-30 03:16:13
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。传送门: https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 作为一名开发人员,在日常的工作中会难以避免地接触到数据库,无论是基于文件的 sqlite 还是工程上使用非常广泛的 MySQL、PostgreSQL,但是一直以来也没有对数据库有一个非常清晰并且成体系的认知,所以最近两个月的时间看了几本数据库相关的书籍并且阅读了 MySQL 的官方文档,希望对各位了解数据库的、不了解数据库的有所帮助。 本文中对于数据库的介绍以及研究都是在 MySQL 上进行的,如果涉及到了其他数据库的内容或者实现会在文中单独指出。 数据库的定义 很多开发者在最开始时其实都对数据库有一个比较模糊的认识,觉得数据库就是一堆数据的集合,但是实际却比这复杂的多,数据库领域中有两个词非常容易混淆,也就是 数据库 和 实例 : 数据库:物理操作文件系统或其他形式文件类型的集合; 实例:MySQL 数据库由后台线程以及一个共享内存区组成; 对于数据库和实例的定义都来自于 MySQL 技术内幕:InnoDB 存储引擎 一书,想要了解 InnoDB 存储引擎的读者可以阅读这本书籍。

分布式事务选型

不打扰是莪最后的温柔 提交于 2019-11-30 03:10:48
## 分布式事务选型 ### 选型依据: - 多语言支持 - 微服务框架兼容程度 - 关系型数据库-MQ事务的支持 - 性能与稳定性以及是否支持高可用 - 业务代码侵入性 - 可拓展性 - 社区活跃度及影响力 ------ ### GTS概览 #### 针对不同的应用场景,GTS主要提供标准模式(AT)和自定义模式(MT)两种事务模式. - **AT模式**: GTS 最主要的事务模式,通过 GTS 基于 DRDS/RDS 数据源,对 sql 语句提供分布式事务的支持.他帮助应用以最小的改动代价来实现数据库的事务功能.AT 模式适用于 DRDS 分库分表/多数据库数据源/跨进程的多数据库数据源等几乎任何 DRDS 应用场景下的分布式事务. - **MT模式**: 提供给用户的一种可介入两阶段提交过程的一种模式.在这种模式下,用户可以根据自身的业务场景的需求自定义在 GTS 两阶段提交的过程中每阶段的具体行为.MT 模式提供了更多的可能性和灵活性,以达到特殊场景下的自定义特殊功能实现.**MT 模式不依赖于数据库,几乎满足任何事务场景.** #### 在 AT 和 MT 两种模式下,GTS 又提供了三种具体的使用方式: - **AT模式下,使用注解接入分布式事务** 这种方式只需要代码中依赖 GTS 的 SDK 即可.在希望引入分布式事务的方法上,仅需一行注解即可.适用场景包括

项目常见面试问题

亡梦爱人 提交于 2019-11-30 02:10:35
项目常见面试问题 阅读目录 项目常见面试问题 回到目录 项目常见面试问题 一、你的项目中缓存粒度是如何选择的? 缓存粒度一共分为4种. 1.缓存某个数值:一个键只保存一个值,性价比较低,使用率低,如果存储的话我们使用redis的String 2.缓存数据对象:数据库记录对应的具体数据,优点是可以多次复用,String,hash 3.缓存数据集合:数据库查询对应的结果集,可以和数据对象配合使用,方便数据对象的重用,hash,list,set,zset,String(zset,String) 4.缓存试图响应:试图返回的相应数据,复用性比较差,String 所以我们项目中主要对数据集合+数据对象进行缓存,他们的优点是复用性强,节省内存空间. 二、使用过redis的那些格式做过缓存,其他应用场景和优缺点是什么? 包括list,zset,set,hash和json字符串 其中我们使用过json字符串和zset set用来存放无序去重的数据, 如果有判断是否存在的需求 zset有排序的需要list,如果说是按时间查询, 查询的结果固定, 不需要分页的情况下,我们使用list因为查询的比较快 但如果有额外排序要求, 而且需要分页, 我们使用zset(查询时间跟查询的长度和数据量有关,跟查询区别无关, 查询速度比较均衡), 增加数据效率和存储的数据量负相关,数据量越大,添加时间越长