一、什么是事务以及事务的特性
事务是并发控制的基本单位,是用户定义的一个操作序列。
原子性。要么执行,要么不执行。
隔离性。所有操作执行完以前,其他会话不能看到过程。
一致性。事务的前后数据的总额一致。
持久性。一旦事务提交,对数据的改变就是永久的。
二、数据库隔离级别。
1、读未提交
该级别允许脏数据,是隔离级别中最低的。
脏数据:一个事务修改了某条数据但是还未提交,此时另一个事务也访问了该数据,导致数据不一致。
2、读已提交
不同事务执行的时候只能获取到已提交的事务,不会发生脏数据但是可能发生不可重复读。
不可重复读:事务在对某条数据执行两次操作语句期间由于其他事务修改了这条数据导致两次执行的结果不同。
3、可重复读
在事务处理过程中,多次读取同一数据时,该事务的值和事务开始时的值是一致的,不会发生脏数据和不可重复读,但是可能发生幻读。
4、顺序读
最严格的事务隔离级别,它不允许事务并发执行 这四种隔离级别从上到下并发性越差隔离级别越高一般数据默认是读已提交或可重复读。
三、什么是存储过程?
存储过程是一些预编译的SQL语句,它是由一些T-SQL语句构成的代码块,这些代码块像一个方法一样实现某些功能,然后给这个代码块取一个名字,当用到这些功能的时候调用它就可以了。
好处:
1、数据库执行动作是先编译后执行,但是存储过程是一个编译过的代码块,因此执行效率高。
2、一个存储过程在网络交互时能代替大量的T-SQL语句,可以提高网络通信量提高通讯速率。
3、通过存储过程能够使没有权限的用户在控制之下间接的存取数据库,无需再额外的赋予权限。
四、索引
索引是存储引擎中用于快速找到记录的一种数据结构。
注:索引虽然能提高查询速度,但是也会导致数据库系统更新数据性能的下降,因为大部分数据更新的同时需要更新索引。
索引的类型:
1、聚集索引。表顺序按照索引的顺序存储,对于聚集索引,叶子节点储存了真实的数据行,不再有单独的数据页。
2、非聚集索引。表顺序与索引的顺序无关,对于非聚集索引,叶节点包含索引字段值及指向数据页数据行的逻辑指针,该层紧邻数据页,其行数量与表行数量一致。
五、数据库的悲观锁和乐观锁
悲观锁和乐观锁是并发控制的主要手段。
悲观锁:假定会发生并发冲突,屏蔽一切可能会引发数据完整性的操作( 悲观锁是利用数据库本身提供的锁机制来实现的 )
乐观锁:假定不会发生冲突,只在提交操作时检查是否违反数据完整性。
六、drop、delete和truncate的区别
delete和truncate只是删除表的数据不会删除表结构。
删除速度drop>truncate>delete
delete语句提交之后才能生效,可以回滚。drop和truncate执行之后立刻生效,不可以回滚。
想删除表的时候用drop
想删除几条数据用delete
想删除整个表数据用truncate
七、什么是视图
视图是一种虚拟的表,具有和物理表相同的功能,可以对视图进行增、改、查操作,对视图的修改不影响基本表。
八、三个范式
第一范式:强调的是列的原子性,即列不可再分。
说明:在任何关系型数据库中,第一范式是对关系模式设计的基本要求,一般设计中都必须满足第一范式。不过有些关系模型突破了第一范式的限制,这种称为非第一范式的关系模型。换句话说,是否满足第一范式,主要依赖于所使用的关系模型。
第二范式:首先满足第一范式,其次表必须有主键且没有包含在主键的列必须完全依赖于主键而不能只依赖于主键的一部分。比如一张表数据依赖两个主键,但有的列只依赖一个主键,这个表就不满足第二范式。需要将满足一个主键的列拆分开来。
第三范式:在第二范式的基础上消除传递依赖。第三范式是第二范式的子集,也就是说满足第三范式一定满足第二范式。