*什么是数据库?数据库是按照数据结构来组织,存储和管理数据的仓库
*数据库管理系统:数据库软件(mysql,oracle,sql server等)
*数据库的设计过程?现实世界——需求分析——概要设计——逻辑设计——物理设计
*数据库的结构(三层):物理数据层(内模式);概要数据层(概要模式);用户数据层(外层模式)
*数据库的分类:层次式数据库,网络式数据库,关系式数据库
*SQL语言是数据库的核心语言:SQL语言分为四大类
DDL(数据定义语言):用来创建数据库中的各种对象(表,视图,索引等)
DML(数据操作语言):插入/更新/删除操作
DQL(数据查询语言):select/from/where子句组成的查询块
DCL(数据控制语言):用来授予或回收数据库的某种特权,并控制数据库操纵事务发生的时间及效果,对数据库实行件事等,如:
*数据库事务:是指作为单个逻辑工作单位执行的一系列操作,是并发控制的基本单位
*事务的语句:
开始事务:BEGIN TRANSACTION(事务)
提交事务:COMMIT TRANSACTION(事务)
回滚事务:ROLLBACK TRANSACTION(事务)
事务的提出主要是为了解决并发情况下保持数据的一致性的问题
*事务的四大特性:原子性,一致性,隔离性,持久性
*数据库中存在的问题:更新丢失,脏读,不可重复读,幻读
(1)更新丢失:多个线程操作,基于同一查询结构对表中的记录进行修改,后修改的记录将会覆盖前面修改的记录,前面的修改就会丢失掉,这叫更新丢失
解决办法:对行加锁,只允许并发一个更新事务
(2)脏读:A事务读取B事务尚未提交的数据并在此基础上操作,而B事务执行回滚操作,那么A读取到的数据就是脏数据
解决办法:在一个事物提交之前,任何其他事务不可读取其修改过的值
(3)不可重复读(Non-repeatable Reads):一个事务对同一行数据重复读取两次,但却得到了不同的结果。事务T1读取某一数据之后,事务T2对其进行了修改,当事务T1再次读取该数据时就会得到与前一次不同的值
解决办法:如果只有在修改事务完全提交之后才可以读取数据,则可以避免
(4)幻读:两次执行同一条select语句会出现不同的结果,第二次会增加一条数据行
解决办法:如果在操作事务完成数据处理之前,任何其他事务不可以添加新数据,则可以避免该问题
*数据库的隔离级别:(四种)
(1)读未提交(read_uncommited):事务对当前读取的数据不加锁;事务在更新某数据的瞬间,必须先对其加行级共享锁,直到事务结束才释放;
具体表现:两个事务不可以同时进行更新操作,但是一个事务读的时候,另一个事务可以进行读取,修改操作,即使未提交,也可以被其他事务读取
(2)读已提交(read_commited):事务对当前被读取的数据加行级共享锁(当读到时才加锁),一旦读完该行,立即释放该行级共享锁;事务在更新某数据的瞬间,必须先对其加行级排它锁,直至事务结束后才释放
具体表现:两个事务可同时进行读操作,但是当一个事务进行更新操作时,另外一个事务不能够进行更新操作,直至事务1结束,事务2对该记录进行更新时,事务1再次读取该记录,读到的是事务2对其进行更新前的版本
(3)可重复读(Repeatable read):事务在读取某数据的瞬间(即开始读取的瞬间),必须现对其加行级共享锁,直到事务结束才释放;事务在更新数据的瞬间(就是发生更新的瞬间),必须先对其加行排它锁,直到事务结束才释放
具体表现:两个事务可同时进行读操作,但是当一个事务进行更新操作时,另外一个事务不能够进行更新操作,直至事务1结束;当事务2对该数据进行更新时,事务1再次读取该记录,读到的任然是第一次读取的那个版本
(4)可序列化(Serializable):事务在读取数据时,必须先对其加表级共享锁,直到事务结束才释放;事务在更新数据时,必须先对其加表级排它锁,直到事务结束才释放
*数据库中的悲观锁和乐观锁
(1)悲观锁:需要关闭数据库的自动提交设置,悲观锁需要指明主键或索引(这时会对行加锁),否则会对表加锁
(2)①使用版本号②使用时间戳(实现原理在表中添加一个时间字段)
*数据库中的锁:
(1)按操作划分,可分为DML锁、DDL锁
(2)按锁的粒度划分,可分为表级锁、行级锁、页级锁(mysql)
(3)按锁级别划分,可分为共享锁、排他锁
(4)按加锁方式划分,可分为自动锁、显示锁
(5)按使用方式划分,可分为乐观锁、悲观锁
*数据库的范式:
第1范式:每个表中都有1列,并且该列是不可拆分的最小单元
第2范式:要求表中所有的列,都必须依赖于主键,不存在部分依赖问题
第3范式:要求表中每一列只与主键直接相关而不是间接,不存在传递依赖
*数据库五大约束:
1.primary KEY:设置主键约束;
2.UNIQUE:设置唯一性约束,不能有重复值;
3.DEFAULT 默认值约束,height DOUBLE(3,2)DEFAULT 1.2 height不输入是默认为1,2
4.NOT NULL:设置非空约束,该字段不能为空;
5.FOREIGN key :设置外键约束。
*关系型数据库:
**关系型数据库是依据关系模式来创建的数据库(一对一,一对多,多对多等关系模式)
常见关系型数据库:Oracle、DB2、PostgreSQL、Microsoft SQL Server、Microsoft Access、MySQL
**关系型数据库的特点:
(1)安全(因为存储在磁盘中,不会说突然断电数据就没有了)、
(2)容易理解(建立在关系模型上)、
(3)但不节省空间(因为建立在关系模型上,就要遵循某些规则,好比数据中某字段值即使为空仍要分配空间)
*非关系型数据库:
**非关系型模式有:
**常见的非关系型数据库:
**非关系型数据库的特点:
*三种数据库的比较:
(1)Sql server::
优点:易上手,真正的客户机/服务器体系,图形化用户界面,大多数建立在windows平台上,是学习其他数据库的基础,兼容性良好,提供数据库仓库功能
缺点:只能在windows上运行,没有丝毫开放性,安全性和伸缩性有限,不是免费的,数据不容易恢复
(2)Mysql
优点:是一个快速/多线程/多用户的SQL数据库服务器,免费的,支持正版SQL查询语言和采用多种数据类型,能够对数据进行各种查询,稳定且易扩展
缺点:比较难学,不支持陌生关键字,缺乏一些存储程序的功能
(3)Orace:
优点:能在所有主流平台上运行,采用完全开放原则,安全性高,性能高,采用标准的sql语句进行查询,备份恢复原理明了
缺点:不易维护,数据奔溃难处理,因为大多存储在内存里,数据库连接较慢,对硬件要求较高,价格昂贵