第五章 MySQL事务,视图,索引,备份和恢复
第五章 MySQL事务,视图,索引,备份和恢复
一.事务
1.什么是事务
事务是一种机制,一个操作序列,它包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求。要么都执行,要么都不执行。
事务是作为最小的控制单元来使用的,特别使用与多用户同时操作的数据库系统。
2.为什么需要事务
事务(transaction)是指将一系列数据操作捆绑成为一个整体进行统一管理,如果某一事务执行成功,则在该事务中进行的所有数据均会提交,成为数据库中永久的组成部分。如果事务执行遇到错误且必须取消或回滚,则数据将全部恢复到操作前的状态,所有数据的更改均被清除。
3.事务的特性
事务是作为单个工作逻辑单元执行的一系列操作,一个逻辑工作单元必须要有四个属性,即:ACID
1) 原子性(Atomicity)。事务是一个完整的操作,事务的各个元素是不可分的(原子性)。事务中的所有元素必须作为一个整体提交或回滚。
2) 一致性(consistency)。当事务完成时,数据必须处于一致状态。也就是说,在事务开始之前,数据库中存储的数据处于一致状态,在正在进行的事务中,数据可能处于不一致的状态,如数据可能有部分修改。然而当事务完成时,数据必须再次回到已知的一致状态。
3) 隔离性(lsolation)。对数据库修改的所有并发事务是彼此隔离的,当一个事务正在执行修改时,另一个事务不能同时进行修改,必须等到第一个事务完毕后才能操作,因此表明事务必须时独立的。
4) 持久性(durability)。事务的持久性是指不管系统是否发生了故障,事务处理的结果都是永久的。
4.如何执行事务
MySQL提供了多种存储引擎支持事务,支持事务的存储引擎有InnoDB和BDB。InnoDB存储引擎事务主要时通过UNDO日志和REDO日志,MyISAM存储引擎不支持事务。
任何一种数据库,都有各种各样的日志,用来记录数据库的运行情况,日常操作,错误信息等。
A) UNDO日志:复制事务执行前的数据,用于事务在发生异常时回滚数据。
B) REDO日志:记录事务在执行中,每条对数据库进行更新的操作,当事务被提交时,该内容将被刷新到磁盘。
执行事务的语法:
(1) 开始事务:begin;或者start transaction;
(2) 提交事务:commit;
(3) 回滚(撤销)事务:rollback;
执行事务的示例:
/*开始事务*/向学生表插入一批学生成绩
BEGIN;
INSERT INTO `result` VALUES
(100000,2,NOW(),100),
(100001,1,NOW(),90),
(100002,2,NOW(),80);
SELECT * FROM `result`;#如果用SQLyog会显示已经在表里面更新了数据,实际上数据库并没有更新数据
COMMIT;#提交
SELECT * FROM `result`;#提交过后数据库里面会更新数据
BEGIN;
INSERT INTO `result` VALUES
(100003,2,NOW(),110),
(100004,1,NOW(),900);
ROLLBACK;#回滚
SELECT * FROM `result`;#执行回滚后查询数据没有任何变化
5.使用事务要遵守的原则
- 事务尽可能简短。在多用户系统中,较大的事务会占用大量的资源,会影响软件的运行性能,甚至导致系统崩溃。
- 事务中访问的数据量尽量最少。当并发执行时,数据操作的数据量越少,事务之间对数据的争夺就越少。
- 查询数据时尽量不要使用事务。查询操作并不会更新数据库,反而会浪费系统资源。
- 在事务处理过程中尽量不要出现等待用户输入的操作。如果在事务的执行过程中,如果需要等待用户输入数据,那么该事务会长事件的占用系统资源,可能造成系统阻塞。
二.视图
1.为什么需要视图
在实际工作中,不同身份的用户所关注的数据库数据可能不同,不同职位的人对数据库中查询的数据范围权限也不同。
数据库管理系统提供的视图这类数据库对象,可以把重复使用的复杂的查询结果保存成视图,也可以设定不同访问范围的视图,不同岗位的员工根据自己的权限来查看相关的数据,以保证数据访问的安全性。
2.什么是视图
视图是另一种查看数据库中一个或多个表中的数据的方法,视图是一种虚拟表,通常作为一个或多个表的行或列的子集创建的。
A) 视图通常用来进行的四项操作:
- 筛选表中的行
- 防止未经许可的用户访问敏感的数据表
- 将多个物理数据表抽象为一个逻辑数据表
- 降低数据的复杂程度
B) 视图对用户的好处:
- 结果更加容易理解。创建视图时可以将列名改为更加有意义的列名,而不会影响物理的数据库数据。
- 获得数据更加容易。可以直接通过视图查看数据,不需要自己写查询语句。
C) 视图对开发人员的好处:
- 限制数据检索更容易。可以有效的隐藏某些敏感数据
- 维护应用程序更方便。调试视图比调试查询更容易。
3.视图的使用
1.使用SQL语句创建视图
语法:CREATE VIEW 视图名
AS
<SELECT 语句>;
在SQL语句命名规范中,视图一般是以view_xxx或v_xxx的样式来命名的。
2.使用SQL语句删除视图
语法: DROP VIEW [IF EXISTS] 视图名;
3.使用SQL语句查看视图数据
语法:SELECT 字段1,字段2…..FROM view_name(视图名);
4.使用视图的注意事项
1) 每个视图中可以使用多个表。
2) 与查询相似,一个视图可以嵌套另一个视图,最好不要超过三层。
3) 对视图数据进行添加,更新和删除操作直接引用表中的数据。
4) 当视图数据来自多个表时,不允许添加和删除数据,会影响表中数据的完整性。
5.使用视图特别注意事项
1.)使用视图修改数据会有许多限制和逻辑关系,一般在实际开发中视图仅用作查询。
2.)查看所有视图的语法:
SELECT * FROM views\G;
三.索引
1.什么是索引
索引是一种有效组合数据的方式,可以快速查找到指定的记录,类似与书籍中目录。
2.索引的作用
1) 大大提高数据库的检索速度。
2) 改善数据库的性能。
3.索引分类
索引的存储类型可以分为B-树索引(BTREE)和哈希表(HASH)。InnoDB和MyISAM存储引擎支持B-树索引。
1) 普通索引;最基本索引类型,允许在定义索引的列中插入重复值和空值。它的唯一任务时加快对数据库的访问速度。因此,应该只为最常出现的查询条件(WHERE)或排序条件(ORDER BY)中数据列创建索引。
2) 唯一索引;唯一索引不允许两行具有相同的索引值,允许有一个空值。
若是创建了唯一约束,则将自动创建唯一索引。尽管唯一索引有助于找到信息,但是为了获得最佳的性能,仍建议使用主键约束。
3) 主键索引;主键索引要求主键中的每个值都是非空的,唯一的,它允许快速访问数据。
在数据关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。
4) 复合索引;将多个列合并作为索引,这种索引称为复合索引。
需要注意的是:只有在查询中使用了复合索引最左边的字段时,索引才会被使用,即第一个字段作为前缀的集合。
5) 全文索引;全文索引的作用是支持值的查找,允许出现空值和重复值。全文索引可以在CHAR,VARCHAR或者TEXT类型的列上创建,全文索引的效率大大高于”LIKE”关键字。MySQL5.5中只有MyISAM存储引擎支持全文索引。
6) 空间索引;空间索引是对空间数据类型的列建立的索引,如GEOMETRY,POINT等,创建空间索引列必须将其声明为NOT NULL, MySQL5.5中只有MyISAM存储引擎支持空间索引。
4.创建索引
语法:
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
ON table_name (column_name[length]…………..);
其中:UNIQUE 表示唯一索引,FULLTEXT 表示全文索引, SPATIAL表示空间索引,为可选参数。
Index_name表示索引名;
Table_name表示创建索引的表名;
Column_name指定需要创建索引的列;
Length指定索引的长度,可选参数,只有字符串类型才能指定索引的长度。
5.删除索引
语法:
DROP INDEX index_name ON table_name;
6.查看索引
语法:
SHOW INDEX FROM table_name;
7.使用索引的原则
因为索引自身也需要维护,并占用一定的资源,因此没有必要为每个列都添加索引,如下条件可添加索引;
1) 频繁搜索的列
2) 经常用作查询的列
3) 经常排序,分组的列
4) 经常用作连接的列(主键、外键)
请不要给下面的列创建索引:
- 仅包含几个不同值的列
- 包中仅包含几行
- 为小型表创建索引不太使用,因为索引中搜索数据所花的事件比表中逐行搜索花的时间更长。
四.MySQL的备份和恢复
1.备份数据库
语法:在DOS环境下运行
Mysqldump –u username –h host -ppassword
Dbname[tbname1,tabnem2….]>filename.sql
例:
/*导出数据*/
mysqldump -u root -proot;
myschool student result>d:\bf\myschool.sql;
2.恢复数据库
语法:mysql –u username -p [dbname]<filename.sql;在DOS环境下运行
或: source filename;
例:
/*导入数据*/
CREATE DATABASE `newMySchool`;#被导入的数据库必须存在
mysql -u root -proot newMySchool<d:\bf\myschool.sql;
3.数据表导出到文本文件
语法:SELECT columnlist FROM tablename
[WHERE contion ]
INTO OUTFILE `filename`[OPTION];
例:
#导出科目表的记录并存储为.txt文件
SELECT * FROM `subject`
INTO OUTFILE `d:/beifen/subject.txt`;
4.文本文件倒入到数据表
语法:LOAD DATA INFILE filename INTO TABLE tablename[OPTION];
例:
DELETE FROM `subject`;#删除科目表中的数据保证表是空的
LOAD DATA INFILE `d:/beifen/subject.txt`INTO TABLE `subject`;
第五章 MySQL事务,视图,索引,备份和恢复的更多相关文章
- 关于MySQL 事务,视图,索引,数据库备份,恢复
/*创建数据库*/ CREATE DATABASE `mybank`;/*创建表*/USE mybank;CREATE TABLE `bank`( `customerName` CHAR(1 ...
- mysql第五篇 : MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
第五篇 : MySQL 之 视图.触发器.存储过程.函数.事物与数据库锁 一.视图 视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称 ...
- 第七章 mysql 事务索引以及触发器,视图等等,很重要又难一点点的部分
[索引] 帮助快速查询 MyISAM ,InnoDB支持btree索引 Memory 支持 btree和hash索引 存储引擎支持 每个表至少16个索引 总索引长度至少256字节 创建索引的优 ...
- mysql事务,视图,触发器,存储过程与备份
.事务 通俗的说,事务指一组操作,要么都执行成功,要么都执行失败 思考: 我去银行给朋友汇款, 我卡上有1000元, 朋友卡上1000元, 我给朋友转账100元(无手续费), 如果,我的钱刚扣,而朋友 ...
- Linux 笔记 - 第十五章 MySQL 常用操作和 phpMyAdmin
博客地址:http://www.moonxy.com 一.前言 前面几章介绍了 MySQL 的安装和简单的配置,只会这些还不够,作为 Linux 系统管理员,我们还需要掌握一些基本的操作,以满足日常管 ...
- 数据库基础知识详解五:MySQL中的索引和其两种引擎、主从复制以及关系型/非关系型数据库
1.MySQL中的索引 在MySQL,索引是由B+树实现的,B+是一种与B树十分类似的数据结构. 形如下面这种: 其结构特点: (1)有n课子树的结点中含有n个关键码. (2)非根节点子节点数: ce ...
- [MySQL Reference Manual] 7 备份和恢复
7. 备份和恢复 本章主要会介绍: 1.备份的类型:逻辑备份,物理备份,全备和增量4种 2.创建备份的方法 3.还原方法,包括还原到时间点 4.备份计划,压缩和加密 5.表维护,恢复损坏的表 7. 备 ...
- MySQL二进制日志的备份和恢复
二进制日志:记录数据库修改的相关操作,作用是即时点回复,主从复制 可以按时间滚动,也可以按大小滚动 server-id:服务器身份标识 一.二进制文件的删除方法,千万不要手动删除 PURGE BINA ...
- mysql基础之数据库备份和恢复的基础知识
备份数据的最终目的是为了在出现一些意外情况时,能够通过备份将数据还原,所以单单的备份数据往往是无法满足还原时的需求的,所以在备份数据库时,除了要备份数据本身,还要备份相关的数据库环境,如配置文件,定时 ...
随机推荐
- MySQL中char与varchar区别,varchar最大长度是多少?
一.首先来说下字符与字节的区别: 字符与字节它们完全不是一个位面的概念,所以两者之间没有"区别"这一说法.在不同编码里,字符和字节的对应关系是不同的.一般来说,半角英文状态下一个字 ...
- Bootstrap框架的了解和使用(一)
前 言 Bootstrap 什么是 Bootstrap?Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架.Bootstrap 是基于 HTML.CSS.JavaScrip ...
- 团队作业10——项目复审与事后分析(Beta阶段)
一.Beta阶段项目复审 http://www.cnblogs.com/womenshuodedoudui/p/7001208.html 二.事后诸葛分析 http://www.cnblogs.com ...
- 201521123007《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- 201521123042 《Java程序设计》第12周学习总结
本次作业参考文件 正则表达式参考资料 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String ...
- 201521123042《Java程序设计》第11周学习总结
作业参考文件 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同 ...
- 第一部分----HTML的基本结构与基本标签
PART-1 HTML的基本结构以及Header的部分 一.什么是HTML? HTML是超文本标签语言,即网页的源码.而浏览器就是翻译解释HTML源码的工具. 二.HTML文档的结构: 三.详细注释 ...
- 如何选择适合的前端UI框架
根据近几年前端框架的热门,在前端开发框架不断更新与交换的时代,每一年都有黑马出现,是否适合自己开发的项目就不得而知了,只有认真的了解之后才能知道,这里主要给大家说一下如何选择适合旅游的前端UI框架?相 ...
- Spring第七篇【Spring的JDBC模块】
前言 上一篇Spring博文主要讲解了如何使用Spring来实现AOP编程,本博文主要讲解Spring的对JDBC的支持- 对于JDBC而言,我们肯定不会陌生,我们在初学的时候肯定写过非常非常多的JD ...
- eclipse复制到IDEA中文不匹配,编译失败
今天使用把eclipse的包复制到Intellij Idea下,结果在编译的时候,它说我的数据是GBK,而Idea默认的数据是UTF-8,因此出错了... 解决:在项目中直接把对象的encoding. ...