MySQL事务、索引、数据恢复和备份
MySQL的事务处理
事务就是将一组SQL语句放在同一批次内去执行。
如果一个SQL语句出错,则该批次内的所有SQL都将被取消执行。
注意:MySQL事务处理只支持InnoDB和BDB数据表类型。
事务的特性
事务必须具备以下四个属性,简称ACID 属性:
原子性(Atomicity)
事务是数据库的逻辑工作单位,事务中包含的各操作要么都做,要么都不做。
一致性(Consistency)
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据
库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中
发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部
分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。
隔离性(Isolation)
一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事
务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(Durability)
也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接
下来的其它操作或故障不应该对其执行结果有任何影响。
注意:事务中的所有操作要么全部执行,要么都不执行;
如果事务没有原子性的保证,那么在发生系统
故障的情况下,数据库就有可能处于不一致状态
MySQL的事务实现方法
(1)SET AUTOCOMMIT
使用SET语句来改变自动提交模式:
注意:MySQL中默认是自动提交
使用事务时应先关闭自动提交
(2)START TRANSACTION
开始一个事务,标记事务的起始点
(3)COMMIT
提交一个事务给数据库
(4)ROLLBACK
将事务回滚,数据回到本次事务的初始状态
(5)SET AUTOCOMMIT = 1;
开启MySQL数据库的自动提交
MySQL事务处理步骤
示例一:模拟网上支付2-1
模拟网上支付:
顾客A在线购买一款商品,价格为500.00元,采用网上银行转账的方式支付
假如顾客A银行卡的余额为2000.00元,且向卖家B支付购买商品费用500.00元,起始卖家B的账号金额10000.00元
创建数据库shop和创建表account并插入2条数据
语句展示:
CREATE TABLE `account` (
`id` INT(4) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(32) NOT NULL,
`cash` DECIMAL(9,2) NOT NULL,
PRIMARY KEY (`id`)
)
INSERT INTO `account` (`name`,`cash`) VALUES ('A',2000.00);
INSERT INTO `account` (`name`,`cash`) VALUES ('B',10000.00);
结果展示:
示例二:模拟网上支付2-2
设置场景:
A账户成功减少500元,B账户应该增加500元,但一些错误导致未增加成功,这时则需返回A账户的500元,达到账户总额的平衡
要求:使用事务模拟以上过程
语句展示:
SET autocommit=0;
START TRANSACTION;
UPDATE account SET cash=cash-500 WHERE NAME='A';
UPDATE account SET cash=cash+500 WHERE NAME='B';
COMMIT;
//ROLLBACK;如果修改数据失败,回滚
SET autocommit=1;
结果展示:
数据库索引
作用
提高查询速度
确保数据的唯一性
可以加速表和表之间的连接,实现表与表之间的参照完整性
使用分组和排序子句进行数据检索时,可以显著减少分组和排序的时间
全文检索字段进行搜索优化
分类
主键索引(PRIMARY KEY)
唯一索引(UNIQUE)
常规索引(INDEX)
全文索引(FULLTEXT)
主键索引(PRIMARY KEY)
某一个属性或属性的组合能唯一标识一条记录
如:学生表(学号,姓名,班级,性别等) ,学号就是唯一标识的,可作为主键
特点:
最常见的索引类型
确保数据记录的唯一性
确定特定数据记录在数据库中的位置
唯一索引(UNIQUE)
作用:
避免同一个表中某数据列中的值重复
与主键索引的区别
主键索引只能有一个
唯一索引可有多个
常规索引(INDEX)
作用:快速定位特定数据
注意:
index和key关键字都可设置常规索引
应加在查找条件的字段
不宜添加太多常规索引,影响数据的插入、删除和修改操作
全文索引(FULLTEXT)
作用:快速定位特定数据
注意:
只能用于MyISAM类型的数据表
只能用于CHAR、VARCHAR、TEXT数据列类型
适合大型数据集
管理索引
创建索引
创建表时添加
建表后追加
删除索引
查看索引
索引准则
索引不是越多越好
不要对经常变动的数据加索引
小数据量的表建议不要加索引
索引一般应加在查找条件的字段
示例三:给数据库表添加索引
给数据库表student添加索引。
学号StudentNo,添加主键索引。
身份证IdentityCard,添加唯一索引。
邮箱Email,添加常规索引。
语句展示:
ALTER TABLE student ADD PRIMARY KEY(StudentNo);
ALTER TABLE student ADD UNIQUE KEY(IdenttityCard);
ALTER TABLE student ADD INDEX(Email);
添加正确的索引
在WHERE、ORDER BY 子句中经常使用的字段
字段的值是多个(例如性别字段则不适合)
字段内容不是经常变化的
经常变化的字段,添加索引反而降低性能
不宜过多添加索引
每添加一条索引都会占用磁盘空间
MySQL的备份
数据库备份必要性
保证重要数据不丢失
数据转移
MySQL数据库备份方法
mysqldump备份工具
数据库管理工具,如SQLyog
直接拷贝数据库文件和相关配置文件
mysqldump数据库备份
作用:
转储数据库
搜集数据库进行备份
将数据转移到另一个SQL服务器(不一定是MySQL服务器)
mysqldump常用选项(一)
mysqldump常用选项(二)
MySQL数据库的恢复
方法一
用 SOURCE 语法
/path/是一个绝对路径,并且必须是mysql 运行用户有权限读取的文件
SOURCE 在MySQL命令行里执行
方法二
用 mysql 客户端
利用SQL语句导出、导入数据
注意:输出的文件不能先存在,否则报错