第五章 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. 事务中访问的数据量尽量最少。当并发执行时,数据操作的数据量越少,事务之间对数据的争夺就越少。
  3. 查询数据时尽量不要使用事务。查询操作并不会更新数据库,反而会浪费系统资源。
  4. 在事务处理过程中尽量不要出现等待用户输入的操作。如果在事务的执行过程中,如果需要等待用户输入数据,那么该事务会长事件的占用系统资源,可能造成系统阻塞。

二.视图

1.为什么需要视图

在实际工作中,不同身份的用户所关注的数据库数据可能不同,不同职位的人对数据库中查询的数据范围权限也不同。

数据库管理系统提供的视图这类数据库对象,可以把重复使用的复杂的查询结果保存成视图,也可以设定不同访问范围的视图,不同岗位的员工根据自己的权限来查看相关的数据,以保证数据访问的安全性。

2.什么是视图

视图是另一种查看数据库中一个或多个表中的数据的方法,视图是一种虚拟表,通常作为一个或多个表的行或列的子集创建的。

A) 视图通常用来进行的四项操作:

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

B) 视图对用户的好处:

  1. 结果更加容易理解。创建视图时可以将列名改为更加有意义的列名,而不会影响物理的数据库数据。
  2. 获得数据更加容易。可以直接通过视图查看数据,不需要自己写查询语句。

C) 视图对开发人员的好处:

  1. 限制数据检索更容易。可以有效的隐藏某些敏感数据
  2. 维护应用程序更方便。调试视图比调试查询更容易。

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)  经常用作连接的列(主键、外键)

请不要给下面的列创建索引:

  1. 仅包含几个不同值的列
  2. 包中仅包含几行
  3. 为小型表创建索引不太使用,因为索引中搜索数据所花的事件比表中逐行搜索花的时间更长。

四.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事务,视图,索引,备份和恢复的更多相关文章

  1. 关于MySQL 事务,视图,索引,数据库备份,恢复

      /*创建数据库*/ CREATE DATABASE `mybank`;/*创建表*/USE mybank;CREATE TABLE `bank`(    `customerName` CHAR(1 ...

  2. mysql第五篇 : MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁

    第五篇 : MySQL 之 视图.触发器.存储过程.函数.事物与数据库锁 一.视图 视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称 ...

  3. 第七章 mysql 事务索引以及触发器,视图等等,很重要又难一点点的部分

    [索引] 帮助快速查询 MyISAM ,InnoDB支持btree索引 Memory 支持 btree和hash索引 存储引擎支持 每个表至少16个索引   总索引长度至少256字节   创建索引的优 ...

  4. mysql事务,视图,触发器,存储过程与备份

    .事务 通俗的说,事务指一组操作,要么都执行成功,要么都执行失败 思考: 我去银行给朋友汇款, 我卡上有1000元, 朋友卡上1000元, 我给朋友转账100元(无手续费), 如果,我的钱刚扣,而朋友 ...

  5. Linux 笔记 - 第十五章 MySQL 常用操作和 phpMyAdmin

    博客地址:http://www.moonxy.com 一.前言 前面几章介绍了 MySQL 的安装和简单的配置,只会这些还不够,作为 Linux 系统管理员,我们还需要掌握一些基本的操作,以满足日常管 ...

  6. 数据库基础知识详解五:MySQL中的索引和其两种引擎、主从复制以及关系型/非关系型数据库

    1.MySQL中的索引 在MySQL,索引是由B+树实现的,B+是一种与B树十分类似的数据结构. 形如下面这种: 其结构特点: (1)有n课子树的结点中含有n个关键码. (2)非根节点子节点数: ce ...

  7. [MySQL Reference Manual] 7 备份和恢复

    7. 备份和恢复 本章主要会介绍: 1.备份的类型:逻辑备份,物理备份,全备和增量4种 2.创建备份的方法 3.还原方法,包括还原到时间点 4.备份计划,压缩和加密 5.表维护,恢复损坏的表 7. 备 ...

  8. MySQL二进制日志的备份和恢复

    二进制日志:记录数据库修改的相关操作,作用是即时点回复,主从复制 可以按时间滚动,也可以按大小滚动 server-id:服务器身份标识 一.二进制文件的删除方法,千万不要手动删除 PURGE BINA ...

  9. mysql基础之数据库备份和恢复的基础知识

    备份数据的最终目的是为了在出现一些意外情况时,能够通过备份将数据还原,所以单单的备份数据往往是无法满足还原时的需求的,所以在备份数据库时,除了要备份数据本身,还要备份相关的数据库环境,如配置文件,定时 ...

随机推荐

  1. angular指令笔记(一):ng-options

    1.ng-options指令用途: 在表达式中使用数组或对象来自动生成一个select中的option列表.ng-options与ng-repeat很相似,很多时候可以用ng-repeat来代替ng- ...

  2. 二,ESP8266 GPIO和SPI和定时器和串口

    让这个灯亮 我们写lua用这个软件 链接:http://pan.baidu.com/s/1kVN09cr 密码:pfv7 http://www.cnblogs.com/yangfengwu/p/624 ...

  3. GUI记事本+切换面板1.1版

    package com.niit.javagui; import java.awt.Color; import java.awt.MenuBar; import java.awt.event.Inpu ...

  4. 【Alpha】——Second Scrum Meeting

    一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 李永豪 完成登录按钮代码 完成添加功能 郑靖涛 完成登录按钮代码 完成删除功能 杨海亮 完成注册按钮代码 完成查找 ...

  5. 201521123122 《java程序设计》 第四周学习总结

    1. 本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 这个思维导图比较简单,详细内容点击此处 2. 书面作业 注释的应用 使用类的注释与方法的注释 ...

  6. 201521123026《Java程序设计》第2周学习总结

    1. 本章学习收获 1.熟悉了码云的部分功能的使用 2.java编程基础的巩固以及延伸 3.解决了部分PTA编程时所遇到困难并明白了解决困难的方法的原理 4.了解了用package和import管理类 ...

  7. 201521123059 《Java程序设计》第一周学习总结

    第一周学习总结 1.本周学习总结 开学第周我们开始了JAVA学习,刚开始还有点懵,连熟悉相关的软件都要摸索很久,最后在看老师给的一些教程和课本的情况下安装了JDK和eclipse等软件,并进行了一次实 ...

  8. 201521123096《Java程序设计》第九周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...

  9. Java第九周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...

  10. 201521123045 《JAVA程序设计》第1周学习总结

    1. 本周学习总结 学习了入门的java知识,知道了jdk.eclipse等基础软件,了解了如何编译最基础的java程序.知道了java的基本原理以及java的几种数据类型.掌握使用简单编译器编写ja ...