MySQL面试题

文章目录

  • 什么是数据库事务?
  • Mysql事务的四大特性是什么?
  • 什么是脏读、不可重复读、幻读呢?
  • varchar和char有什么区别?
  • exist和in的区别?
  • 说一下数据库的三大范式?
  • 什么是关系型数据库?
  • 关系型数据库有什么优势?
  • MySQL 有哪些数据类型?
  • 说一下数据库设计三范式是什么?
  • SQL 语句有哪些分类?
  • 数据库删除操作中的 delete、drop、 truncate 区别在哪?
  • 什么是MySql视图?
  • 什么是索引?
  • 主键 超键 候选键
  • 关系数据库中的“依赖”定义
  • 多表查询(重要)
  • 关系数据库标准语言SQL
  • 数据库的完整性

✨ 思考是行动的种子。—— 爱默生

什么是数据库事务?

数据库事务: 是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。

Mysql事务的四大特性是什么?

  • 原子性: 事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。
  • 一致性: 指在事务开始之前和事务结束以后,数据不会被破坏,假如A账户给B账户转10块钱,不管成功与否,A和B的总金额是不变的。
  • 隔离性: 多个事务并发访问时,事务之间是相互隔离的,即一个事务不影响其它事务运行效果。
  • 持久性: 表示事务完成以后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。

什么是脏读、不可重复读、幻读呢?

  • 脏读: 脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并不一定最终存在的数据,这就是脏读。
  • 不可重复读: 不可重复读指的是在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据出现不一致的情况。
  • 幻读: 幻读,并不是说两次读取获取的结果集不同,幻读侧重的方面是某一次的 select 操作得到的结果的数据状态无法支撑后续的业务操作。更为具体一些:select 某记录是否存在,不存在,准备插入此记录,但执行 insert 时发现此记录已存在,无法插入,此时就发生了幻读。

varchar和char有什么区别?

char是一个定长字段,假如申请了char(10)的空间,那么无论实际存储多少内容.该字段都占用10个字符,而varchar是变长的,也就是说申请的只是最大长度,占用的空间为实际字符长度+1,最后一个字符存储使用了多长的空间。
在检索效率上来讲,char > varchar,因此在使用中,如果确定某个字段的值的长度,可以使用char,否则应该尽量使用varchar.

exist和in的区别?

– in
select * from a where id in (select id from b);
– exists
select * from A where exists(select 1 from B where B.id = A.id);
使用in时,sql语句是先执行子查询,也就是先查询子表b,再查主表a。而使用exists是先查主表a ,再查询子表b。
根据小表驱动大表(即小的数据集驱动大的数据集)的原则,如果主查询中的表较大且又有索引时应该用in。 反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。
还有一点注意的是用 exists 该子查询实际上并不返回任何数据,而是返回值True或False。
not in 和not exists
如果查询语句使用了not in 那么内外表都进行全表扫描,没有用到索引;而not extsts 的子查询依然能用到表上的索引。所以无论哪个表更大,用not exists都比not in要快。

说一下数据库的三大范式?

  • 第一范式:数据表中的每一列(每个字段)都不可以再拆分。
  • 第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
  • 第三范式:在满足第二范式的基础上,表中的非主键只依赖于主键,而不依赖于其他非主键。

什么是关系型数据库?

关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。
简单来说,关系模式就是二维表格模型。

关系型数据库有什么优势?

关系型数据库的优势:

  • 易于理解
    关系型二维表的结构非常贴近现实世界,二维表格,容易理解。
  • 支持复杂查询 可以用 SQL 语句方便的在一个表以及多个表之间做非常复杂的数据查询。
  • 支持事务 可靠的处理事务并且保持事务的完整性,使得对于安全性能很高的数据访问要求得以实现。

MySQL 有哪些数据类型?

MySQL 数据类型非常丰富,常用类型简单介绍如下:
整数类型:BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、 INT、 BIG INT
浮点数类型:FLOAT、DOUBLE、DECIMAL
字符串类型:CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
日期类型:Date、DateTime、TimeStamp、Time、Year
其他数据类型:BINARY、VARBINARY、ENUM、SET…

说一下数据库设计三范式是什么?

1范式:1NF是对属性的原子性约束,要求属性具有原子性,不可再分解;(只要是关系型数据库都满足1NF)
2范式:2NF是对记录的惟一性约束,要求记录有惟一标识,即实体的惟一性;
3范式:3NF是对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余。没有冗余的数据库设计可以做到

SQL 语句有哪些分类?

  1. 数据查询语言(DQL):用来查询记录。保留字:select、where、order by、group by、having。
  2. 数据操作语言(DML):用来操纵数据库记录。保留字:insert、update、delete。
  3. 数据定义语言(DDL):用来定义数据库的表、库、列等对象。保留字:create、alter、drop、truncate
  4. 数据控制语言(DCL):用来定义访问权限和安全级别。保留字:commit,rollback、savepoint、grant、revoke。

数据库删除操作中的 delete、drop、 truncate 区别在哪?

  • 当不再需要该表时可以用 drop 来删除表;
  • 当仍要保留该表,但要删除所有记录时, 用 truncate来删除表中记录。
  • 当要删除部分记录时(一般来说有 WHERE 子句约束) 用 delete来删除表中部分记录。

什么是MySql视图?

视图是虚拟表,并不储存数据,只包含定义时的语句的动态数据。
CREATE
[OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
[DEFINER = user]
[SQL SECURITY { DEFINER | INVOKER }]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

什么是索引?

索引是存储引擎用于提高数据库表的访问速度的一种数据结构。它可以比作一本字典的目录,可以帮你快速找到对应的记录。
索引一般存储在磁盘的文件中,它是占用物理空间的。
索引的优缺点?
优点:

  • 加快数据查找的速度
  • 为用来排序或者是分组的字段添加索引,可以加快分组和排序的速度
  • 加快表与表之间的连接
    缺点:
  • 建立索引需要占用物理空间
  • 会降低表的增删改的效率,因为每次对表记录进行增删改,需要进行动态维护索引,导致增删改时间变长

主键 超键 候选键

  1. 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键
  2. 候选键(candidate key):不含有多余属性的超键称为候选键
  3. 主键(primary key):用户选作元组标识的一个候选键称为主键
  4. 外键:如果模式R中属性K是其他模式的主键,那么K在模式R中称为外键。

关系数据库中的“依赖”定义

部分函数依赖
完全函数依赖
传递函数依赖

SQL 语句中修改表结构的命令是(ALTER TABLE)

多表查询(重要)

多表查询有如下几种:

  • 合并结果集;UNION 、 UNION ALL
  • 连接查询
  • 内连接 [INNER] JOIN ON
  • 外连接 OUTER JOIN ON
  • 左外连接 LEFT [OUTER] JOIN
  • 右外连接 RIGHT [OUTER] JOIN
  • 全外连接(MySQL不支持)FULL JOIN
  • 自然连接 NATURAL JOIN
  • 子查询

关系数据库标准语言SQL

插入数据
insert
into <表名> [<属性列1> [,<属性列2>]…]
values(<常量1> [,<常量2>]…)
修改数据
update <表名>
set <列名>=<表达式> [,<列名>=<表达式>]…
[where <条件>]
删除数据
delete
from <表名>
[where <条件>]
定义视图
create view <视图名> [(<列名> [,<列名>]…)]
as <子查询>
[with check option]
删除视图
drop view <视图名>

数据库的完整性

是指数据的正确性和相容性。包括:实体完整性、参照完整性、用户定义完整性。

你可能感兴趣的:(mysql,数据库,sql)