数据库基础知识

0、概要

1、平时MySQL主要⽤哪个版本

2、数据库三⼤范式是什么

3MySQL有关权限的表都有哪⼏个

4MySQLbinlog有有⼏种录⼊格式?分别有什么区别?

5、平时⽤到哪些关系型数据库和⾮关系数据库, 可以谈谈你对它们的理解吗?

6、可以简单说说你对MySQL的逻辑架构了解吗?

7、了解MySQL中的MVCC是什么?

8PostgreSQL相对于MySQL的优势

9PostgreSQLMySQL的⼀些区别

1、平时MySQL主要⽤哪个版本

出现概率: ★★★★

可以说说⾃⼰⽤的MySQL版本, ⽐如我⾃⼰⽤的版本是5.7版本,然后可以也简单聊聊这个版本的⼀些特点:

1)、安全性

MySQL 5.7中,有不少安全性相关的改进。包括:
MySQL数据库初始化完成以后,会产⽣⼀个 root@localhost ⽤户,从MySQL 5.7开始,root⽤户的密码不再是空,⽽是随机产⽣⼀个密码,这也导致了⽤户安装5.7时发现的与5.6版本⽐较⼤的⼀个不同点。

MySQL官⽅已经删除了test数据库,默认安装完后是没有test数据库的,就算⽤户创建了test库,也可以对test库进⾏权限控制了 MySQL 5.7版本提供了更为简单SSL安全访问配置,并且默认连接就采⽤SSL的加密⽅式。

可以为⽤户设置密码过期策略,⼀定时间以后,强制⽤户修改密码。

2)、灵活性

MySQL 5.7的两个全新的功能,即JSONgenerate column

CREATE TABLE t1 (jdoc JSON);

INSERT INTO t1 VALUES('{"key1": "value1", "key2": "value2"}');

3)、可⽤性

在线设置复制的过滤规则,不再需要重启MySQL,只需要停⽌SQL thread,修改完成以后,启动SQL thread

这个主要⼤致谈谈你⾃⼰的理解, 也可以根据⾃⼰的理解多延展⼀些, 提⾼⾯试的加分。

2、数据库三⼤范式是什么

出现概率: ★★★

第⼀范式:每个列都不可以再拆分。

第⼆范式:在第⼀范式的基础上,⾮主键列完全依赖于主键,⽽不能是依赖于主键的⼀部分。

第三范式:在第⼆范式的基础上,⾮主键列只依赖于主键,不依赖于其他⾮主键。

在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有⾜够的理由。⽐如性能。事实上我们经常会为了性能⽽妥协数据库的设计。

3MySQL有关权限的表都有哪⼏个

出现概率: ★★★
MySQL服务器通过权限表来控制⽤户对数据库的访问,权限表存放在mysql数据库⾥,由mysqlinstalldb脚本初始化。这些权限表分别 user  db  table_priv  columns_priv  host 。下⾯分别介绍⼀下这些表的结构和内容:

user 权限表:记录允许连接到服务器的⽤户帐号信息,⾥⾯的权限是全局级的。

db 权限表:记录各个帐号在各个数据库上的操作权限。

table_priv 权限表:记录数据表级的操作权限。

columns_priv 权限表:记录数据列级的操作权限。

host 权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANTREVOKE语句的影响。

4MySQLbinlog有有⼏种录⼊格式?分别有什么区别?

出现概率: ★★★

MySQLbinlog有三种格式: statementrowmixed

1)statement模式下,每⼀条会修改数据的sql都会记录在binlog中。不需要记录每⼀⾏的变化,减少了binlog⽇志量,节约了IO,提⾼性能。由于sql的执⾏是有上下⽂的,因此在保存的时候需要保存相关的信息,同时还有⼀些使⽤了函数之类的语句⽆法被记录复制。

2)row级别下,不记录sql语句上下⽂相关信息,仅保存哪条记录被修改。记录单元为每⼀⾏的改动,基本是可以全部记下来但是由于很多操作,会导致⼤量⾏的改动(⽐如alter table),因此这种模式的⽂件保存的信息太多,⽇志量太⼤。

3)mixed,⼀种折中的⽅案,普通操作使⽤statement记录,当⽆法使⽤statement的时候使⽤row

此外,新版的MySQL中对row级别也做了⼀些优化,当表结构发⽣变化的时候,会记录语句⽽不是逐⾏记录。

平时⽤到哪些关系型数据库和⾮关系数据库, 可以谈谈你对它们的理解吗?

