第十七模块 数据库的三范式、如何获取当前数据库版本、说一下 ACID 是什么、char 和 varchar 的区别是什么、float 和 double 的区别、mysql 的内连接、左连接、右连接、

总内容

数据库的三范式是什么

一张自增表里面总共有 17 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几

如何获取当前数据库版本

说一下 ACID 是什么

char 和 varchar 的区别是什么

float 和 double 的区别是什么

mysql 的内连接、左连接、右连接有什么区别

mysql 索引是怎么实现的

怎么验证 mysql 的索引是否满足需求(查看sql语句是怎么运行的)

说一下数据库的事务隔离

说一下 mysql 常用的引擎

说一下 mysql 的行锁和表锁

说一下乐观锁和悲观锁

mysql 问题排查都有哪些手段

如何做 mysql 的性能优化

1  数据库的三范式是什么?

一张自增表里面总共有 17 条数据,删除了最后 2 条数据,重启 mysql 数据库,又插入了一条数据,此时 id 是几?

表类型如果是 MyISAM ,那 id 就是 18。

表类型如果是 InnoDB,那 id 就是 15。

MyISAM 只管记录,之前记录的是17,就算增删数据,当添加数据时,还是18

InnoDB 表只会把自增主键的最大 id 记录在内存中,所以重启之后会导致最大 id 丢失。

如何获取当前数据库版本?

使用 select version() 获取当前 MySQL 数据库版本。

说一下 ACID 是什么?

Atomicity(原子性):一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,
不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,
就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。

Consistency(一致性):在事务开始之前和事务结束以后,数据库的完整性没有被破坏。
这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。

Isolation(隔离性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,
隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,
包括读未提交(Read uncommitted)、读提交(read committed)、
可重复读(repeatable read)和串行化(Serializable)。

Durability(持久性):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

char 和 varchar 的区别是什么?

char(n) :固定长度类型,比如订阅 char(10),当你输入"abc"三个字符的时候,
它们占的空间还是 10 个字节,其他 7 个是空字节。

char 优点:效率高;缺点:占用空间;
适用场景:存储密码的 md5 值,固定长度的,使用 char 非常合适。

varchar(n) :可变长度,存储的值是每个值占用的字节再加上一个用来记录其长度的字节的长度。
所以,从空间上考虑 varcahr 比较合适;
从效率上考虑 char 比较合适,二者使用需要权衡。

float 和 double 的区别是什么?

float 最多可以存储 8 位的十进制数,并在内存中占 4 字节。

double 最可可以存储 16 位的十进制数,并在内存中占 8 字节。

mysql 的内连接、左连接、右连接有什么区别?

内连接关键字:inner join;

左连接:left join;

右连接:right join。

内连接是把匹配的关联数据显示出来;

左连接是左边的表全部显示出来,右边的表显示出符合条件的数据;右连接正好相反。

8  mysql 索引是怎么实现的?

9   怎么验证 mysql 的索引是否满足需求(查看sql语句是怎么运行的)

10 说一下数据库的事务隔离

11 说一下 mysql 常用的引擎?

12 说一下 mysql 的行锁和表锁

MyISAM 只支持表锁,InnoDB 支持表锁和行锁,默认为行锁。

表级锁:开销小,加锁快,不会出现死锁。锁定粒度大,发生锁冲突的概率最高,并发量最低。

行级锁:开销大,加锁慢,会出现死锁。锁力度小,发生锁冲突的概率小,并发度最高。

13 说一下乐观锁和悲观锁?

乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,
       但是在提交更新的时候会判断一下在此期间别人有没有去更新这个数据。

悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,
       这样别人想拿这个数据就会阻止,直到这个锁被释放。

数据库的乐观锁需要自己实现,在表里面添加一个 version 字段,每次修改成功值加 1,
这样每次修改的时候先对比一下,自己拥有的 version 和数据库现在的 version 是否一致,
如果不一致就不修改,这样就实现了乐观锁

14 mysql 问题排查都有哪些手段

使用 show processlist 命令查看当前所有连接信息。

使用 explain 命令查询 SQL 语句执行计划。

开启慢查询日志,查看慢查询的 SQL。

15 如何做 mysql 的性能优化

为搜索字段创建索引。

避免使用 select *,列出需要查询的字段。

垂直分割分表。

选择正确的存储引擎。
发布了78 篇原创文章 · 获赞 83 · 访问量 9268

猜你喜欢

转载自blog.csdn.net/weixin_41847891/article/details/100751211