Part 2 —— 事务、流程控制

今日内容概要

  1. 1、视图(了解)
  2. 2、触发器trigger
  3. 3'事务'
  4. 4、存储过程procedure
  5. 5、函数
  6. 6'流程控制'
  7. 7、函数
  8. 8、流程控制
  9. 9、索引与慢查询优化
  10. 10、索引分类
  11. 1.自行百度搜索并提炼"数据库设计三大范式"
  12. 分别是哪三大以及各自有何特征
  13. 2.整理今日内容及博客
  14. 3.自行复习python基础

一、事务

第七章 · part2-事务、流程控制、函数 - 图1

  1. # 四大特性(ACID)
  2. A:原子性(atomicity)
  3. 每个事务都是不可分割的最小单位(同一个事务内的多个操作要么同时成功要么同时失败)
  4. C:一致性(consistemcy)
  5. 事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的
  6. I:隔离性(isolation)
  7. 事务与事务之间彼此不干扰
  8. D:持久性(durablity)
  9. 一个事务一旦提交,它对数据库中数据的改变就应该是永久性的

1、MySQL开启事务的三种方式

  1. 1、隐式开启,隐式提交 "mysql默认"
  2. '默认情况下,你每敲一条SQL语句,都会开启一个事务。'
  3. 每条sql语句一运行完,会自动帮你commit提交,所以平时我们使用update语句修改数据库,都会自动提交。
  4. 2、显式开启,显示提交"掌握"
  5. 格式:
  6. start transaction; # 或begin;
  7. sql语句1;
  8. sql语句2;
  9. [commint/rollback]
  10. # 如何开启事务
  11. start transaction;
  12. begin;
  13. # 如何回滚
  14. rollback;
  15. # 如何确认
  16. commit;
  17. 3、显示开启,隐式提交'(用的少)'
  18. Set session autocommit =0
  19. 这样设置完,就不会自动提交
  20. 总结:MYSQL 默认为每条sql开启事务,并且会在本条sql执行完毕后自动执行commit提交
  21. 若想设置手动提交,有两种方式:
  22. 方式一:直接用 SET 来改变 MySQL 的自动提交模式(下述设置均为会话级别的设置):
  23. SET AUTOCOMMIT=0 禁止自动提交
  24. SET AUTOCOMMIT=1 0启自动提交
  25. 方式二: 手动开启的事务里默认不会自动提交
  26. # 手动开启的事务里默认不会自动提交,所以我们可以将要执行的sql语句放在我们自己手动开启的事务里
  27. start transaction;
  28. update test.t1 set id=33 where name = "jack";
  29. commit;
  30. 注意:这种方式在当你使用commit或者rollback后,事务就结束了,再次进入事务状态需要再次start transaction

2、案例

  1. ----------------------------------'建案例表'-----------------------------------
  2. create table user(
  3. id int primary key auto_increment,
  4. name char(32),
  5. money int
  6. )
  7. insert into user(name,money)
  8. values
  9. ("yly",1000),
  10. ("zpx",1000),
  11. ("aaa",1000);
  12. ----------------------------------'事务操作'-----------------------------------
  13. start transaction;
  14. # sql语句
  15. update user set money=900 where name="yly"; # yly买支付100元
  16. update user set money=1010 where name="zpx"; # 中介zpx拿走10元
  17. update user set money=1090 where name="aaa"; # 卖家aaa拿到90元
  18. #回滚
  19. rollback; # 上面三个操作,回到开启事务之前的状态
  20. commit; # 确认提交数据
  21. 注意:
  22. 使用了rollback或者commit,这个事务就结束了
  23. 如果要重新操作,那么需要重新开启事务

二、流程控制(开发了解,DBA掌握)

  1. 注意:
  2. 流程控制是卸载存储过程内
  3. delimiter //
  4. create procedure proc_if()
  5. begin
  6. declare i int default 0;
  7. # if判断
  8. if i = 1 THEN
  9. SELECT 1;
  10. ELSEIF i = 2 THEN
  11. SELECT 2;
  12. ELSE
  13. SELECT 7;
  14. END IF;
  15. END //
  16. delimiter ;
  17. call proc_if();
  18. # while循环
  19. delimiter //
  20. create procedure proc_while()
  21. begin
  22. declare num int;
  23. set num = 0;
  24. while num < 10 do
  25. select
  26. num;
  27. set num = num + 1;
  28. end while;
  29. end //
  30. delimiter ;
  31. c