1.truncate、delete、drop的区别
用法:truncate 表名;delete from 表名 where...;drop table 表名;
区别:
truncate、drop是不可以rollback的,但是delete是可以rollback的;原因是:delete删除是一行一行的删除,会触发触发器,删除可以返回行数,每删除一行会进行一次日志记录,所以可回滚;而truncate删除是删除表的所有数据,通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放,所以不能回滚,可以重置自增字段的计数器;Drop语句将删除表的结构、被依赖的约束(constrain)、触发器 (trigger)、索引(index);依赖于该表的存储过程/函数将保留,但是变为invalid状态。
注意:drop、truncate不能删除有外键约束的表。
2.数据库三范式
第一范式(1NF):是指数据库表的每一列都是不可分割,即列不可分。
第二范式(2NF):非主属性必须完全依赖主键,不能部分依赖主键,即不能部分依赖。
第三范式(3NF):属性不依赖于其它非主属性,即不能传递依赖。
3.数据库事务四大特性ACID
原子性:一个事务是一个不可分割的最小工作单元,其操作要么全部成功,要么全部失败。
一致性:数据库总是从一个一致性状态转换为另一个一致性状态。所谓一致性状态,就是数据库的所有完整性约束(尤其注意用户定义约束)都被遵守,以银行转账为例,“转账操作必然导致一个账户减少金额,另一个账户增加金额,且这两个账户总金额之和不变”就是一个完整性约束。
持久性:一旦事务提交,则其所作的修改就会永久保存到数据库中。
隔离性:隔离性用于定义事务之间的相互隔离程度,存在四个隔离级别。
首先需要解释一下几个跟隔离性相关的概念定义:
(1)脏读:指事务读到脏数据,所谓脏数据,指的是不正确的数据,例如事务执行过程中修改了某记录,然后回滚,如果其他事务读到了该记录的中间修改值,则为