数据库基础:
什么是数据库:储存电子文件仓库,对文件数据进行存储并增删,截取,更新,删除等,操作。简称 :增,删,改,查
隐性功能:数据库建模: 使用数据库来表达业务和业务的关系,数据建模成功与否决定了业务的成败
业务逻辑:实体业务逻辑之间的实质性关系
关键点: 事物,事物的特性, 事物的回滚
(1)事务定义:作为一个单元的一组有序数据库的操作。如果所有操作成功,则事物执行成功,如果一个失败,则事物执行失败,回滚操作
或者说:绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。
(2) 事务的特性:
1.原子性: 事物包含的使用操作要么全部成功,要么全部失败,回滚;成功必须完全应用到数据库,失败则不能对数据库产生 影响
2.一致性; 事务执行前和执行后必须处于一致性状态,
3.隔离性: 多个用户并发(不一定同时执行)访问时,数据库为每一个用户开启事物彼此之间不被其他的干扰,多个并发之间 相互隔离
4:持久性:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便在数据库系统遇到故障的情况下也不会 丢失事物的操作。
(3)事务回滚 :
作为同步的几份数据文件如果不在同一个事物,如果不能都被修改,那么修改过的文件会自动还原成修改前的原样称之为回滚
(4)数据库提供的四种隔离级别:
如果不考虑隔离性,会导致 脏读
隔离性:当多个线程开启事物时,为了保证各线程获取数据的准确性,而进行的隔离操作
会产生的问题
(1)脏读 在一个事物助理的过程中读取另一个没有提交的数位当中的数据,然后使用的数据
(2)不可重复读取:在同一个事物内,多次读取时,一个没执行完就再读一次,而且两次的 事物可能不同,而且数据可能在一次中修改,而导致的数据不同,或者其他问题
注意: 一,不可重复读和脏读的区别,脏读是某一个事务读取另一个事务未提交的脏数据; 不可重复读则是读取前一事务提
幻读:
注:(一)幻读和不可重复读都读取另一条已经提交的事务,所不同的是不可重复读查询的都是同一数据项,而幻读针对的是一批数据整体。
(二)以上问题都是数据库的隔离性不好
隔离性的四个等级
Read uncommitted(读未提交):最低级别,任何情况都会发生。
Read Committed(读已提交):可避免脏读的发生。
Repeatable read(可重复读):可避免脏读、不可重复读的发生。
Serializable(串行化):避免脏读、不可重复读,幻读的发生。
四种隔离级别最高:Seralizable级别,最低的是Read uncommitted级别; 级别越高,执行效率就越低;
Mysql的默认隔离级别是:可重复读:Repeatable read;
oracle数据库中,只支持seralizable(串行化)级别和Read committed();默认的是Read committed级别;
数据库分类:
关系型数据库的三大范式
关系型数据库:是建立在关系模型的基础上的数据库,借助集合,代数等数学概念和方法来处理数据
Oracle , db2 ,sqlerver , access , MySQL ,sqlite (Python自带的数据库)
第一范式(1NF):要求数据库表的每一列都是不可分割的原子数据项。
第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖)
第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
非关系型数据库: 非关系型数据库,又被称为NoSQL(Not Only SQL ),意为不仅仅是SQL,具备Key-Value 存储和文档数据库的优点。有Redis ,mongodb
{“name”:"丹",“img”:[“1.jpg”,“1.jpg”,“1.jpg”]}
2. MySQL数据库引擎分类
MySQL引擎:数据库的引擎是用于处理和保护数据的核心服务。利用数据库引擎可以控制访问权限并快速处理事物,利用数据库引擎创建连接事物处理。
(1)ISAM
定义明确且历经时间考验的数据表格管理方法
2)MYISAM
MYISAM是MYSQL的ISAM扩展格式和缺省的数据库引擎。
(3)HEAP
HEAP允许只驻留在内存里的临时表格。
(4)INNODB和BERKLEYDB
INNODB和BERKLEYDB(BDB)数据库引擎都是造就MYSQL灵活性的技术的直接产品,这项技术就是MYSQL++ API。