数据库面试

WHERE与HAVING与ON

事务

数据库面试

🪡索引

数据库索引

索引是对数据表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。索引有助于更快的获取信息。

索引的一个主要目的就是加快检索表中数据的方法,亦即能协助信息搜索者尽快的找到符合限制条件的记录ID的辅助数据结构。

数据库事务

数据库事务(Database Transaction),是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部操作成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务时数据库运行中的逻辑工作单位,由DBMS中的事务管理子系统负责事务的处理。

数据库事务隔离

同一时间,只允许一个事务请求统一数据,u痛的事务之间彼此美欧任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转钱。

inner joinleft join

left join(左连接)返回包括左表中的所有记录和右边中联结字段相等的记录

right join(右连接)返回包含右表中所有记录和左表中联结字段相等的记录

inner join(等值连接)只返回两个表中联结字段相等的行

example:

某网站包含两个表,Customers 表和 Orders 表。编写一个 SQL 查询,找出所有从不订购任何东西的客户。

Customers 表:

+——+———-+
| Id | Name |
+——+———-+
| 1 | Joe |
| 2 | Henry |
| 3 | Sam |
| 4 | Max |
+——+———-+
Orders 表:

+——+——————+
| Id | CustomerId |
+——+——————+
| 1 | 3 |
| 2 | 1 |
+——+——————+
例如给定上述表格,你的查询应返回:

+—————-+
| Customers |
+—————-+
| Henry |
| Max |
+—————-+

1
2
3
4
5
select c.Name as Customers
from Customers c
left join Orders d
on c.Id = d.CustomerId
where d.CustomerId is null

数据库事务的一致性

事务是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元。事务时DBMA中最基础的单位,事务不可分割。

事务具有四个特征:分别是原子性、一致性、隔离性、持续性。简称ACID。

mysql的四种隔离状态

Mysql主要包含四种隔离状态:读未提交、不可重复读、可重复读、串行化

事务隔离级别 脏读 不可重复读 幻读
读未提交(read-uncommitted)
不可重复读(read-committed)
可重复读(repeatable-read)
串行化(serializable)

请你介绍一下mysql的MVCC机制

MVCC是一种多版本并发控制机制,是MySQL的InnoDB存储引擎实现隔离级别的一种具体方式,用于实现提交读和可重复读这两种隔离级别。MVCC是通过保存数据在某个时间点的快照来实现该机制,其在每行记录后面保存两个隐藏的列,分别保存这个行的创建版本号和删除版本号,然后Innodb的MVCC使用到的快照存储在Undo日志中,该日志通过回滚指针把一个数据行所有快照连接起来。

数据库默认端口

1、mysql的默认端口是3306,可以编辑用户目录下的 .my.cnf 文件进行修改;

2、sqlserver默认端口号为:1433;

3、oracle默认端口号为:1521;

4、DB2默认端口号为:50000;

5、PostgreSQL默认端口号为:5432。

主键索引和普通索引的区别

1.主键索引索引着数据,然而普通索引索引着主键ID值(这是在innodb中,但是如果是myisam中,主键索引和普通索引是没有区别的都是直接索引着数据)
2.当你查询用的是where id=x 时,那只需要扫描一遍主键索引,然后拿到相应数据,但是如果是查询的普通索引的话,那么会先扫描一次普通索引,拿到主键值,然后再去扫主键索引,拿到所需要的数据,这个过程叫做回表