[关闭]
@wangyupu 2020-07-14T10:50:50.000000Z 字数 3576 阅读 29

数据库MYSQL第四章MySQL事务、索引、数据恢复和备份

mysql


MySQL的事务处理

  1. 事务就是将一组SQL语句放在同- -批次内去执行如果一个SQL语句出错,则该批次内的所有SQL都将
  2. 被取消执行
  3. ##注意MySQL事务处理只支持InnoDB和BDB数据表类型

事务的特性

  1. 事务必须具备以下四个属性,简称ACID属性
  2. 原子性 (Atomicity)
  3. 一致性(Consistency)
  4. 隔离性(Isolation)
  5. 持久性(Durability)

MySQL的事务实现方法

  1. #SET AUTOCOM MIT「
  2. 使用SET语句来改变自动提交模式
  3. SET AUTOCOMMIT = 0;#关闭自动提交模式
  4. SET AUTOCOMMIT = 1;#开启自动提交模式
  5. 注意
  6. MySQL中默认是自动提交
  7. 使用事务时应先关闭自动提交

MySQL的事务实现方法

  1. START TRANSACTION
  2. 开始一个事务,标记事务的起始点
  3. COMMIT
  4. 提交一个事务给数据库
  5. ROLLBACK
  6. 将事务回滚,数据回到本次事务的初始状态
  7. SET AUTOCOMMIT = 1;
  8. 开启MySQL数据库的自动提交
Created with Raphaël 2.1.2SET AUTOCOMMIT= 0;关闭MySQL的自动提交ROLL .BACK;将事务回滚,所有COMMIT中的操作将被取消START TRANSACTION;开始一个事务,标记事务的起始点?Endyesno

王老师讲课实录

  1. #转账 尤俊杰给李嘉易转1000
  2. # 提交 回滚
  3. set autocommit = 0; #关闭自动提交
  4. START TRANSACTION ;#开启事务
  5. update user set money=money-1000
  6. where name='尤俊杰';
  7. update user set money=money+1000
  8. where name='李嘉易';
  9. COMMIT; #提交事务
  10. #ROLLBACK;#回滚事务
  11. set autocommit = 1;#开启自动提交

在整个流程图结束之后把SET AUTOCOMMIT = 1;还原MySQL数据库的自动提交

数据库索引

作用

  1. 提高查询速度
  2. 确保数据的唯一-性
  3. 可以加速表和表之间的连接,实现表与表之间的参照完整性
  4. 使用分组和排序子句进行数据检索时,可以显著减少分组和排序的时间
  5. 全文检索字段进行搜索优化

分类

  1. 主键索引 (PRIMARY KEY)
  2. 唯一索引(UNIQUE)
  3. 常规索弓| (INDEX)
  4. 全文索引(FULLTEXT)

主键索引

  1. 某一个属性或属性的组合能唯一标识-条记录
  2. 如:学生表(学号,姓名,班级,性别等) ,学号就是唯一-标识的 ,可作为主键
  3. 特点
  4. 最常见的索引|类型
  5. 确保数据记录的唯一-性
  6. 确定特定数据记录在数据库中的位置
  7. 示例
  8. CREATE TABLE Grade' (
  9. 'GradelD` INT(11) AUTO_ INCREMENT PRIMARY KEY,
  10. #省略代码....
  11. #主键索引也可在字段字义之后,如
  12. # PRIMARY KEY(`GradelD`)
  13. )

