二十九 MySQL (事务)

二十九 MySQL (事务)

一 .掌握MySQL的事务处理方法

银行转账:

业务:(例如:请假报销 办卡 登录 注册)(一套固定的顺序流程)

银行转账:
		史浩然转账给孔钦瑞500元
		1.将A的余额扣除500
		2.将B的余额添加500


UPDATE 
	bank 
SET money = money - 500 
WHERE
	`name` = 'A';
	
UPDATE 
	bank 
SET money = money + 500 
WHERE
	`name` = 'B';

事务:

一系列操作 要么同时执行成功 要么都失败

RDB 关系型 安全 事务支持好

NoSQL 非关系型 事务一般不是太强(Redis 是假事务)

Mysql: 存储引擎 INNODB(默认 高频采用) BDB才支持事务

MyISAM: 也是常用存储引擎 但是他的失误等方面不支持 他的查询性能比较强 也支持全文索引

其实在使用了支持事务的引擎之后,事务就已经在使用了!因为MySQL中默认自动提交事务。

切换手动事务/自行开启事务:BEGIN START TRANSACTION (tx)

如果没有出现异常 则应提交事务: COMMIT

如果出现异常 事务则应回滚 ROLLBACK

通过关闭自动提交来使用事务 SET auto commit= 0(关闭)| 1 (开启)

SET autocommit = 0;
SET autocommit = 1;

DELECT 和 TRNCATE 区别:

DDL delect 删除 会直接结束事务

未来和Java 、Python 、JS等集成使用的方式

JDBC  Java DataBase Connectivity Java数据库连接技术
	try{
		// 开启事务
		// 1.调用数据库执行史浩然信息更新
		// 2.调用数据库执行孔钦瑞信息更新
		// 提交COMMIT
	}catch(Exception e){
		e.printStackTrace();
		// 回滚ROLLBACK
	}

二.理解MySQL的ACID原则(重难 面试题)四大特性为: 原子性 一致性 隔离性 持久性

原子性:(在化学上讲究原子为最小单位 不可再分) 事务是不可分割的 要么都成功要么都失败

一致性: 事务执行前和事务执行后 数据总量不变

持久性: 事务在执行完毕之后 必须能够将数据持久保存到数据库中!

隔离性:多个事务之间 应该彼此独立不受影响。

事务并发引发的问题可能有:脏读 不可重复读 幻读/虚读

脏读: 一个事务读取到了另一个事务未提交的数据(基本不允许 因为事务有可能回滚)

不可重复读: 一个事务在执行期间读取了多次内容,结果不一样。主要针对另外一个事务对同样的内容进行了修改操作(UPDATE)

幻读/虚读: 一个事务在执行全表性的操作时,另外一个事务进行插入操作 那么热第一个十五就会发现还有未执行完的内容(INSERT)

(MySQL )四大隔离级别:读未提交,读已提交,可重复读,串行化

读未提交 :任何事物的并发问题都无法解决(基本不用)

读已提交 :能解决脏读问题!(Oracle数据库默认)

可重复读 :可以解决脏读和不可重复读问题(MySLQ默认)

串行化 :最严格的隔离级别! 可以解决所有的并发问题(基本不用)

三 了解视图的使用

视图:是一种虚拟表 可以用来降低查询的复杂度 也可以适用于不同群体对数据的不同要求

SELECT
	stu.stuName,sub.subjectName,r.result,r.examDate
FROM 
	result r,student stu,`subject` sub
WHERE
	r.stuId = stu.stuId AND r.subjectId = sub.subjectId
ORDER BY 
	r.result DESC , r.examDate DESC;
--视图创建:
CREATE VIEW stu_result_list AS
			SELECT
				stu.stuName,sub.subjectName,r.result,r.examDate
			FROM 
				result r,student stu,`subject` sub
			WHERE
				r.stuId = stu.stuId AND r.subjectId = sub.subjectId
			ORDER BY 
				r.result DESC , r.examDate DESC;

视图的使用:视图是一张虚拟表 对他的改动会影响到真实的数据物理表

SELECT * FROM  stu_result_list;

注意事项:

1.视图仅仅作为查询使用即可 不要进行修改等操作

2.视图可以进行嵌套使用

3.视图的数据是来自于对应的物理表

视图删除

DROP VIEW stu_result_list;

四 .掌握数据库索引的创建(重点)

**索引:**特点 提升查询性能!。将一个列或者一组列进行相关的组合排序

原理:类似于字典前的目录页

索引的分类:

普通索引:提升查询性能

唯一索引:除了提升查询性能 还可以保证列/字段值唯一

主键索引:除了提升查询性能 还可以保证主键的特点 非空且唯一

复合索引

可以将多个字段列组合提升查询性能 
select
	name,pwd 
from 
	xx
	
	
select 
	xx 
from 
where name = xx and pwd = xxx

全文索引:它只能在MySQL存储引擎中使用 提升大数据量情况下对文本查找的性能

空间索引

--创建索引
CREATE INDEX 索引名 ON 表名 (字段名);

-- 删除索引
DROP INDEX 索引名 ON 表名 ;

-- 查看索引列表
SHOW INDEX FROM 表名;

创建外键和主键 和唯一键都会产生对应的索引

索引并不是一味的创建即可提升性能!因为索引会占用空间!而且索引列会在操作时进行索引验证!需要谨慎的设计和使用!

设计:

【建议】

1.频繁搜索的列

2.频繁用作于查询 选择的列

3.疆场排序分组的列

4.经常用于连接的列

【不建议】

5.仅包含几个不同值的列!例如:性别 学历

6.在表中仅包含几行的! 数据不多

使用:

1.尽量不要使用*来查找数据

2.索引列应该尽量小,在字节数小的列上建立

3.如果where中有多个条件表达式 那么索引列的条件表达式要放在前面

4.避免对索引进行计算表达式!

五 了解Mysql 数据库备份和恢复

备份数据库:

mysqldump [参数选项] -u用户名 -p -h主机地址 要备份的数据库名[要备份的数据表列表] > 输出的地址

参数选项:

	-add -drop-table 
	--表示在创建表语句前都添加 drop table 语句 可以通过 - skip - add.. 取消

	-add - locks 
	--表示再插入数据前后加上锁表和解锁语句 可以防止插入出错!

	-t (-table 减去table)
	--导出数据时不添加数据结构创建的语句 SREATE TABLE

	-c (compelete 完整的 )
    --可以帮助我们在导出数据视 添加语句可以加上字段列表

	-d (- data 减去data)
    --导出时只要表结构 不要数据
-- 恢复数据库:
mysql - u用户名  -p - h主机名

在登陆MySQL服务器之后可以使用 source 命令来恢复数据库 source 数据脚本文件地址;(切换到指定的数据库)

猜你喜欢

转载自blog.csdn.net/L097_/article/details/90679035