5.1 事务
事务是hi将一系列数据操作绑成一个整体进行统一管理。如果一事务执行成功,则咋子该事务中进行的所有数据更改均会提交,称为数据库中的永久成部分。如果事务执行是遇到错误且必须取消或回滚,则数据将全部恢复到操作前的状态,所有数据的更改均被清除。
5.1.2 什么是事务
事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所欲的命令作为一个整体起向系统提交侧小操作请求,即这一组数据库命令要么都执行,要么都不执行。
事务是作为单一逻辑工作单元执行一系列操作。一个逻辑工作单位必须有四个属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),这些特性通常简称为ACID。
1. 原子性
事务是个完整性的操作。事务的各元素是不可分的(原子性)。
2. 一致性
当事务完成时,数据必须处于一致状态。
3. 隔离性
对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,他不应以任何方式依赖于或影响其他事务。
4. 持久性
事务的持久性指不管系统是否发生了故障,事务处理的结果都是永久的。
5.1.3 如何执行事务
默认设置下,枚举SQL语句就是一个事务,即执行SQL语句红藕自动提交,为了达到将几个操作作为一个整体的目的,需要使用BEGIN或START TRANSACTION开启一个事务,或者执行命令SETAUTOCOMMIT = ,来禁止当前回话的自动提交后,后面的语句作为事务的开始。
1. 执行事务的语法
SQL使用下列语句来管理事务。
(1) 开始事务
语法 |
BEGIN; //开始的意思 或者 START TRANSACTION; |
这个语句显式地标记一个事务的起始点。
(2) 提交事务
语法 |
COMMIT; |
这个语句标志一个事务成功提交。自事务开始至提交语句之间执行的所有数据更新将永久地保存在数据库数据文件中,并释放连接是占用的资源。
(3) 回滚(撤销)事务
语法 |
ROLLBACK; |
清除自事务起始点至该语句所做的所有数据更新操作,将数据状态回滚到事务开始前,并释放由事务控制的资源。
2. 设置值自动提交关闭或开始
MySQL中默认开启自动提交模式,即为指定开启事务时,每条SQL语句都是单独的事务执行完毕自动提交,可以关闭自动提交模式,手动提交或回滚事务。
语法 |
SET autocommit = 0 | 1; |
值为0:关闭自动提交。
值为1:开启自动提交。
当执行SET autocommit = 0后,即关闭自动提交,从下一条SQL语句开始则开启新事务,需使用COMMIT或ROLLBACK语句结束该事务。
5.2 视图
视图是保存在数据库中的SELECT查询。因此,对查询执行的大多数操作饿可在视图上进行。使用视图的原因有两点:一个是处于安全考虑,用户不必看到整个数据库的结构,而隐藏部分数据;另一个是符合用户日常业务逻辑,使他们更容易理解数据。
5.2.2 什么是视图
视图是另一种查看数据库中一个或多个表中数据的方法。视图是一种虚拟表,通常是作为来自一个或多个表的行或列的子集创建的。当然,它也可以包含全部的行和列。但是,视图并不是数据库中存储的数值的集合,它的行和列来自查询中引用的表。在执行是,他直接显示来自于表中的数据。
视图充当着查询中指定表筛选器。定义视图的查询可以基于一个或多个表,也可以基于其他视图、当前数据库或其他数据库。
视图通常用来进行一下三种操作。
(1) 筛选表中的行。
(2) 防止为经许可的用户访问敏感数据。
(3) 将多个物理数据表抽象为一个逻辑数据表。
使用视图可以给用户开发人员带来很多好处,具体如下。
1. 对最终用户的好处
(1) 结果更容易理解。创建视图是,可以将列名改为有意义的名称,使用户更容易理解列所有表的内容。在视图中修改名不会影响基表的列名。
(2) 获得数据更容易。很多人对SQL不太了解,因此对他们来说,创建对多个表的复杂查询很困难,可以通过创建视图来方便用户访问多个表中的数据。
2. 对开发人员的好处
(1) 限制数据检索更容易。开发人员于是需要隐藏某些行或列中的信息。通过使用视图,用户可以灵活地访问他们的数据,同时保证同一个表或其他表中的其他数据的安全性。要实现这一个目标,可以在创建视图时将对用户保密的列排出在外。
(2) 维护应用程序更方便。调试视图表调试查询更容易,跟踪视图中各个步骤的错误更为容易,这是因为所有的步骤都是视图的组成部分。
5.2.3 如何创建和使用视图
1.使用SQL语句创建视图
使用SQL语句创建视图的具体步骤如下。
语法 |
CREATE VIEW 视图名 AS <SELECT语句> |
与创建数据表相同,在创建视图之前,如果数据库中已存在同名视图,需要先删除在创建,下面居来学习如何删除视图。
2.使用SQL语句删除视图
使用SQL语句删除指定视图的语法如下。
语法 |
DROP VIEW [IF EXISTE] 视图名; |
创建视图后,如何利用它显示对数据库数据的访问呢?
3.使用SQL语句看视图数据
使用SQL语句查看视图数据的语法如下。
语法 |
SELECT 字段1,字段2,…… FROM view_name; |
使用查询语句SELECT执行视图的SQL代码,可获得数据结果集。
4.使用视图的注意事项
(1)每个视图中可以使用多个表。
(2)与查询相似,一个视图可以嵌套另一个视图,但最好不要超过三层。
(3)对视图数据进行添加、更新和删除操作直接引用表中的数据。
(4)当视图数据来自多个表时,不允许添加和删除数据。
5.3 索引
索引提供指针有存储在表中指定列的数据值,在根据指定的排序列这些指针。数据库使用索引的方式与使用书的目录很相似;通过搜索索引找到特定的值,在跟随指针到包含该值的行。
5.3.2 索引分类
MySQL中,常用的索引有以下六类。
1. 普通索引
普通索引是MySQL中的基本你索引类型,允许在定义索引的列中插入重复值和空值。
2. 唯一索引
唯一所以呢不允许两行具有相同的索引值。
如果现有数据中存在重复的键值,则一般情况下多数数据库不允许创建唯一索引。
3. 主键索引
在数据库关系图中为表定义一个逐渐将自动创建主键索引,主键索引是为疑似索引的特殊类型。
4. 复合索引
在创建索引是,并不是只能对其他一列创建索引,与创建主键一样,可以多个列组合作为索引,这种索引称为符合索引。
5. 全文索引
全文索引的作用是在定义索引的列上支持值的全文查找,允许这些索引列中插入重复的空值。
6. 空间索引
空间索引是对空间数据类型的列建立的索引,如GEOMETRY、POINT等。
5.3.3 创建索引
使用CREATE INDEX语句可以在以经存在的表上添加索引,基本语句如下。
语法 |
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name ON table_name (column_name[length]……) |
其中:
(1) UNIQUE | FULLTEXT | SPATIAL:分别表示唯一索引、全文索引的空间索引,为可选参数。
(2) Index_name:指定创建索引的表名。
(3) Column_name:指定需要创建索引的列。
(4) Length:指定索引长度,可选参数,只有字符创类型才能指定索引长度。
5.3.4 删除索引
删除索引的语法如下:
语法 |
DROP INDEX index_name ON table_name; |
关于索引的删除需要注意以下几点。
(1) 删除表时,该表的所有索引将同时被删除。
(2) 伤处表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除。如果组成索引的所有列都被删除,则整个索引将被删除。
5.4 数据库的备份和恢复
5.4.1 使用mysqldump命令备份数据库
mysqldump是MySQL一个常用的备份命令,执行此命令将包含数据的表结构和数据内容转换成相应的CREATE语句和INSERT INTO语句,保存在文本文件中,将来如果需要还原数据,只需执行该文本文件中的SQL语句即可。
1. mysqldump命令格式
语法 |
mysqldump -u username -h host -ppassword dbname[ tbname1 [,tbname2……] ] > filename.sql |
其中:
(1) username表示用户名。
(2) host表示登录用户的主机名称,如本机为主机可省略。
(3) password表示登录密码。
(4) dbname为需要备份的数据库。
(5) tbname为需要备份的数据表,可指定多张表。为可选项,如备份整个数据库则此项省略。
(6) filename.sql表示备份的文件名。
2. mysqldump的常用参数
mysqldump还有还有一些其他参数可以用来指定备份过程,
mysqldump的常用参数
参数 |
描述 |
-add-drop-table |
在每个CREATE TABLE语句前添加DROP TABLE语句,默认是打开的,可以用-skip-add-drop-table来取消 |
-add-locks |
该选项会在INSERT语句中捆绑一个LOCK TABLE和UNLOCK TABLE语句,防止记录再次导入时,其他用户对表进行的操作,默认是打开的 |
-t或-no-complete-insert |
指导出数据,而不添加CREATE TABLE语句 |
-c或—complete-insert |
在每个INSERT语句的列上列名,在数据导入另一个数据库是有用 |
-d或--no-data |
不写表的任何行信息,只转储表的结构 |
-opt |
该选项是速记,等于指定 -add-drop-table-add-locking --create-option --disable-keys—extended-insert --lock-table—quick --set-charset 它可以快速进行转储操作并产生一个能很快装入MySQL服务器的转储文件 |
5.4.2 使用musql命令恢复数据库
对于备份数据库后生成的包含有建库、建表、插入数据等SQL语句的文本文件,可以通过mysql命令还远到心的数据库中,实现数据库的恢复。该命令语法如下。
其中:
(1) username表示用户名。
(2) dbname表示数据库名字。
(3) filename.sql为数据库备份后的文件。
mysql命令是在DOS环境下的恢复数据库命令,如果已经登录了MySQL服务器,也可以使用source命令恢复数据库。语法如下。
语法 |
Source filename; |
其中,filename为数据库备份文件。
5.4.3 通过复制文件实现数据备份和恢复
MySQL服务器的数据在磁盘中是以文件形式保存的,所以可以直接复制MySQL数据库的存储目录及文件进行备份。
5.4.4 表数据导出到文本文件
通过对表数据的导出和导入,可以实现MySQL数据服务器与其他数据库服务器间移动数据。导出操作,是指将数据从MySQL数据表复制到文本文件,数据导出的方式有很多种,这里主要介绍使用SELECT …… INTO OUTFILE语句导出数据。语法如下:
语法 |
SELECT columnlist FROM tablename [WHERE contion] INTO OUTFILE ‘filename’ [OPTION]; |
从上述语法中可以看出,该导出语句分成以下两部分:
(1) 普通的数据查询语句,主要用来实现查询所要导出到文本文件中的数据。
(2) 通过参数filename指定导出数据的目标文件。
5.4.5 文本文件导入到数据表
所谓导入操作,是指将数据从文本文件加载到MySQL数据库表里。同样,导入数据库的方式也有多种。介绍使用LOAD DATA INFILE语句实现数据的导入,语法如下。
语法 |
LOAD DATA INFILE filename INTO TABLE tablename [OPTION]; |
其中:
(1) filename用来指定文本文件的路径和特征。
(2) tablename用来指定导入表的名称。