数据库介绍
(一)概念介绍
数据库:存储数据的仓库。对数据进行存储,并且提供增、删、改、查的数据操作。
数据库建模:使用数据库来表达业务和业务的关系,数据建模成功与否决定了项目 的成败。
业务逻辑:实体业务之间的关系,比如:养殖场,猪和饲养员的关系。
事务:
事务:是作为一个单元的一组有序的数据库操作,如果组当中所有操作都成功,则事务执行成功,如果有一个操作执行失败,则事务执行失败,回滚操作。
事务的特性:
- 原子性:
事务包含的所有操作全部成功,要么全部失败回滚;成功必须完全应 用到数据库,失败则不能不能对数据库产生影响。
- 一致性:
事务执行前和执行后必须处于一致状态。
- 隔离性:
当多用户并发访问数据库时候,数据库为每一个用户开启一个事务, 这个事务不被其他事务操作干扰,多个并发事务直接互相隔离。
- 持久性:
一旦事务被提交了,那么数据库当中的数据改变是永久性的,即便数 据库系统发生故障,也不会丢失事务操作。
事务的回滚:
事务是用户定义的一组数据库操作。这些操作要么全做,要么全不做,回滚会自动是将该事务完成的操作撤销。
数据库提供的四种隔离等级:
如果我们不考虑隔离性,会导致
- 脏读
在一个事务处理的过程当中读取另一个没有提交的事务当中的数据,然后使用了数据。
A向B转账100元,A通知B查看账户,B发现已经到账,转账操作过程当中,事务发生问题,进行回滚,B再查账发现没有成功。
- 不可重复读
在一个事务之内,多次读取一条数据,这个事务没有结束,另一个事务也访问这个数据,第二个事务访问数据要对数据进行修改,那么一个数据两次事务读到的结果肯能不一样。
- 幻读
有两个事务,第一个操作所有的数据,第二个操作一条数据,第二个事务没有提交,第一个事务查看到的数据是之前的。
以上的问题都处于数据库没有隔离性。
隔离性的四个等级
Read uncommited(读未提交),最低级别,任何情况都可以发生。
Read commited(读已提交),可以避免脏读
Repeatable read(可重复读),可以避免脏读,不可重复读的发生
Serializable(串行化),可以避免脏读,不可重复读,幻读的发生
数据库分类
关系型数据库:是建立在在关系模型的基础上的数据库,借助集合,代数等数学概念和方法来处理数据。
Oracle,db2,sqlserver,access,Mysql,sqlite
非关系型数据库(nosql not only sql):以key-value形式存储的文档数据库
Redis、mongodb
{“name”:”筑基丹”,”img”:[“1.jpg”,“1.jpg”,“1.jpg”]}
(二)MYSQL数据库
Mysql引擎
数据库的引擎是用于存储,处理和保护数据的核心服务。利用数据库引擎可以控制访问权限并且快速的处理事务,利用数据库引擎创建连接事务处理。
MySQL数据库引擎分类
(1)ISAM
ISAM是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数据库被查询的次数要远大于更新的次数。因此,ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM的两个主要不足之处在于,它不支持事务处理,也不能够容错:如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把ISAM用在关键任务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL能够支持这样的备份应用程序。
(2)MYISAM
MYISAM是MYSQL的ISAM扩展格式和缺省的数据库引擎。除了提供ISAM里所没有的索引和字段管理的功能,MYISAM还使用一种表格锁定的机制,来优化多个并发的读写操作。其代价是你需要经常运行OPTIMIZE TABLE命令,来恢复被更新机制所浪费的空间。MYISAM还有一些有用的扩展,例如用来修复数据库文件的MYISAMCHK工具和用来恢复浪费空间的MYISAMPACK工具。
MYISAM强调了快速读取操作,这可能就是为什么MYSQL受到了WEB开发如此青睐的主要原因:在WEB开发中你所进行的大量数据操作都是读取操作。所以,大多数虚拟主机提供商和INTERNET平台提供商只允许使用MYISAM格式。
(3)HEAP
HEAP允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。在数据行被删除的时候,HEAP也不会浪费大量的空间。HEAP表格在你需要使用SELECT表达式来选择和操控数据的时候非常有用。要记住,在用完表格之后就删除表格。
(4)INNODB和BERKLEYDB
INNODB和BERKLEYDB(BDB)数据库引擎都是造就MYSQL灵活性的技术的直接产品,这项技术就是MYSQL++ API。在使用MYSQL的时候,你所面对的每一个挑战几乎都源于ISAM和MYISAM数据库引擎不支持事务处理也不支持外来键。尽管要比ISAM和MYISAM引擎慢很多,但是INNODB和BDB包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。如前所述,如果你的设计需要这些特性中的一者或者两者,那你就要被迫使用后两个引擎中的一个了。