唯一索引(UNIQUE)

  1. 作用
  2. 避免同一个表中某数据列中的值重复
  3. 与主键索引的区别
  4. 主键索弓|只能有一个
  5. 唯- -索引可有多个
  6. 示例
  7. CREATE TABLEGrade^ (
  8. `GradelD' INT(11) AUTO_ INCREMENT PRIMARY
  9. KEY,
  10. `GradeName` VARCHAR(32) NOT NULL UNIQUE
  11. #或UNIQUE KEY GradelD ( `GradelD`)
  12. )

常规索引(INDEX)

  1. 作用:快速定位特定数据
  2. 注意
  3. indexkey关键字都可设置常规索引
  4. 应加在查找条件的字段
  5. 不宜添加太多常规索引,影响数据的插入、删除和修改操作
  6. CREATE TABLE `result` (
  7. #省略-些代码
  8. INDEXIKEY `ind` (`studentNo`, `subjectNo`) 创建表时添加
  9. ALTER TABLE result ADD INDEX `ind` 创建后追加
  10. (studentNo", subjectNo');

全文索引(FULLTEXT)

  1. 作用:快速定位特定数据
  2. 注意
  3. 只能用于MyISAM类型的数据表
  4. 只能用于CHARVARCHAR TEXT数据列类型
  5. 适给大型数据集
  6. 示例
  7. CREATE TABLE student (
  8. #省略一些SQL 语句
  9. FULLTEXT ( `StudentName` )创建表时添加
  10. )ENGINE=MYISAM;
  11. ALTER TABLE employee ADD FULLTEXT (`first_ name` );创建启追加

管理索引

  1. 创建索引
  2. 创建表时添加
  3. 建表后追加
  4. 语法
  5. ALERT TABLE 表名 ADD 索引类型(数据列名)
  6. 删除索引
  7. DROP INDEX 索引名 ON 表名
  8. ALTER TABLE 表名 DROP INDEX 索引名
  9. ALTER TABLE 表名 DROP PRIMARY KEY
  10. 查看索引
  11. SHOW INDEX(或KEYS) FROM表名

索引准则

  1. 索引不是越多越好
  2. 不要对经常变动的数据加索引
  3. 小数据量的表建议不要加索引
  4. 索引一般应加在查找条件的字段

分析SQL语句的执行性能

  1. EXPLAIN表名(DESC 表名)
  2. EXPLAIN SELECT语句

添加正确的索引

  1. WHERE
  2. ORDER BY子句中经常使用的
  3. 字段的值是多个(例如性别字段则不适合)
  4. 字段内容不是经常变化的
  5. 经常变化的字段,添加索引反而降低性能
  6. 不宜过多添加索引
  7. 每添加一条索引|都会占用磁盘空间

MySQL的备份

  1. ##数据库备份必要性
  2. 保证重要数据不丢失数据转移
  3. #MySQL数据库备份方法
  4. mysqldump备份工具
  5. 数据库管理工具,如SQlyog
  6. 直接拷贝数据库文件和相关配置文件

mysgldump数据库备份

  1. 作用
  2. 转储数据库
  3. 搜集数据库进行备份
  4. 将数据转移到另一个SQL服务器(不一 定是MySQL服务器)
  5. mysqldump -h 主机名-u用户名-p [options] 数据库名 (预存文件目录,须有该目录读写权限)
  6. [ table1 table2 table3] > path/filename.sql
  7. 示例

备份myschool数据库如:

mysqldump -u root -p myschool > d:/myschool.sql
EnterPassword:*

  1. #mysqIdump常用选项2-1
  2. |符号名称|描述|
  3. |-----|-----|
  4. |-add-drop-table|导出sql脚本会加上DROP TABLE IF EXISTS语句默认是打开的,可以用--skip-add-drop-table来取消|
  5. |-add-locks|该选项会在INSERT语句中捆绑一个LOCK TABLEUNLOCK TABLE语句好处:防止记录被再次导入时,其他用户对表进行的操作,默认是打开的|
  6. |-t或--no-create-info|忽略不写重新创建每个转储表的CREATE TABLE语句|
  7. #mysqldump常用选项2-2
  8. |符号名称|描述|
  9. |----|----|
  10. |-C或--complete-insert|在每个INERT语句的列上加。上字段名在数据库导入另-个数据库时非常有用|
  11. |-d 或--no-data|不写表的任何行信息。对于只想转储表的结构很有用|
  12. |--where " where-condition", -Wwhere-condition"|只转储给定的WHERE条件选择的记录|
  13. |--opt|该选项是速记;等同于指定--add-drop-tables--add-locking--create-option--disable-keys--extended-insert--lock tables--quick--set-charset|

MySQL数据库的恢复

  1. 方法一
  2. SOURCE语法
  3. /path/是一个绝对路径,并且必须是mysql运行用户有权限读取的文件
  4. SOURCEMySQL命令行里执行
  5. SOURCE /path/db_ name.sql;#都要先创建或选择数据库
  6. 方法二
  7. mysql客户端
  8. mysql -u root -p dbname < /path/db_ name.sql;

利用SQL语句导出、导入数据

  1. SELECT * INTO OUTFILE 'file_ name' 导出数据
  2. FROM tbl_ name
  3. 输出的文件不能先存在,否则报错
  4. LOAD DATA INFILE 'file_ name 导入数据
  5. INTO TABLE tbl_ name[FIELDS]

视图

  1. 视图就是把好几个表组合几个到一起起个别名带时候可以直接点别名比较的方便缺点就是如果更改一个剩余的几张表都被修改
  1. create view result_student_subject
  2. as
  3. select a.SubjectNo,
  4. select a.SubjectNo,
  5. b.StudentName,c.SubjectName,
  6. a.ExamDate,a.StudentResult
  7. from result a
  8. LEFT JOIN student b
  9. on a.StudentNo=b.StudentNo
  10. LEFT JOIN `subject` c
  11. on a.SubjectNo=c.SubjectNo;
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注