什么是事务
事务是一种机制,一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行。
事务是作为单个逻辑工作单元执行的一系列操作,一个逻辑工作单元必须有四个属性,即原子性、一致性、隔离性、持久性,这些特性通常称为ACID。
A:原子性(Atomicity)
事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
B:一致性(Consistency)
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
一个事务可以封装状态改变(除非它是一个只读的)。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少。
也就是说:如果事务是并发多个,系统也必须如同串行事务一样操作。其主要特征是保护性和不变性(Preserving an Invariant).
C:隔离性(Isolation)
一个事务的执行不能被其他事务干扰。隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,
执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,
必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。
D:持续性/永久性(Durability)
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的,不会被回滚。
1.执行事务的语法
1)开始事务
语法:
- begin;
或者
- start transaction;
2)提交事务
- commit;
这个语句标志一个事务成功提交,自事务开始至提交语句之间执行的所有数据更新将永久的保存在数据库文件中,并释放连接时占用的资源
3)回滚(撤销)事务
- rollback;
清除自事务起始点至该语句所做的所有数据更新操作,将数据状态回滚到事务开始前,并释放由事务控制的资源。
2.设置自动提交关闭或开启
set autocommit=0|1
值为0,关闭自动提交。
值为1,开启自动提交。
1、使用sql语句创建视图
语法:
- create view 视图名
- as
- <select 语句>;
与创建数据表相同,在创建视图之前,如果在数据库中已存在同名视图,需要先删除在创建。
2、删除视图
语法:
- drop view [if exists] 视图名;
3、查看视图
- select 字段1,字段2,..... from view_name
索引分类
1、普通索引
普通索引是MySQL中的基本索引类型,允许在定义索引的列中插入重复值或空值,它的唯一任务是加快对数据的访问速度。
2、唯一索引
唯一索引不允许两行具有相同的索引值。
3、主键索引
主键索引是唯一索引的特殊类型,主键索引要求主键中的每个值都是非空的,唯一的。
4、复合索引
只有在查询中使用了组合索引最左边字段时,索引才会被使用,即第一个字段作为前缀的集合。
5、全文索引
全文索引的作用是在定义索引的列上支持值的全文查找,允许在这些索引列中插入重复值和空值。
6、空间索引
对空间数据类型的列建立的索引
创建索引
使用create index语句可以在已经存在的表上添加索引
- create [unique | fulltext| spatial] index index_name
- on table_name [column_name[length]....];
删除索引
- drop index index_name on table_name;
关于删除索引需要注意的点:
删除表时,该表的所有索引将同时被删除
删除表中的列时,如果要删除的列为索引的组成部分,则该列也会从索引中删除,如果组成索引的所有列都被删除,则整个索引将被删除。
查看索引
- show index from table_name;
数据库的备份和恢复
使用mysqldump命令备份数据库
mysqldump是MySQL一个常用的备份命令,执行命令会将包含数据的表结构和数据内容转换成相应的create语句和INSERT into语句,保存在文本文件中,将来如果需要还原数据,只需要执行该文本文件中的sql语句即可
1、mysqldump命令格式
该命令是DOS命令,不能在MySQL命令行输入,为保证账户密码安全,命令中可不写密码,但参数“-p”必须有,回车后根据提示写密码
- mysqldump -u username -h host -p Password
- dbname[tbname[,tbname2....]]>filename.sql
dbname为需要备份的数据库
tbname为需要备份的数据表,可指定多张表。
使用mysql命令恢复数据库
对于备份数据库后生成的包含有建库,建表,插入数据等sql语句的文本文件,可以通过mysql命令还原到新的数据库中,实现数据库的恢复
注意:要预先创建好一个空的数据库!!!
语法:
- mysql -u username -p [dbname] <filename.sql
- #dbname表示数据库名
如果已经登录了mysql服务器也可以使用source命令恢复数据库
语法:
source filename;
通过复制文件实现数据备份和恢复
MySQL服务器中的数据在磁盘中是以文件形式保存的,所以可以直接复制MySQL数据库的存储目录及文件进行备份。
表数据导出到文本文件
使用select...into outfile语句导出数据
语法:
- select 列名 from 表名
- [where 条件]
- into outfile `filename`[option];
文本文件导入到数据表
语法:
- load data infile filename into table 文件名[option];