事务
1.1 为什么要用事务
假设银行转账
假定资金从A转到B,那么至少需要两步
1.账户A的资金减少
2.账户B的资金相应的增加
当A账户向B账户转账500元操作时,A账户更新完减去500,结果出现了故障,B账户没有增加500元就结束了。
如果一系列操作不能全部执行完成,那么数据的完整性就丢失了。
1.2 什么是事务?
事务时作为单个逻辑工作单元执行的一系列操作,多个操作作为一个整体向系统提交,要么都执行,要么都不执行
。事务是一个不可分隔的工作逻辑单元
上面的转账实例,转账就是一个整体,它需要两条UPDATE语句来完成,这两条语句是一个整体,如果其中任意一条出现错误,则整个业务也应该取消
,两个账户中的余额应该恢复到原来的数据,从而确保转帐前和转账后的余额不变。
1.3 事务的特性
事务必须具备以下四个属性,简称ACID属性
- 原子性
- 一致性
- 隔离性
- 持久性
脏读:脏读意味着一个事务读取了另一个事务未提交的数据
,而这个数据是有可能回滚的
不可重复读:在数据库访问中,一个事务范围内两个相同的查询(同一块数据)却返回了不同数据,这是由于查询时系统中其他事务修改的提交而引起的。
幻读(虚读):
幻读,是指当事务不是独立执行时发生额一种现象,例如第一个事务对一个表中的数据进行了修改,这总修改涉及到表中的全部数据行,同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据,那么,以后就会发生操作第一个事务的用户发现表中还没有修改的数据行,好像发生幻觉一样。
幻读和不可重复度都是读取了另一条已经提交的事务(这点就脏读不同),所不同的就是不可重复读查询都是同一个数据项,而幻读针对的是一批数据整体。
1.4 如何创建事务
开始事务
提交事务
回滚(撤销)事务
1.5自动关闭和开启事务
- 默认情况下,每条单独的SQL语句视为一个事务
- 关闭默认提交状态后,可手动开启,关闭事务
关闭/开启自动提交状态
值为0:关闭自动提交,值为1:开启自动提交
2.视图
2.1 为什么需要视图
在实际工作中,不同的身份用户所关注的数据库可能有所不同。
企业的员工信息表中保存了该企业的所有员工的详细信息,不同职位的人员对该标总查询的数据范围可能是不同的(权限)
。企业的老板关注企业员工的全部信息,他可以浏览全体员工的全部记录;企业人力资源主管主要是查询全体员工目前的岗位、薪金和绩效;企业出纳员只能查询每个员工的薪金,不能查看到企业员工的其他信息;而作为这家企业的一名员工,只能看本人记录,不得查看其他员工的任何信息。
2.2 什么是视图
视图是一张虚拟表,表示一张表的部分数据或多张表的总和数据,其结构和数据是建立在对表的查询基础上,视图中不存放数据,数据存放在视图所引用的原始表中,一个原始表根据不同用户的不同需求,可以创建不同的视图。
视图的用途:筛选表中的行,防止未经许可的用户访问敏感数据、降低数据库的复杂程度,将多个物理数据库抽象为一个逻辑数据库。
2.3 创建视图
使用SQL语句创建视图
使用SQL语句删除视图
使用SQL语句查看视图
2.4 使用视图的注意事项
- 视图中可以使用多个表
- 一个视图可以嵌套另一个视图
- 对视图数据进行添加,更新和删除操作直接影响到所引用表中的数据
- 当视图数据来自多个表时,不允许添加和删除数据
3.索引
3.1 什么是索引
索引是一种有效组合数据的设计方式,为快速查找到指定记录,SQL索引在数据优化中占有一个非常大的比例,一个号的索引设计,可以使工作效率成倍提升。
MYSQL索引按存储类型分类:
B-树索引:InnoDB、MyISAM均支持
哈希索引:对该列数据以等值查询为主,没有范围查询、没有排序的时候,特别适合采用哈希索引。
3.2 常用索引类型
3.3 如何创建/删除索引
创建的时候如果不指定其他类型索引那么就是一个普通索引。
创建索引
删除索引
3.4 创建索引的原则
3.5 使用索引的时候注意事项
3.6 查看索引
4. 数据库备份
4.1 使用mySQLdump命令数据库备份数据
mysqldump命令——MySQL一个常用的备份工具
- 将CREATE和INSERT INTO语句保存到文本文件
- 属于DOS命令
使用root账户登陆到MySQL服务器,备份myschool数据库下的student表
为保障账户密码安全,命令中不可写密码,但参数 -p必须有,回车后根据提示写密码
常用参数选项:
导出部分指定的数据库:
导出全部数据库:
备份文件包含的主要信息
- 备份后文件包含信息MySQL及mysqldump工具版本号
- 备份账户的名称
- 主机信息
- 备份的数据库名称
- SQL语句注释和服务器相关注释
- CREATE和INSERT语句
4.2 恢复数据库
使用mysql命令恢复数据库
使用source命令恢复数据库
登陆MySQL服务器后使用,执行该命令之前,先创建并选择恢复后的目标数据库,因为你导出的数据是不存在建立数据库的语句的,在使用source命令进行恢复数据库时,要恢复的文件必须和数据库同名
4.3 通过复制文件实现数据库备份和恢复
4.4 表数据导出到文本文件
导出/导入数据——可实现数据库服务器间移动数据
SELECT * FROM tablename
[WHERE contion]
INTO OUTFILE 'filename'[OPTION]
4.5 文本文件导入到数据表
LOAD DATA INFILE fiename INTO TABLE
tablename[OPTION]