SQL数据库开发关注获取SQL视频教程

今天小编又给大家搜罗了一套笔试题,这次是MySQL的。有需要的小伙伴可以收藏一下。


1.数据库中事务的四大特性(ACID)

事务概念:

事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个SQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。

⑴ 原子性(Atomicity)

原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。

⑵ 一致性(Consistency)

一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。

⑶ 隔离性(Isolation)

隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行。

⑷ 持久性(Durability)

持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。


2、MySQL中myisam与innodb的区别,至少5点

    (1).InnoDB支持事物,而MyISAM不支持事物

    (2).InnoDB支持行级锁,而MyISAM支持表级锁

    (3).InnoDB支持MVCC, 而MyISAM不支持

    (4).InnoDB支持外键,而MyISAM不支持

    (5).InnoDB不支持全文索引,而MyISAM支持。


3.innodb的事务与日志的实现方式

错误日志:记录出错信息,也记录一些警告信息或者正确的信息。

查询日志:记录所有对数据库请求的信息,不论这些请求是否得到了正确的执行。

慢查询日志:设置一个阈值,将运行时间超过该值的所有SQL语句都记录到慢查询的日志文件中。

二进制日志:记录对数据库执行更改的所有操作。

实现方式:事务日志是通过redo和innodb的存储引擎日志缓冲(Innodb log buffer)来实现的。


4.MYSQL的三级模式

(1)模式(逻辑模式):是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。

(2)外模式(用户模式):是数据库用户的数据视图,是局部数据的逻辑结构和特征的描述。

(3)内模式(存储模式):一个数据库只有一个内模式,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。


5.常用操作命令

表操作命令:create、alter、drop。    

数据操作指令:select、insert、delete、update

select 表名 from ... where ...

insert into table values()

update 表名 set ...

delete from 表名 where ...


6.连接分为内连接、左连接、右连接

内连接是根据某个条件连接两个表共有的数据;

左连接是根据某个条件以及左边的表连接数据,右边的表没数据的话则填null;

右连接是根据某个条件以及右边的表连接数据,左边的表没数据的话则填null;


7.mysql中视图和表的区别以及联系是什么?

区别:

(1)视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表,而表不是。

(2)视图没有实际的物理记录,而表有。

(3)视图是窗口,表是内容。

(4)视图是逻辑概念的存在,不占用物理空间;而表占用物理空间。

(5)表可以及时对它进行修改;而视图只能用创建语句来修改。

(6)视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。

(7)从安全来说,视图可以防止用户直接接触表,因而用户不知道表结构。

(8)表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。

(9)视图的建立和删除只影响视图本身,不影响对应的表。

联系

视图是在表之上建立的虚表,它的结构(所定义的列)和内容(所有记录)都来自表,视图依据表存在而存在。一个视图可以对应多个表。视图是表的抽象和在逻辑意义上建立的新关系。

删除视图中的数据,数据库中表的数据会一起被删除。


8.安全性操作

授权:grant 权限(列) on 表名 to 用户

所有权限:all priviliges

收回权限:revoke 权限(列) on 表名 from 用户


9.完整性约束

主键约束:primary key

外键约束:foreign key

唯一约束:unique

检查约束:check

非空约束:not null


10.存储过程(procedure)和函数(function)区别

本质上它们都是存储程序。函数只能通过return语句返回单个值或表对象;而存储过程不允许执行return语句,但是可以通过output参数返回多个值。函数限制比较多,不能用临时变量,只能用表变量,还有一些函数都不可用等等;而存储过程的限制相对就比较少。函数可以嵌入在SQL语句中使用,可以在select语句中作为查询语句的一个部分调用;而存储过程一般是作为一个独立的部分来执行。


11.触发器和约束的区别

触发器是由服务器自动激活的,类似于约束,但是比约束更加灵活,可以实施比约束更加复杂的检查和操作,具有更强大的数据控制能力。


12.事务隔离级别

(1)Read uncommitted 未提交读(RU)

最弱的隔离级别,事务中的修改即使没有提交,对其他事务也都是可见的。(即脏读)

(2)Read committed 提交读  不可重复读(RC)

大多数数据库系统的默认隔离级别。

解决了脏读的问题,一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。

一个事务两次执行同样的查询,可能会得到不一样的结果。

(3)Repeatable read 可重复读(RR)

mysql默认隔离级别。

解决了脏读的问题。该级别保证了在同一个事务中多次读取同样记录的结果是一致的。

