数据库面试题

数据库基础(面试常见题)

一、数据库基础

  1. 数据抽象:物理抽象、概念抽象、视图级抽象。

  2. 数据库系统的三级模式结构:

    1. 内模式:是数据物理结构与存储方式的描述,定义数据在数据库内部的表示方式
    2. 模式:是数据库中全体数据的全体逻辑结构描述,是所有用户的公共数据视图。包括数据的逻辑结构(数据项的名字、类型、取值范围等)、联系、安全性和完整性要求
    3. 外模式:介于模式与应用之间,是特定数据库用户的数据视图。它面向具体的应用程序,独立于存储模式和存储设备。外模式与授权配合,限制用户只能访问所对应的外模式中的数据,可以保证数据库安全性。
  3. 三级模式、两级映像可以保证数据的独立性。

  4. SQL语言包括数据定义、数据操纵(Data Manipulation),数据控制(Data Control)
    数据定义:Create Table,Alter Table,Drop Table, Craete/DropIndex等
    数据操纵:Select ,insert,update,delete,
    数据控制:grant,revoke,commit,rollback

  5. SQL常用命令:
    CREATE TABLE Student(
    ID NUMBER PRIMARY KEY,
    NAME VARCHAR2(50) NOT NULL);//建表

    CREATE VIEW view_name AS
    Select * FROM Table_name;//建视图

    Create UNIQUE INDEX index_name ON TableName(col_name);//建索引

    INSERT INTO tablename {column1,column2,…}values(exp1,exp2,…);//插入
    INSERT INTO Viewname {column1,column2,…} values(exp1,exp2,…);//插入视图实际影响表
    UPDATE tablename SET name=’zang 3’ condition;//更新数据
    DELETE FROM Tablename WHERE condition;//删除

    GRANT (Select,delete,…) ON (对象) TO USER_NAME [WITHGRANT OPTION];//授权
    REVOKE (权限表) ON(对象) FROM USER_NAME[WITH REVOKE OPTION] //撤权

    列出工作人员及其领导的名字:
    Select E.NAME, S.NAME FROM EMPLOYEE E S
    WHERE E.SUPERName=S.Name

  6. 视图:命名的导出表,是从一个或几个基本表(或视图)导出的表,但是视图的数据并不物理的存储在数据库中(物化视图除外)。

  7. 完整性约束:实体完整性、参照完整性、用户定义完整性

    1. 实体完整性:每个关系的主码既不能为空,也不能取空值。
    2. 参照完整性:要么不参照,要么被参照的对象必须存在。(弱实体集必须包含外码且不能为空)。
    3. 用户定义完整性(系统提供定义和检验这类完整性的处理方法,比如check(<条件>),以及用户对属性的取值范围作出规定。
  8. 第三范式:
    1NF:每个属性是不可分的。
    2NF:若关系R是1NF,且每个非主属性都完全函数依赖于R的键。例SLC(SID#, CourceID#, SNAME,Grade),则不是2NF;
    3NF:若R是2NF,且它的任何非键属性都不传递依赖于任何候选键。

  9. ER(实体/联系)模型:一种概念模型(从用户角度出发建模),可以转化成关系模型

  10. 索引作用

    1. 通过创建唯一性索引,可以保证该属性值的唯一性。
    2. 可以大大加快 数据的检索速度。
    3. 可以加快表之间的连接速度,加快表的分组和排序工作。
  11. 事务:是一系列的数据库操作,是数据库应用的基本逻辑单位。
    事务性质:原子性、隔离性、持久性、一致性。ACID

    原子性。即不可分割性,事务要么全部被执行,要么就全部不被执行。
    一致性。事务的执行使得数据库从一种正确状态转换成另一种正确状态
    隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务。
    持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。

  12. 锁:共享锁(其他事务只能获得写锁)、排他锁
    两段锁协议:阶段1:加锁阶段 阶段2:解锁阶段

  13. 死锁:两个或两个以上的事务之间的循环等待现象。
    活锁:饥饿,某个事务因等待锁而处于无限期等待状态。

    死锁的预防——操作系统中是“银行家算法”:
    1. 一次封锁法——每个事务必须一次将所有要使用的数据全部加锁后,在实际执行事务操作。
    2. 顺序封锁方法——预先对数据对象规定一个封锁顺序,所有的事务都按这个顺序实行封锁。

    死锁的检测:超时或事务等待图法(有向图,有环即死锁)——操作系统中的是“资源-进程图法”。

    死锁的解除:撤销死锁集合内的事务并释放这些事务持有的所有的锁(该事务必须回滚,可能会有级联回滚)。

  14. 存储过程:存储过程就是编译好了的一些sql语句。

    1. 存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。
    2. 可保证数据的安全性和完整性。通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。
    3. 可以降低网络的通信量。存储过程主要是在服务器上运行,减少对客户机的压力。
    4. 存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因
    5. 存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。
  15. 触发器trigger: 当满足触发器条件,则系统自动执行触发器的触发动作。
    触发时间:有before,after.触发事件:有insert,update,delete三种。触发类型:有行触发、语句触发
    实例
    银行透支:头知识将存款余额置0,然后建立一笔贷款,其金额=透支额。
    存货报警。

  16. 内联接,外联接(避免信息丢失)区别?
    内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。
    在外连接中,把不满条件的列也显示出来,对应元组在另一个表的属性取值为空。分左连接、右连接、全连接三种。

  17. 隔离级别:读取未提交、读取已提交、可重复读、序列化(default)。

隔离级别 封锁协议 解决的问题
读取未提交 一级 丢失修改
读取已提交 二级 度脏数据
可重复读 三级 不可重复读
序列化(default) 幻影读

并发执行可能导致的问题:

问题 原因
丢失修改 A读-》B写-》A写
读脏数据 A写-》B读-》A回滚
不可重复读 A读-》B写-》A读
幻影读 数据条数增加或减少

                                            以下是经典面试题(转载)

1. MySQL中varchar与char的区别?

1.char长度固定,varchar长度可变。varchar(40)代表最多存储40个字符。 (char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节))

2.char访问速度更快(可以理解为空间换时间)。 对于 innodb 存储引擎 建意使用varchar 类型

拓展:mysql的存储引擎

2、MySQL中myisam与innodb的区别,至少5点不同

1>.InnoDB支持事物,而MyISAM不支持事物 2>.InnoDB支持行级锁,而MyISAM支持表级锁
3>.InnoDB支持MVCC, 而MyISAM不支持 4>.InnoDB支持外键,而MyISAM不支持
5>.InnoDB不支持全文索引,而MyISAM支持。

(2)、innodb引擎的4大特性
插入缓冲(insert buffer),二次写(double
(3)、2者selectcount(*)哪个更快,为什么
myisam更快,因为myisam内部维护了一个计数器,可以直接调取。

你可能感兴趣的:(大学基础知识)