[数据库萌新入门] 第三章 数据库简单面试题和事务考点详解(脏读、不可重复读、幻读)

一些简单的面试题:

说一下你熟悉的数据库,这个数据库有什么特点?

        mysql关系型数据库开源中最常用的数据库,有多种表引擎,支持事务,支持表关系redis非关系型数据库键值对的存储方式,并且数据存储在内存中,有多种不同的数据类型mongodb非关系型数据库,基于分布式文件存储的数据库,是nosq中最像关系型数据库的请用

sql描述,如何给表中插入数据?如何更新数据? 

        insert into表名(字段列表) values(参数列表)

        update 表名set字段=新值.... where ....

你常用的mysql引擎有哪些?各引擎间有什么区别? 

        myisam存储由三个文件组成,一个存储表结构,一个存储数据,一个存储索引不支持事务,非聚簇索引innodb存储由两个文件组成,一个存储表结构,一个存储数据和索引支持事务,主索引是聚簇索引,并且表中始终存在主键(即便在建表时没有人为指定主键).

请描述MySQL中left join和inner join的区别。

        join和inner join都是一样的,会连接两个表中存在关系字段的数据和where的关联查询一样left join和right join一样都是以左表(或右表)数据为基准,去查询另外一个表的数据,如果没有对应字段的数据,则补充为null

请写出你知道MySQL储存引擎和区别。请列出你最常使用的mysql版本, mysql默认端口号是多少?请写出你最常用的mysql数据库备份和恢复命令。

5.7,端口3306 127.0.0.1 localhost本机的IP

-数据导入mysql-uroot-p<F:\mysql-5.7.27-winx64bfops.sql

-数据备份导出mysqldump-uroot-p-B-F-R-x--master-data=2 ops >F\mysql-5.7.27winx64\bfops.sql

参数说明: -B:指定数据库  -F:刷新日志  -R:备份存储过程等  -x:锁表  --master-data :在备份语句里添加CHANGE MASTER语句以及binlog文件及位置点信息

数据库A:datahn,其中具有表c、表d。数据库B:datapubhn,现想要在数据库B中对数据库A中表c与表d中的字段进行增删改查。如何授权?

        grant select,insert,update,delete on B.*,A.c,A.d to'zhansgan'@'%'identified by '123456'

对于处理高复杂sql,数据库查询特别慢,你有什么高招?

        复杂查询简单化不用嵌套,不用join,多表查询拆分,针对语句的查询字段设计索引,给经常作为where条件的字段添加索引必要时添加联合索引.

选择:

以下哪条语句句在数据库sql书写时最为高效( ) B
A.select * from emp where dep>3
B.select * from emp where dep>=4
C.select * from emp where dep≥4
D.select * from emp where dep>=3 and dep≠4


数据库中执行删除操作,若要删除表中的所有行,建议使用( ) B
A.delete 语句
B.turncate 语句
C.drop 语句
D.commit 语句


在查询语句的select子句中尽量避免用 * 来表示全部列名。 *


查找条件为:姓名不是NULL的纪录( ) C
A.WHERE NAME ! NULL
B.WHERE NAME NOT NULL
C.WHERE NAME IS NOT NULL
D.WHERE NAME!=NULL


在SQL语言中,子查询是( ) D
A.选取单表中字段子集的查询语句
B.选取多表中字段子集的查询语句
C.返回单表中数据子集的查询语言
D.嵌入到另一个查询语句之中的查询语句


以下能够删除一列的是( ) B
A.alter table emp remove addcolumn
B.alter table emp drop column addcolumn
C.alter table emp delete column addcolumn
D.alter table emp delete addcolumn


