第五章 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. 事务中访问的数据量尽量最少。当并发执行时,数据操作的数据量越少,事务之间对数据的争夺就越少。
  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`;

时间: 2024-10-13 03:58:13

第五章 MySQL事务,视图,索引,备份和恢复的相关文章

事务视图索引备份和恢复

事务 事务必须具备以下四个属性,简称ACID属性 语法 示例 自动关闭和开启事务 视图 为什么需要视图 什么是视图 视图的用途 创建视图 使用视图注意事项 原文地址:https://www.cnblogs.com/xhddbky/p/9231356.html

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

  /*创建数据库*/ CREATE DATABASE `mybank`;/*创建表*/USE mybank;CREATE TABLE `bank`(    `customerName` CHAR(10),        #用户名    `currentMoney` DECIMAL(10,2)         #当前余额);/*插入数据*/INSERT INTO `bank` (`customerName`,`currentMoney`) VALUES ('张三',1000);INSERT IN

[MySQL Reference Manual] 7 备份和恢复

7. 备份和恢复 本章主要会介绍: 1.备份的类型:逻辑备份,物理备份,全备和增量4种 2.创建备份的方法 3.还原方法,包括还原到时间点 4.备份计划,压缩和加密 5.表维护,恢复损坏的表 7. 备份和恢复... 1 7.1备份和还原类型... 1 7.1.1 物理备份VS逻辑备份... 1 7.1.2 Online VS OFFLINE. 1 7.1.3 本地VS远程... 1 7.1.4 快照备份... 1 7.1.5 全备VS增量备份... 1 7.1.6 完全恢复VS时间点(增量)恢复

第五章.事物,视图,索引,备份,恢复

★.存储过程 语法: delimiter $$ create procedure usp_list() begin select * from student;  end$$ delimiter ; 1.事务 概念: 就是一堆操作的集合.要么都执行成功,要么都执行失败基本要素: 1.原子性:事务是一个完整的操作.事物的各元素是不可分的. 2.一致性:事务完成时,数据必须处于一致状态. 3.隔离性:事务是独立的,它不应以任何方式依赖于或影响其他事务. 4.持久性:事务的处理结果是永久的. 执行事物

高性能MySQL-第五章创建高性能的索引(2)

高性能的索引策略 一.独立的列 如果查询中的列不是独立的,则MySQL就不会使用索引.“独立的列”是指索引列不能是表达式的一部分,也不能是函数的函数. 二.前缀索引和索引选择性 索引部分字符会降低索引的选择性,索引的选择性是指,不重复的索引值(也称为基数,cardinality)和数据表的记录总数(#T)的比值,范围从1/#T到1之间.索引的选择性越高则查询效率越高,因为选择性高的索引可以让MySQL在查找时过滤掉更多的行.唯一索引的选择性是1,这是最好的索引选择性,性能也是最好的. 一般情况下

高性能MySQL-第五章创建高性能的索引(1)

在MySQL中,存储引擎使用索引,其先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行. 索引可以包含一个或多个列的值. 一.索引的类型 在MySQL中,索引是在存储引擎层而不是服务器层实现的. MySQL支持的索引类型 B-Tree索引 InnoDB使用的是B+Tree. B-Tree通常意味着所有的值都是按顺序存储的,并且每一个叶子页到根的距离相同.B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是从索引的根节点开始进行搜索.根节

上课笔记第三十二天MySQL服务器日志、备份和恢复

1.MySQL服务器日志                MySQL日志:                          查询日志:由于I/O占用比较大所以不建议开启.                          慢查询日志:记录查询时间超出设定时间的查询语句.                          错误日志:记录错误信息                          二进制日志:重做日志                          中继日志:备服务器从主服务器复制

mysql轻松学习数据备份及恢复

数据库的备份分为物理备份逻辑备份 物理备份分为冷备份和热备份冷备份:需要将数据库关闭才能进行备份.热备份:无需关闭数据库也可备份. 逻辑备份对数据库的逻辑组件的备份,库,表等 备份可分为完全备份,差异备份,增量备份完全备份:备份整个数据库增量备份:对于上次备份的内容进行增量备份,增加上次增量或完整备份操作或一段时间操作的表或库.差异备份:无视增量备份,只针对上次完整备份的之后所有操作进行备份. 方法一.完全备份 1.使用压缩工具备份 yum install xz -y 2.压缩数据库,进行备份

mysql学习(4)-mysqldump备份和恢复数据

背景 最近在公司做数据迁移方面的工作,使用mysql数据库在测试环境模拟数据迁移,在迁移测试的过程中需要做数据备份和恢复 mysql数据备份和恢复比较简单,可以选择mysqldump工具,这里简单提一下在迁移数据过程中常用的一些操作 1.备份和恢复整个数据库 在主数据库上使用mysqldump命令备份一下数据库: mysqldump -uroot -p jobs > /usr/local/mysql/jobs.sql SSH登录到备份数据库: (1).通过FTP.SFTP或其他方式,将上一步备份