数据库之事物

mysql事物:

概念:主要用于处理操作量大,复杂度高的数据(在人员管理系统中,如果删除一个人员,即需要删除人员的基本资料,也要删除该人员的相关信息,如部门,等等。这些数据库操作语句就构成一个事物!)。

 

事物是一组相关操作

 

在mysql中只有使用了innodb数据库引擎的数据库或表才支持事物。

事物处理可用来维护数据库的完整性,保证成批的sql语句要么全部执行,要么全部不执行

事物用来管理insert,update,delete语句

 

事务是必须满足4个条件(ACID): Atomicity(原子性)、Consistency(稳定性)、Isolation(隔离性)、Durability(可靠性)

1、事务的原子性:一组事务,要么成功;要么撤回。

2、稳定性 : 有非法数据(外键约束之类),事务撤回。

3、隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,那么其他事务会撤回。事务的100%隔离,需要牺牲速度。

4、可靠性:软、硬件崩溃后,InnoDB数据表驱动会利用日志文件重构修改。可靠性和高速度不可兼得, innodb_flush_log_at_trx_commit选项 决定什么时候把事务保存到日志里。

 

开始一个事物:Start  transaction;

设置保存点:savepoint + 保存点名称;

回滚到保存点:Rollback  to [savepoint] +保存点名称;

回滚:Rollback (可单独使用)

提交:Commit

 

这两个关键字提交和回滚主要用于MySQL的事务。

mysql> showdatabases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| caiyu              |

| db16               |

| db1606             |

| mtomquery          |

| mysql              |

| performance_schema |

| test               |

+--------------------+

8 rows in set (0.00 sec)

 

mysql> use db16;

Database changed

mysql> set namesgbk;

Query OK, 0 rows affected (0.00 sec)

 

mysql> select *from department;

+------+--------+------------+

| d_no | d_name | d_location |

+------+--------+------------+

|  10 | 产品部      | 上海          |

|  20 | 财务部       | 北京           |

|  30 | 人事部      | 广州           |

|  40 | 销售部      | 成都          |

+------+--------+------------+

4 rows in set (0.00 sec)

 

mysql> select *from employee;

+------+--------+-------+---------+----------+----------+------------+

| e_no | e_name | e_sex | dept_no |e_job    | e_salary | hire_date  |

+------+--------+-------+---------+----------+----------+------------+

| 1001 | 李强      | 1    |      20 | 会计         |     800 | 2015-9-9   |

| 1002 | 王刚       | 1    |      30 | HR       |    1600 | 2014-10-9  |

| 1003 | 珊珊     | 0    |      30 | HR       |    1250 | 2014-11-7  |

| 1004 | 张阳       | 1    |      20 | 出纳         |    2975 | 2015-4-9   |

| 1005 | 小丽      | 0    |      40 | 销售经理        |    2850 | 2015-2-10  |

| 1006 | 王二       | 1    |      10 | 产品策划       |    2450 | 2015-4-23  |

| 1007 | 小冬      | 1    |      40 | 销售经理        |    2750 | 2015-3-10  |

| 1008 | 码子       | 1    |      30 | HR       |    1600 | 2014-10-9  |

| 1009 | 李四       | 1    |      20 | 会计         |    2450 | 2014-10-9  |

| 2001 | 小明      | 1    |      10 | 界面设计         |    2500 | 2016-02-10 |

+------+--------+-------+---------+----------+----------+------------+

10 rows in set (0.00 sec)

 

mysql> starttransaction;  //开始一个事物

Query OK, 0 rows affected (0.00 sec)

 

 

mysql> savepointa;  //设置保存点

Query OK, 0 rows affected (0.00 sec)

 

mysql> deletefrom employee where dept_no = (select d_no from department where

    -> d_name = '财务部'); //子查询

Query OK, 3 rows affected (0.00 sec)

 

mysql> select *from employee;

+------+--------+-------+---------+----------+----------+------------+

| e_no | e_name | e_sex | dept_no |e_job    | e_salary | hire_date  |

+------+--------+-------+---------+----------+----------+------------+

| 1002 | 王刚       | 1    |      30 | HR       |    1600 | 2014-10-9  |

| 1003 | 珊珊     | 0    |      30 | HR       |    1250 | 2014-11-7  |

| 1005 | 小丽      | 0    |      40 | 销售经理        |    2850 | 2015-2-10  |

| 1006 | 王二       | 1    |      10 | 产品策划       |    2450 | 2015-4-23  |

| 1007 | 小冬      | 1    |      40 | 销售经理        |    2750 | 2015-3-10  |

