数据库面经

1.请描述数据库事务特性。
数据库事务包含四个特性,简单来说就是ACID特性:
原子性(Atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性(Correspondence):在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
隔离性(Isolation):隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请 求,使得在同一时间仅有一个请求用于同一数据。
持久性(Durability):在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。

2.请描述SQL多表连接查询分类。
连接查询主要包括内连接、自然连接、外连接、交叉连接和自连接。
(1)内连接
内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。
A.等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复属性。 (区别于自然连接)
B.不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的 列的列值。这些运算符包括>、>=、<=、<、!>、!<和<>。
(2)自然连接
自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件元组,再进行投影,去掉重复的同名属性,组成新的关系。即自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果。
(3)外连接
外连接,返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接或左连接))、右表(右外连接或右连接)或两个边接表(全外连接)中的所有数据行。
A.left join(左联接)等价于(left outer join) 返回包括左表中的所有记录和右表中联结字段相等的记录;
B.right join(右联接)等价于(right outer join)返回包括右表中的所有记录和左表中联结字段相等的记录;
C.full join (全连接)等价于(full outer join)查询结果等于左外连接和右外连接的并集。
(4)交叉连接
交叉连接不带ON子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
(5)自连接
自连接是一种特殊的内连接,连接的表是同一张表,使用自连接可以将自身表的一个镜像当作另一个表来对待,从而能够得到一些特殊的数据。

3.写一个最简单的外连接查询(表1:a 表2:b,通过a_id以及b_id关联)的SQL语句。
select a.,b. from a left join b on a.a_id = b.b_id

4.请说明数据库主键以及外键的作用,以及建立索引的优缺点。
(1)主键的作用
若某一个属性组(注意是组)能唯一标识一条记录,该属性组就是一个主键。主键不能重复,且只能有一个,也不允许为空。定义主键主要是为了维护关系数据库的完整性。
(2)外键的作用
外键用于与另一张表的关联,是能确定另一张表记录的字段。外键是另一个表的主键,可以重复,可以有多个,也可以是空值。定义外键主要是为了保持数据的一致性。
(3)索引的优点
提升数据检索的速度。
(4)索引的缺点
减慢数据新增、修改和删除的速度;
增加了数据库文件的大小。

5.请说明如何能写出高性能的SQL语句。
(1)分析语句,给表加上适当的索引
(2)避免不必要的排序
(3)减少临时表的使用
(4)避免使用游标
(5)只返回必须的字段
(6)对于统计报表的查询,可以通过汇总表结合实时查询提高查询速度
(7)对于数据量特别大的表,可以采用表分区或者分库分表
(8)尽量避免%XX%形式的模糊查询,可以借助于数据库的全文搜索或者Solr等全文搜索引擎<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值