出现概率: ★★★★★

主要讲讲你⽤过的关系型数据库⽐如MySQL, ⾮关系数据库(NoSql数据库)⽐如Redis, MongoDB等等。

1)、事务⽅⾯

关系型数据库的最⼤特点就是事务的⼀致性, 所以对于订单模型 对⼀致性要求⽐较⾼的还是建议⽤MySQL

2)、关系数据库的另⼀个特点就是其具有固定的表结构

其实在业务模型中, 表结构固定反⽽是⼀件好事, 没有约束的模型 更容易出问题。

3)、复杂SQL,特别是多表关联查询

NoSql是不⽀持JOIN 这种查询的。

4)、索引⽅式

关系型数据库:B树、哈希等

NoSql:键值索引

5)、并发⽀持

关系型数据库:通过事务和锁来⽀持并发,⾼并发情况下,执⾏效率较低。

NoSql:打破了传统关系型数据库范式的约束和事务⼀致性,因此并发性能⾼。

当然⾃⼰也可以多延伸看⼀下, 毕竟这个⾯试出现的概率还是蛮⾼的。

5、可以简单说说你对MySQL的逻辑架构了解吗?

出现概率: ★★★

第⼀层是服务器层,主要提供连接处理、授权认证、安全等功能。

第⼆层实现了 MySQL 核⼼服务功能,包括查询解析、分析、优化、缓存以及⽇期和时间等所有内置函数,所有跨存储引擎的功能都在这⼀层实现,例如存储过程、触发器、视图等。

第三层是存储引擎层,存储引擎负责 MySQL 中数据的存储和提取。服务器通过 API 与存储引擎通信,这些接⼝屏蔽了不同存储引擎的差异,使得差异对上层查询过程透明。除了会解析外键定义的 InnoDB 外,存储引擎不会解析 SQL,不同存储引擎之间也不会相互通信,只是简单响应上层服务器请求。

6、了解MySQL中的MVCC是什么?

出现概率: ★★★

MVCC 是多版本并发控制,在很多情况下避免加锁,⼤都实现了⾮阻塞的读操作,写操作也只锁定必要的⾏。

InnoDB MVCC 通过在每⾏记录后⾯保存两个隐藏的列来实现,这两个列⼀个保存了⾏的创建时间,⼀个保存⾏的过期时间间。不过存储的不是实际的时间值⽽是系统版本号,每开始⼀个新的事务系统版本号都会⾃动递增,事务开始时刻的系统版本号会作为事务的版本号,⽤来和查询到的每⾏记录的版本号进⾏⽐较。MVCC 只能在 READ COMMITTED  REPEATABLE READ 两个隔离级别下⼯作,因为 READ UNCOMMITTED 总是读取最新的数据⾏,⽽不是符合当前事务版本的数据⾏,⽽ SERIALIZABLE 则会对所有读取的⾏都加锁。

7PostgreSQL相对于MySQL的优势

出现概率: ★★★★

SQL的标准实现上要⽐MySQL完善,⽽且功能实现⽐较严谨;

存储过程的功能⽀持要⽐MySQL好,具备本地缓存执⾏计划的能⼒;

对表连接⽀持较完整,优化器的功能较完整,⽀持的索引类型很多,复杂查询能⼒较强;

PG主表采⽤堆表存放,MySQL采⽤索引组织表,能够⽀持⽐MySQL更⼤的数据量。

PG的主备复制属于物理复制,相对于MySQL基于binlog的逻辑复制,数据的⼀致性更加可靠,复制性能更⾼,对主机性能的影响也更⼩。

8PostgreSQLMySQL的⼀些区别

出现概率: ★★★★

这个其实出现的概率还⽐较⾼, ⾃⼰可以说⼏点就⾏了

MySQL不⽀持地理数据类型。

9.2开始,PG⽀持json数据类型。相对于MySQL来说,PGjson的⽀持⽐较先进。他有⼀些json指定的操作符和函数,是的搜索json⽂本⾮常⾼效。9.4开始,可以以⼆进制的格式存储json数据,⽀持在该列上进⾏全⽂索引(GIN索引),从⽽在json⽂档中进⾏快速搜索。

5.7开始,MySQL⽀持json数据类型,⽐PG晚。也可以在json列上建⽴索引。然⽽对json相关的函数的⽀持⽐较有限。不⽀持在json列上全⽂索引。由于MySQLSQL⽀持的限制,在存储和处理json数据⽅⾯,MySQL不是⼀个很好的选择。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向前齐步走

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值