| 1008 | 码子       | 1    |      30 | HR       |    1600 | 2014-10-9  |

| 2001 | 小明      | 1    |      10 | 界面设计         |    2500 | 2016-02-10 |

+------+--------+-------+---------+----------+----------+------------+

7 rows in set (0.00 sec)

 

mysql> select *from department;

+------+--------+------------+

| d_no | d_name | d_location |

+------+--------+------------+

|  10 | 产品部      | 上海          |

|  20 | 财务部       | 北京           |

|  30 | 人事部      | 广州           |

|  40 | 销售部      | 成都          |

+------+--------+------------+

4 rows in set (0.00 sec)

 

mysql> delete fromdepartment where d_name = '财务部';

Query OK, 1 row affected (0.00 sec)

 

mysql> select *from department;

+------+--------+------------+

| d_no | d_name | d_location |

+------+--------+------------+

|  10 | 产品部      | 上海          |

|  30 | 人事部      | 广州           |

|  40 | 销售部      | 成都          |

+------+--------+------------+

3 rows in set (0.00 sec)

 

mysql> rollback; //回滚

Query OK, 0 rows affected (0.04 sec)

 

mysql> select *from department;

+------+--------+------------+

| d_no | d_name | d_location |

+------+--------+------------+

|  10 | 产品部      | 上海          |

|  20 | 财务部       | 北京           |

|  30 | 人事部      | 广州           |

|  40 | 销售部      | 成都          |

+------+--------+------------+

4 rows in set (0.00 sec)

 

mysql> select *from employee;

+------+--------+-------+---------+----------+----------+------------+

| e_no | e_name | e_sex | dept_no |e_job    | e_salary | hire_date  |

+------+--------+-------+---------+----------+----------+------------+

| 1001 | 李强      | 1    |      20 | 会计         |     800 | 2015-9-9   |

| 1002 | 王刚       | 1    |      30 | HR       |    1600 | 2014-10-9  |

| 1003 | 珊珊     | 0    |      30 | HR       |    1250 | 2014-11-7  |

| 1004 | 张阳       | 1    |      20 | 出纳         |    2975 | 2015-4-9   |

| 1005 | 小丽      | 0    |      40 | 销售经理        |    2850 | 2015-2-10  |

| 1006 | 王二       | 1    |      10 | 产品策划       |    2450 | 2015-4-23  |

| 1007 | 小冬      | 1    |      40 | 销售经理        |    2750 | 2015-3-10  |

| 1008 | 码子       | 1    |      30 | HR       |    1600 | 2014-10-9  |

| 1009 | 李四       | 1    |      20 | 会计         |    2450 | 2014-10-9  |

| 2001 | 小明      | 1    |      10 | 界面设计         |    2500 | 2016-02-10 |

+------+--------+-------+---------+----------+----------+------------+

10 rows in set (0.00 sec)

 

mysql> commit;  //提交

Query OK, 0 rows affected (0.00 sec)

 

 

mysql> select *from department;

+------+--------+------------+

| d_no | d_name | d_location |

+------+--------+------------+

|  10 | 产品部      | 上海          |

|  30 | 人事部      | 广州           |

|  40 | 销售部      | 成都          |

+------+--------+------------+

3 rows in set (0.00 sec)

 

mysql> select *from employee;

+------+--------+-------+---------+----------+----------+------------+

| e_no | e_name | e_sex | dept_no |e_job    | e_salary | hire_date  |

+------+--------+-------+---------+----------+----------+------------+

| 1002 | 王刚       | 1    |      30 | HR       |    1600 | 2014-10-9  |

| 1003 | 珊珊     | 0    |      30 | HR       |    1250 | 2014-11-7  |

| 1005 | 小丽      | 0    |      40 | 销售经理        |    2850 | 2015-2-10  |

| 1006 | 王二       | 1    |      10 | 产品策划       |    2450 | 2015-4-23  |

| 1007 | 小冬      | 1    |      40 | 销售经理        |    2750 | 2015-3-10  |

| 1008 | 码子       |1     |      30 | HR       |    1600 | 2014-10-9  |

| 2001 | 小明      | 1    |      10 | 界面设计         |    2500 | 2016-02-10

+------+--------+-------+---------+----------+----------+------------+

7 rows in set (0.00 sec)

步骤:1.开始一个事物  2.设置保存点  3.进行相应操作(这里是删除财务部的员工和财务部部门) 

4.查询发现财务部和财务部员工已删除  5.回滚 

6.重新查询两张表,发现删除的内容又回滚了(如果确认操作就不用回滚,用commit提交)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值