2019-03-15 互联网公司面试常见MySql题目

1.什么是数据库事物?如果没有事物会有什么后果?事物的特性是什么?

事物是操作的集合,即一个单元的一系列SQL语句的集合,事物要么完全执行,要么完全不执行,如果不对数据库进行并发操作,可能会产生脏读,幻读,不可重复度,数据丢失等情况。

事物的特性(ACID)

A.atomacity原子性:事物必须是原子工作单元,即事物是不可分割的最小单元,事物当中的所有操作必须全部完成或者全部失败。比方说:小王向小李转了1000,在这个事物当中会发生2个操作,这两个操作是不可分割的,不能给小王减了但是小李却没加。
C:consistency一致性:事物是将数据库的状态从一种状态改变为另一种状态,比方说:小王向小李转了1000,在这个事物当中会发生2个操作,小王的账户减1000,小李的账户加1000,这个事物完成之后,二者的总和不变。这就是一致性
I:isolation隔离线:在并发操作时,2个事物之间是相互隔离的,即一个事物的影响在在该事物提交之前对其他事物是不可见的。
durability持久性:事物完成之后,他对于系统的影响是持久性的,即使出现致命的系统故障,该事物的影响也会存在。

2.什么是脏读?幻读?不可重复度?什么是事物的隔离级别?MySql的默认隔离级别是什么?

(一)脏读幻读不可重复读

脏读:事物A读取到事物B未提交的数据,当事物B回滚以后,事物A读取到的就成了脏数据。
不可重复读:事物A多次读取同一条数据,在事物A读取的同时,事物B对给数据进行了更新并提交,这导致事物A读取到的数据不一致。
幻读:事物A将Student表的性别全部改为男,此时事物B将表当中插入一条性别为女的记录,当事物A再次查看的时候会发现一条性别为女的记录,就好像有一条未修改,产生幻觉了一样。

(二)事物的隔离级别

read uncommitted读未提交:一个事物可以读取到另一个事物为提交的数据,如果数据库的隔离级别设置为此,会产生脏读。

read committed读提交:一个事物读取到另一个事物已经提交的数据,比如:小明在商城买东西,当他要付钱的时候系统检测到卡里有10000,当要付钱的时候发现卡里没钱了,原来小明的老婆在同一时间转了10000到自己的卡里,所以小明付款失败。
这就是读提交,若要事物要对数据进行更新操作,则读操作事物要等到更新操作事物完毕之后才可以进行,可以解决脏读,但会出现一个事物范围内返回结果不同的2条数据,这就是不可重复读。

Repeatable read重复度:重复度,在进行读取数据的时候(事物开启),不允许再修改(update)操作。
比如:小明在商城买东西,当他要付钱的时候系统检测到卡里有10000,这是小明的老婆就不能转钱了,接下来收费系统就乐意扣款了。它能够避免不可重复度。

Serializable序列化:它是数据库的最高隔离级别,可以避免幻读,但是比较耗数据库性能,一般不使用。
当小明的老婆查看消费明细的时候发现花费了1000,此时小明又消费了200,当小明的老婆打印消费明细的时候,发现总共花了1200,好像产生了幻觉一样,幻读只有将数据库的隔离级别设置为序列化的时候才可以避免。

3.MySql默认隔离级别?

Repeatable read

4.事物的隔离是怎么实现的?

是基于锁实现的

(一)有那些锁?分别介绍下?

在DBMS当中,可以按照锁的粒度把数据库锁分为行级锁(INNODB引擎),页级锁(BDB引擎), 表级琐(MYISAM引擎)

行级锁(INNODB引擎):行级锁是MySql当中粒度最细的一种锁,表示指对当中操作的行进行加锁,行级琐可以大大减少数据库操作的冲突,其锁粒度最小,但加锁的开销最大,行级琐分为共享锁和开销锁
它的特点是:开销大,加锁慢;锁粒度最小,发生冲突的概率最低;并发最高

页级锁(BDB引擎):页级琐四Mysql当中锁粒度介于行级琐于表级琐之间的,表级琐锁读快,但是冲突多,行级琐冲突少,但是速度慢,页级琐介于二者之间。
特点:开销于加锁时间介于表锁于行锁之间;会出现死锁;锁定粒度基于二者之间,并发一般

表级琐(MYISAM引擎):表级琐是MySql当中锁粒度最大的一种锁,表示对当前操作的整张表进行加锁,它的实现简单,资源消耗较少,被大多数的MySql引擎支持。最常用的MYISANM于INNODB都支持表级锁定,表级琐分为共享读锁(共享锁)与表独占锁(排他锁)
特点:开销小,加锁速读快;锁粒度最大,发生锁冲突的概率最高;并发最低

5.什么是死锁?怎么解决死锁?

传统意义上的死锁指的是两个或者多个线程相互持有对方需要的资源,等待释放,这就导致这些线程都处于等待的状态,无法执行,导致死锁。
死锁产生的根本原因是对共享存储区域的访问,在数据库中也一样,如果需要“修改”一条数据,首先数据库管理系统会在上面加锁,以保证在同一时间只有一个事务能进行修改操作。加锁是数据库并发控制的一种重要手段,数据库当中有两种基本类型的锁,共享锁和排他锁,当数据对象被加上排他锁的时候,其他的事务不能对它读取和修改,当数据对象加上共享锁的时候,其他的数据事物可以对该数据对象进行读取,但是不能修改。

常见的造成死锁的原因及解决方案:

(一)事物之间对资源访问顺序的交替

原因:用户A 访问表A(锁住了表A),然后又访问表B;用户B 访问表B(锁住了表B),然后企图访问表A;这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B才能继续,同样用户B要等用户A释放表A才能继续,这就死锁就产生了。

解决方案:这种死锁是由于程序的BUG导致的,比较常见,尽量约定以相同的顺序来访问表,可以大大减少死锁的概率。如操作A和B两张表时,总是按先A后B的顺序处理, 必须同时锁定两个资源时,要保证在任何时刻都应该按照相同的顺序来锁定资源。即B用户先访问A资源,然后A用户在访问B资源。

(二)并发修改同一记录

6.Mysql数据库引擎有那些?为什么查询用MYISAM,更新用INNODB?

主要引擎有MYISAM,INNODB

INNODB在select的时候要维护的东西比MYISAM多得多:
1)数据块:INNODB要维护数据块,MYISAM只要缓存索引块。
2)INNODB寻址要映射到块,再到行,MYISAM寻址是直接到文件的OFFSET,定位比INNODB块
3)INNODB还需要维护MVCC:虽然你的场景没有用到,但是他还是要去维护,MVCC(Multi-Version Concurrency Control)多版本并发控制。

INNODB与MYISAM的区别?

INIMNODB:支持事物,由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。
MYISAM:MyISAM是MySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键,只支持表级琐,因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyISAM也是很好的选择。

简单介绍区别:
1、MyISAM是非事务安全的,而InnoDB是事务安全的

2、MyISAM锁的粒度是表级的,而InnoDB支持行级锁

3、MyISAM支持全文类型索引,而InnoDB不支持全文索引

4、MyISAM相对简单,效率上要优于InnoDB,小型应用可以考虑使用MyISAM

5、MyISAM表保存成文件形式,跨平台使用更加方便

应用场景:

1、MyISAM管理非事务表,提供高速存储和检索以及全文搜索能力,如果再应用中执行大量select操作,应该选择MyISAM
2、InnoDB用于事务处理,具有ACID事务支持等特性,如果在应用中执行大量insert和update操作,应该选择InnoDB

7.什么是乐观锁?什么是悲观锁?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容