数据库错题要点

1.mysql 日志:

  • 二进制日志即 binlog日志 记录数据定义语言(DDL)和数据控制语言(DML) 但不包括数据查询语言。
  • 中继日志即 relaylog,也是二进制日志,用来给slave 库恢复。备库将主库的日志复制到自己的中继日志里。(中继日志不在主数据库中
  • errorlog 记录错误信息,告警信息,帮助优化。
  • slowlog 慢日志,记录了查询超过限定时间的sql,帮助SQL优化
  • operationlog 记录了所有对MySQL请求的信息
  • 事务日志包括:重做日志redo和回滚日志undo。事务日志用于实例或介质恢复。一般情况下,mysql在崩溃之后,重启服务,innodb通过回滚日志undo将所有已完成并写入磁盘的未完成事务进行rollback,然后redo中的事务全部重新执行一遍即可恢复数据,但是随着redo的量增加,每次从redo的第一条开始恢复就会浪费长的时间,所以引入了checkpoint机制。在系统崩溃重启时,作事务重做;在系统正常时,每次checkpoint时间点,会将之前写入事务应用到数据文件中。
  1. Undo记录的是已部分完成并且写入硬盘的未完成的事务,默认情况下回滚日志是记录下表空间中的(共享表空间或者独享表空间)
  2. Redo记录的是已经全部完成的事务,就是执行了commit的事务,记录文件是ib_logfile0 ib_logfile1

2.删除数据库和表的操作都是DROP;删除表中记录是DELETE。 

3.hash索引的查询效率非常高,但是由于其本身的性质,不能用于确定的范围。btree索引常用于数据库内部,可以方便的构建一个区间内的查询。

4.由于表中的记录只能以一种物理顺序存放,因此每个表只能有一个聚簇索引,但是可以有多个非聚族索引(索引顺序与物理排列顺序无关)。因此1个表只能有一个聚族索引,多个非聚族索引。索引的建立是为了快速搜索,因此字符串模糊查询不适合索引。多余的索引字段会降低性能。哈希索引并不能用于特定范围内的查询。

5.使用文件索引结构,系统会为每个文件建立一张索引表,表中的每一项记录该文件包含的存储块。采用这样的结构后,文件的长度可以动态变化,并且在增删中不必插入/删除点后的所有都移动。由于建立了索引结构,不必将逻辑上连续的文件在数据块上也连续存储,可以在访问时直接跳转到需要的数据块,提高访问速度。但由于维护索引结构本身,有一定的存储开销。

6.假设有关系模式R(A,B,C,D),其数据依赖集:F={(A,B)- >C,C->D},则关系模式R的规范化程度最高达到( )
解析: 如果A,B,C,D属性对应的阈值不可再分,R符合1NF的定义。在满足1NF的基础上,如果(A,B)为关系R的码,那么C完全依赖于码,由于D 又依赖于C,所以D也完全依赖于码,此时符合2NF的定义,即每个非主属性完全依赖于码。由于3NF的定义是不存在非主属性对码的传递依赖,而不管如何看待依赖集F,总是存在着传递依赖,所以不满足3NF,又因为只有满足了3NF才可能满足BCNF,所以该关系模式R的规范化程度最高为2NF。

7.关系数据库采用关系模型作为数据的组织方式。具有相同属性的数据独立存储在一个表中,数据库可以集中控制,维护和管理这些数据,避免了数据冗余,提高了数据的一致性。数据库中的数据独立于应用程序,数据共享性好。此外,数据库还提供统一的数据保护功能,确保了数据的安全性。(关系数据库数据独立性好,但“多用户访问”不是它的特性)


8.在关系代数中:

  • 投影操作是对一个关系进行垂直分割(关系R上的投影是从R中选择出若干属性列组成新的关系,即对关系进行垂直分割)
  • 选择操作是根据某些条件对关系进行水平分割(选择操作选出满足给定谓词的元组,即按条件对关系进行水平分割)
  • 聚集指对值的集合使用聚集函数,如计算最小值或者平均值。
  • 左外连接会保留左边关系的全部记录(左外连接取出左侧所有关系与右侧关系进行自然连接,如果右侧有不匹配的元组则用null填充,即左外连接保留了左边关系全部记录。)
9.在建立数据库连接并接收SQL语句后,数据库会依次解析并编译SQL语句,确定并优化数据获取路径,最后执行SQL语句,返回相关结果数据。

10.如果一个整型变量不赋值的话,它的值就是null

11.数据库同一个表中,列名不能相同 

12.事务是数据库管理系统的执行单位,事务隔离级别就是对事务并发控制的等级。数据库隔离级别由低到高依次为未提交读(Read-Uncommitted),已提交读(Read-Committed),可重复读(Repeatable-Read)和串行化(Serializables) 

13.一般的关系型数据库的默认级别就是已提交读,该隔离级别避免了脏读

14.可串行化可以避免所有的并发问题,但是性能比较低
15.SQL Select语句的执行顺序:
    1)from子句来计算关系;  
    2)where子句基于指定的条件对记录行进行筛选;
    3)group by子句将数据划分为多个分组;
    4)使用having子句筛选分组;
    5)select子句产生查询结果;   
    6)使用order by对结果集进行排序。

16.

    增加列:
ALTER TABLE TableName ADD COLUMN ColumnName ColumnDataType
    删除列:
ALTER TABLE TableName DROP COLUMN ColumnName;
    改变列的数据类型:
ALTER TABLE TableName MODIFY COLUMN ColumnName NewColumnDataType;
    改变列的名称和数据类型:
ALTER TABLE TableName CHANGE COLUMN ColumnName NewColumnName NewColumnDataType;

17.

扫描二维码关注公众号,回复: 2672743 查看本文章
 存储过程是一组SQL语句集,这些语句存储在服务器中,编译一次后就不需要再次编译了,调用时给出存储过程名及相应的参数即可。
    显然,由于存储过程保存在服务端,因此具有以下好处:
    1.快速。只编译一次,后续调用无需编译。
    2.减少网络流量。给出存储过程名即可,不需要再给出其中的具体的SQL语句。
    3.减少SQL注入攻击的风险。另外存储过程也可以设定权限控制。
    4.同一套存储过程可以多次反复使用,降低开发量。

18. 创建索引最大的作用是可以极大地提升查询效率,付出的代价是,在执行写操作时,更新了数据之后,还要更新索引,因此添加索引必然会在一定程度上影响表的更新、插入和删除操作的效率

猜你喜欢

转载自blog.csdn.net/Carolinedy/article/details/81204430
今日推荐