学生关系模型S(S#,Sname,Sex,Age),S的属性分别表示学生的学号、姓名、性别、年龄。要在表S中删除一个属性”年龄”,可用的SQL语句句是( ) D
A.UPDATE S Age
B.DELETE Age from S
C.ALTER TABLE S ‘Age’
D.ALTER TABLE S DROP Age

关于文本格式数据:

char定长长度范围0-255超出指定长度无法存储,
varchar变长长度范围0-65535超出指定长度无法存储
text文本长度范围0-65535不需要指定长度text和以上两个字段的最大区别就是text只能使用前缀索引

 

Mysql数据库GD2312,utf8lutf8mb4字符集的区别:

       GD2312收录了6763个汉字,其它文字符号682个,兼容ASCII字符占用空间:如果是ASCI1字符,则占一个字节编码如果是其它则采用2个字节编码;UTF8收录地球上能想到的所有字符,而且还在不断扩充,同时兼容ASCII字符存储空间为1-4个字节
utf8mb3 :阉割过的utf8字符集,只使用1~3个字节表示字符。
utf8mb4 :正宗的utf8字符集,使用1-4个字节表示字符。

 

一、事务

         事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。

一,事务的语法

1. start transaction;/ begin;
2. commit;使得当前的修改确认
3, rollback;使得当前的修改被放弃

二,事务的ACID特性

       1.原子性(Atomicity)

       事务的原子性是指事务必须是一个原子的操作序列单元。

       事务中包含的各项操作在一次执行过程中,只允许出现两种状态之一。全部执行成功/全部执行失败

       事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

       2.一致性(Consistency)

       事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处以一致性状态。

比如:如果从A账户转账到B账户,不可能因为A账户扣了钱,而B账户没有加钱。

       3.隔离性(Isolation)

       事务的隔离性是指在并发环境中,并发的事务是互相隔离的。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。
       一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务是不能互相干扰的。

       隔离性分4个级别,下面会介绍。

       4.持久性(Duration)

       事务的持久性是指事务一旦提交后,数据库中的数据必须被永久的保存下来。即使服务器系统崩溃或服务器宕机等故障。只要数据库重新启动,那么一定能够将其恢复到事务成功结束后的状态。

三,事务的并发问题

       脏读:读取到了没有提交的数据,事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。
       不可重复读:同一条命令返回不同的结果集(更新) 事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。
       幻读:重复查询的过程中,数据就发生了量的变化(insert, delete) 。

四、事务的隔离级别

查看当前会话中事务的隔离级别

mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set, 1 warning (0.93 sec)

设置当前会话中的事务隔离级别

mysql> set session transaction isolation level read uncommitted;
Query OK, 0 rows affected (0.00 sec)

1.读未提交(READ-UNCOMMITTED)

       读未提交,该隔离级别允许脏读取,其隔离级别是最低的。换句话说,如果一个事务正在处理某一数据,并对其进行了更新,但同时尚未完成事务,因此还没有提交事务;而以此同时,允许另一个事务也能够访问该数据。

2.读已提交(READCOMMITTED)

        读已提交是不同的事务执行的时候只能获取到已经提交的数据。这样就不会出现上面的脏读的情况了。但是在同一个事务中执行同一个读取,结果不一致。(针对于update操作)

3.可重复读(REPEATABLEREAD)

       可重复读就是保证在事务处理过程中,多次读取同一个数据时,该数据的值和事务开始时刻是一致的。因此该事务级别限制了不可重复读和脏读,但是有可能出现幻读的数据。(针对于insert和delete操作)

       幻读:幻读就是指同样的事务操作,在前后两个时间段内执行对同一个数据项的读取,可能出现不一致的结果。

4,顺序读(SERIALIZABLE)

        顺序读是最严格的事务隔离级别。它要求所有的事务排队顺序执行,即事务只能一个接一个地处理,不能并发。

五,不同的隔离级别的锁的情况(了解)

        1,读未提交(RU) :有行级的锁,没有间隙锁。它与RC的区别是能够查询到未提交的数据。

        2,读已提交(RC) :有行级的锁,没有间隙锁,读不到没有提交的数据。

        3,可重复读(RR) :有行级的锁,也有间隙锁,每次读取的数据都是一样的,有可能会出现幻读的情况。

        4,序列化(S) :有行级锁,也有间隙锁,读表的时候,就已经上锁了

六,隐式提交(了解)

语句分类有四类:

DQL:查询语句
DML:写操作(添加,删除,修改)
DDL:定义语句(建库,建表,修改表,索引操作,存储过程,视图)
DCL:控制语言(给用户授权,或删除授权)

DDL (Data Define Language) :都是隐式提交。(即执行DDL语句的时候相当于commit了)
隐式提交:执行这种语句相当于执行commit; DDL

https://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值