该级无法解决幻读的问题,幻读是当某个事务在读取某个范围内的记录时,另一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻读。

innodb和xtradb存储引擎通过多版本并发控制(MVCC,Multiversion Concurrency Control)解决了幻读的问题。

(4)Serializable 可串行化

该级是最高的级别,通过强制事务串行执行,避免了幻读的问题,该级会在读取的每一行数据上都加锁,所以可能导致大量的超时和锁争用的问题,

MySQL数据库经典笔试题_数据


13.索引

MYSQL中索引文件以B树结构存储,索引可分为单列索引和多列索引。

对于多列索引中,一个SQL语句是否用到了索引取决于其数据是否符合最左前缀原则。

MySQL只有对以下操作符才使用索引:<,<=,=,>,>=,BETWEEN,IN,以及某些时候的LIKE。可以在LIKE操作中使用索引的情形是指另一个操作数不是以通配符(%或者_)开头的情形。例如,“SELECT id FROM people WHERE firstname LIKE ‘Li%’;”这个查询将使用索引,但“SELECT id FROM people WHERE firstname LIKE ‘%ike’;”这个查询不会使用索引。


14.关系数据库的特点

(1).数据集中控制。在文件管理方法中,文件是分散的,每个用户或每种处理都有各自的文件,这些文件之间一般是没有联系的,因此,不能按照统一的方法来控制、维护和管理。而数据库则很好地克服了这一缺点,可以集中控制、维护和管理有关数据。

(2).数据独立性高。数据库中的数据独立于应用程序,包括数据的物理独立性和逻辑独立性,给数据库的使用、调整、优化和进一步扩充提供了方便,提高了数据库应用系统的稳定性。

(3).数据共享性好。数据库中的数据可以供多个用户使用,每个用户只与库中的一部分数据发生联系;用户数据可以重叠,用户可以同时存取数据而互不影响,大大提高了数据库的使用效率。

(4).数据冗余度小。数据库中的数据不是面向应用,而是面向系统。数据统一定义、组织和存储,集中管理,避免了不必要的数据冗余,也提高了数据的一致性。

(5).数据结构化,整个数据库按一定的结构形式构成,数据在记录内部和记录类型之间相互关联,用户可通过不同的路径存取数据。

6)统一的数据保护功能,在多用户共享数据资源的情况下,对用户使用数据有严格的检查,对数据库规定密码或存取权限,拒绝非法用户进入数据库,以确保数据的安全性、一致性和并发控制。



15、MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义

(1)、varchar与char的区别

char是一种固定长度的类型,varchar则是一种可变长度的类型

(2)、varchar(50)中50的涵义

最多存放50个字符,varchar(50)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度(memory引擎也一样)

(3)、int(20)中20的涵义

是指显示字符的长度

但要加参数的,最大为255,比如它是记录行数的id,插入10笔资料,它就显示00000000001 ~~~00000000010,当字符的位数超过11,它也只显示11位,如果你没有加那个让它未满11位就前面加0的参数,它不会在前面加0

20表示最大显示宽度为20,但仍占4字节存储,存储范围不变;

(4)、mysql为什么这么设计

对大多数应用没有意义,只是规定一些工具用来显示字符的个数;int(1)和int(20)存储和计算均一样;


16、explain出来的各种item的意义

select_type 

表示查询中每个select子句的类型

type

表示MySQL在表中找到所需行的方式,又称“访问类型”

possible_keys 

指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用

key

显示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL

key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度

ref

表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值 

extra

包含不适合在其他列中显示但十分重要的额外信息


开放性问题:据说是腾讯的

一个6亿的表a,一个3亿的表b,通过外间tid关联,你如何最快的查询出满足条件的第50000到第50200中的这200条数据记录。

1、如果A表TID是自增长,并且是连续的,B表的ID为索引

select * from a,b 
where a.tid = b.id
and a.tid>500000
limit 200;


2、如果A表的TID不是连续的,那么就需要使用覆盖索引.TID要么是主键,要么是辅助索引,B表ID也需要有索引。

select * from b ,
(select tid from a limit 50000,200) a
where b.id = a .tid;


END




SQL专栏

​SQL基础知识汇总​

​SQL高级知识汇总​


公众号回复‘M’​获取文章目录,搜索QQ​“SQL学习之路”​加群讨论

MySQL数据库经典笔试题_数据库_02

长按识别二维码​,

更多精彩早知道!