MySQL数据库技术面试盘点第二期

107 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

数据库是软件开发中非常重要的一环,数据是这个时代真正值钱的东西。本期就来讨论关于数据库在面试中会遇到的一些问题,其中包含个人一些理解,由于本人学识有限,难免会有纰漏之处,还望读者能多多包涵。

最麻烦也是最没营养的就是软件的安装和配置。MySQL在企业里大部分是运行在Linux系统之上。服务器用的多的受欢迎的Linux发行版主要是RHEL(RedHat Enterprise Linux),其开源版本是CentOS,相信很多人都用过。那么安装就有3种方式:

  1. 直接利用RPM包管理器来安装,十分方便。缺点是一台服务器只能安装一个版本的MySQL/MariaDB软件。
  2. 二进制文件安装。下载后解压即可使用。其实RPM安装也是二进制安装,只是帮你管理了依赖。
  3. 源码安装。因为下载的是源代码文件,所以需要编译,但比较灵活,可以根据自己需求修改代码,定制属于自己的MySQL。

1、事务隔离级别

隔离级别脏读            不可重复读幻读         
读未提交(Read Uncommitted, RU)
读已提交(Read committed,RC)
可重复读(Repeatable Read,RR)
串行化(Serializable)

MySQL默认事务隔离级别为RR;Oracle默认为RC。

2、SQL语言

结构化查询语言(Structured Query Language)简称SQL。 SQL的范围包括数据插入(insert)、查询(select)、更新(update)和删除(delete),数据库模式创建和修改,以及数据访问控制。

SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL。(原本规范要用大写,我图看着舒服,全部用了小写)

  1. DQL基本结构是由select,from,where组成的查询块。一般一条完整的查询语句如下:
select con1,con2,... from student where age=20 group by 分组字段 having 条件 order by 排序字段

执行顺序:from->where->group by->having->order by->select

  1. DML主要有三种形式:insert、update和delete。
  2. DDL用来创建数据库中的各种对象-----表、视图、索引、同义词、聚簇等。由create、alter、drop和truncate组成。
  3. DCL用来授予或回收访问数据库的某种特权。简单说就是访问控制权限,这些操作的可以使数据更加地安全。一般有grant:授权,允许对象的创建者给某用户或某组或所有用户(PUBLIC)某些特定的权限。Revoke语句:可以废除某用户或某组或所有用户访问权限。rollback:回滚,使数据库状态回到上次最后提交的状态。commit:提交,在数据库的插入、删除和修改操作时,只有当事务在提交到数据库时才算完成。

image.png 此外需要注意的是,drop、delete和truncate都用于删除,但略有区别。

  1. drop直接删掉表;drop table table_name 立刻释放磁盘空间 ,不管是 InnoDB 和 MyISAM;drop 语句将删除表的结构被依赖的约束(constrain)、触发器(trigger)、索引(index); 依赖于该表的存储过程/函数将保留,但是变为 invalid 状态。
  2. truncate删除的是表中的数据,再插入数据时自增长的数据id又重新从1开始;
  • truncate:不走事务,原数据不放到 rollback segment 中,操作不触发 trigger。 执行后立即生效,无法找回 执行后立即生效,无法找回 执行后立即生效,无法找回

  • truncate table table_name立刻释放磁盘空间 ,不管是 InnoDB和MyISAM。

  • truncate能够快速清空一个表。并且重置auto_increment的值。

  1. delete删除表中数据,可以在后面添加where字句。delete from TABLE_NAME where id=1
  • delete只删除数据不删除表的结构,会走事务,执行时会触发trigger;

  • InnoDB引擎中,delete不会真正删除数据,只是把删除的数据标记为已删除,因此delete删除表中的数据时,表文件在磁盘上所占空间不会变小,存储空间不会被释放。但是下次插入数据的时候,仍然可以重用这部分空间(重用 → 覆盖)。

  • DELETE执行时,会先将所删除数据缓存到rollback segement中,事务commit之后生效;

  • delete from table_name删除表的全部数据,对于MyISAM 会立刻释放磁盘空间,InnoDB则不会;

  • 对于delete from table_name where xxx 带条件的删除, 不管是InnoDB还是MyISAM都不会释放磁盘空间;

3、关联查询

SQL有五种关联查询

  1. 交叉连接(CROSS JOIN)
  2. 内连接(INNER JOIN)
  3. 外连接(LEFT JOIN/RIGHT JOIN)
  4. 联合查询(UNION 与 UNION ALL)
  5. 全连接(FULL JOIN)(MySQL不支持

select * from Atable  inner join Btable  on Atable.aid=Btable.bid; select * from Atable  left join Btable  on Atable.aid=Btable.bid; select * from Atable cross join Btable;

SELECT column_name(s)  FROM table1 UNION SELECT column_name(s)  FROM table2;

ok,本期就到这里,下一期继续讲解数据库方面的知识点,敬请关注。