第四章 事务、视图、索引、备份和恢复

事务

事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作

多个操作作为一个整体向系统提交,要么都执行、要么都不执行

事务是一个不可分割的工作逻辑单元 

转账过程就是一个整体 它需要两条UPDATE语句来完成,这两条语句是一个整体 如果其中任一条出现错误,则整个转账业务也应取消,两个账户中的余额应恢复到原来的数据,从而确保转账前和转账后的余额不变,即都是1001元

实例:张三转账给李四


事务就是发生异常  回滚到初始状态

事务必须具备以下四个属性,简称ACID 属性

原子性(Atomicity)
事务是一个完整的操作,事务的各步操作是不可分的(原子的),要么都执行,要么都不执行
一致性(Consistency)
当事务完成时,数据必须处于一致状态
隔离性(Isolation)
并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务
持久性(Durability)
事务完成后,它对数据库的修改被永久保持
 

如何创建事务

MySQL中支持事务的存储引擎有InnoDB和BDB
语法:   开始事务  BEGIN ;或  START TRANSACTION;
    提交事务  COMMIT ;
    回滚(撤销)事务  ROLLBACK ;

示例:
从张三的账户转出500元,存入李四的账户中

自动关闭和开启事务

默认情况下,每条单独的SQL语句视为一个事务
关闭默认提交状态后,可手动开启、关闭事务
语法:
关闭/开启自动提交状态  SET autocommit = 0|1;
值为0:关闭自动提交
值为1:开启自动提交
注意:关闭自动提交后,从下一条SQL语句开始则开启新事务,需使用COMMIT或ROLLBACK语句结束该事务

题目:批量插入参加今天“Logic Java”课程考试的十名学生成绩
            如果输入的成绩大于100分,则取消操作

题目:办理学生离校手续   将毕业学生的基本信息和考试成绩分别保存到历史表中
            使用事务完成以下操作
            查询result表中所有Y2学员的考试成绩,保存到表historyResult中
            删除result表中所有Y2学员的考试成绩
            查询student表中所有Y2学员的记录,保存到表historyStudent中
            删除student表中所有Y2学员的记录
            提交事务,查看各表中数据的变化
            回滚事务,查看各表中数据的变化

 

为什么需要视图

不同的人员关注不同的数据
保证信息的安全性

什么是视图

视图是一张虚拟表
表示一张表的部分数据或多张表的综合数据
其结构和数据是建立在对表的查询基础上
视图中不存放数据
数据存放在视图所引用的原始表中
一个原始表,根据不同用户的不同需求,可以创建不同的视图
 

视图的用途

筛选表中的行
防止未经许可的用户访问敏感数据
降低数据库的复杂程度
将多个物理数据库抽象为一个逻辑数据库


如何创建视图

语法:CREATE VIEW view_name  AS <SELECT 语句>;

使用SQL语句删除视图

语法:DROP VIEW [IF EXISTS] view_name;   
备注:if exists是删除前判断视图是否存在


使用SQL语句查看视图

语法:SELECT 字段1, 字段2, …… FROM view_name;

题目:创建方便教师查看成绩的视图

使用视图注意事项

视图中可以使用多个表
一个视图可以嵌套另一个视图 
对视图数据进行添加、更新和删除操作直接影响所引用表中的数据
当视图数据来自多个表时,不允许添加和删除数据

查看所有视图

语法:USE information_schema; SELECT * FROM views\G;
提示:使用视图修改数据会有许多限制,一般在实际开发中视图仅用作查询

题目:查看学生各科目考试成绩平均分,统计每个学生所参考课程的平均成绩

什么是索引

汉语字典中的汉字按页存放,一般都有汉语拼音目录(索引)、偏旁部首目录等
我们可以根据拼音或偏旁部首,快速查找某个字词

索引是一种有效组合数据的方式,为快速查找到指定记录
作用:大大提高数据库的检索速度,改善数据库性能
MySQL索引按存储类型分类

B-树索引:InnoDB、MyISAM均支持
哈希索引

常用索引类型

如何创建/删除索引

创建索引
语法:CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
            ON table_name (column_name[LENGTH]…);
             唯一索引、全文索引或空间索引,可选
删除索引
语法:DROP  INDEX index_name ON table_name;
删除表时,该表的所有索引同时会被删除 

题目:在student表的studentName列创建普通索引

创建索引的指导原则

按照下列标准选择建立索引的列
    频繁搜索的列
    经常用作查询选择的列
    经常排序、分组的列
    经常用作连接的列(主键/外键)
请不要使用下面的列创建索引
    仅包含几个不同值的列
    表中仅包含几行

使用索引时注意事项

查询时减少使用*返回全部列,不要返回不需要的列
索引应该尽量小,在字节数小的列上建立索引
WHERE子句中有多个条件表达式时,包含索引列的表达式应置于其他条件表达式之前
避免在ORDER BY子句中使用表达式

查看索引
语法:SHOW INDEX FROM table_name;

命令提示符的提示:

Table:创建索引的表
Non_unique:索引是否非唯一
Key_name:索引的名称
Column_name:定义索引的列字段
Seq_in_index:该列在索引中的位置
Null:该列是否能为空值
Index_type:索引类型


题目:创建学生表和成绩表索引并查看索引
为提高以下查询的速度,为学生表和成绩表添加适合的索引,并查看索引
按学生名和年级编号组合查询
学生身份证号是唯一的
按成绩区间范围查找学生考试信息

 

为什么进行数据库备份  

数据库故障
突然断电
病毒入侵
误操作导致数据丢失

使用mysqldump命令备份数据库

mysqldump命令——MySQL一个常用的备份工具
将CREATE和INSERT INTO语句保存到文本文件     属于DOS命令

语法:mysqldump [options] –u username –h host –ppassword dbname[tbname1[,tbname2……]]>filename.sql

注意:mysqldump是DOS系统下的命令, 在使用时无须进入mysql命令行,否则将无法执行

示例:使用root账户登录到MySQL服务器,备份myschool数据库下的student表

注意:为保证账户密码安全,命令中可不写密码,但参数“-p”必须有,回车后根据提示写密码

常用参数选项

此操作是指导处数据,不添加create语句,且转存表。

 

备份文件包含的主要信息

备份后文件包含信息MySQL及mysqldump工具版本号
备份账户的名称
主机信息
备份的数据库名称
SQL语句注释和服务器相关注释
CREATE和INSERT语句

恢复数据库

方法一:使用mysql命令恢复数据库
语法:mysql –u username –p [dbname] < filename.sql


注意:
1. mysql为DOS命令
2.在执行该语句之前,必须在MySQL服务器中创建新数据库,如果不存在恢复数据库过程将会出错

示例:使用备份文件将myschool数据库中student表信息恢复到schoolDB数据库中

方法二:使用source命令恢复数据库

语法:source filename;
注意:登录MySQL服务后使用,执行该命令前,先创建并选择恢复后的目标数据库

通过复制文件实现数据备份和恢复

直接复制MySQL数据库的存储目录及文件进行备份


注意:此方法不是最优的数据库备份和恢复方案!

猜你喜欢

转载自blog.csdn.net/doudou19930614/article/details/81203913