http://www.cnblogs.com/andy-zhou/p/5316023.html 也能够看看 html
http://blog.csdn.net/ghevinn/article/details/8674058 一些sql语句面试
(一)什么是存储过程?有哪些优缺点?http://www.cnblogs.com/knowledgesea/archive/2013/01/02/2841588.html sql
存储过程是一些预编译的SQL语句。 Transact-Structured Query Language 结构化查询语言数据库
什么是存储过程:存储过程能够说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法同样实现一些功能(对单表或多表的增删改查),而后再给这个代码块取一个名字,在用到这个功能的时候调用他就好了。
存储过程的好处:
1.因为数据库执行动做时,是先编译后执行的。然而存储过程是一个编译过的代码块,因此执行效率要比T-SQL语句高。
2.一个存储过程在程序在网络中交互时能够替代大堆的T-SQL语句,因此也能下降网络的通讯量,提升通讯速率。
3.经过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。编程
触发器是一中特殊的存储过程,主要是经过事件来触发而被执行的。它能够强化约束,来维护数据的完整性和一致性,能够跟踪数据库内的操做从而不容许未经许可的更新和变化。能够联级运算。如,某表上的触发器上包含对另外一个表的数据操做,而该操做又会致使该表触发器被触发。c#
尽量使用约束,如 check, 主键,外键,非空字段等来约束,这样作效率最高,也最方便。其次是使用触发器,这种方法能够保证,不管什么业务系统访问数据库均可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样作麻烦,编程复杂,效率低下。安全
(二)索引是什么?有什么做用以及优缺点?网络
索引是对数据库表中一或多个列的值进行排序的结构,是帮助MySQL高效获取数据的数据结构数据结构
你也能够这样理解:索引就是加快检索表中数据的方法。数据库的索引相似于书籍的索引。在书籍中,索引容许用户没必要翻阅完整个书就能迅速地找到所须要的信息。在数据库中,索引也容许数据库程序迅速地找到表中的数据,而没必要扫描整个数据库。并发
MySQL数据库几个基本的索引类型:普通索引、惟一索引、主键索引、全文索引
(三)什么是事务?
事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操做序列,这些操做要么都执行,要么都不执行,它是一个不可分割的工做单位。事务是数据库维护数据一致性的单位,在每一个事务结束时,都能保持数据一致性。
http://www.cnblogs.com/fjdingsd/p/5273008.html 本篇讲诉数据库中事务的四大特性(ACID),而且将会详细地说明事务的隔离级别。
原子性是指事务包含的全部操做要么所有成功,要么所有失败回滚,这和前面两篇博客介绍事务的功能是同样的概念,所以事务的操做若是成功就必需要彻底应用到数据库,若是操做失败则不能对数据库有任何影响。
一致性是指事务必须使数据库从一个一致性状态变换到另外一个一致性状态,也就是说一个事务执行以前和执行以后都必须处于一致性状态。
拿转帐来讲,假设用户A和用户B二者的钱加起来一共是5000,那么无论A和B之间如何转帐,转几回帐,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
隔离性是当多个用户并发访问数据库时,好比操做同一张表时,数据库为每个用户开启的事务,不能被其余事务的操做所干扰,多个并发事务之间要相互隔离。
即要达到这么一种效果:对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始以前就已经结束,要么在T1结束以后才开始,这样每一个事务都感受不到有其余事务在并发地执行。
关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即使是在数据库系统遇到故障的状况下也不会丢失提交事务的操做。
例如咱们在使用JDBC操做数据库时,在提交事务方法后,提示用户事务操做完成,当咱们程序执行完成直到看到提示后,就能够认定事务以及正确提交,即便这时候数据库出现了问题,也必需要将咱们的事务彻底执行完成,不然就会形成咱们看到提示事务处理完毕,可是数据库由于故障而没有执行事务的重大错误。
(四)数据库的乐观锁和悲观锁是什么?
数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。
乐观并发控制(乐观锁)和悲观并发控制(悲观锁)是并发控制主要采用的技术手段。
(五) 使用索引查询必定能提升查询的性能吗?为何
一般,经过索引查询数据比全表扫描要快.可是咱们也必须注意到它的代价.
索引须要空间来存储,也须要按期维护, 每当有记录在表中增减或索引列被修改时,索引自己也会被修改. 这意味着每条记录的INSERT,DELETE,UPDATE将为此多付出4,5 次的磁盘I/O. 由于索引须要额外的存储空间和处理,那些没必要要的索引反而会使查询反应时间变慢.使用索引查询不必定能提升查询性能,索引范围查询(INDEX RANGE SCAN)适用于两种状况:
(六)简单说一说drop、delete与truncate的区别
SQL中的drop、delete、truncate都表示删除,可是三者有一些差异
(七)drop、delete与truncate分别在什么场景之下使用?
(八) 超键、候选键、主键、外键分别是什么?
超键:在关系中能惟一标识元组的属性集称为关系模式的超键。一个属性能够为做为一个超键,多个属性组合在一块儿也能够做为一个超键。超键包含候选键和主键。
候选键:是最小超键,即没有冗余元素的超键。
主键:数据库表中对储存数据对象予以惟一和完整标识的数据列或属性的组合。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
外键:在一个表中存在的另外一个表的主键称此表的外键。
(九)什么是视图?以及视图的使用场景有哪些?
视图是一种虚拟的表,具备和物理表相同的功能。能够对视图进行增,改,查,操做,试图一般是有一个表或者多个表的行或列的子集。对视图的修改不影响基本表。它使得咱们获取数据更容易,相比多表查询。
以下两种场景通常会使用到视图:
(十)说一说三个范式。
第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。这个单一属性由基本类型构成,包括整型、实数、字符型、逻辑型、日期型等。
第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖(部分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的状况),也即全部非关键字段都彻底依赖于任意一组候选关键字。
第三范式(3NF):在第二范式的基础上,数据表中若是不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖,指的是如 果存在"A → B → C"的决定关系,则C传递函数依赖于A。所以,知足第三范式的数据库表应该不存在以下依赖关系: 关键字段 → 非关键字段 x → 非关键字段y