MySQL管理实务处理

  事物处理可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么全不执行。

  1. 事务:指一组sql语句
  2. 回退:指撤销指定的sql语句过程
  3. 提交:将未存储的sql语句结果写入数据库表
  4. 保留点:指事务处理过程中设置的临时占位符,可以对他发布回退,与回退到整个事务不同

开始事务

mysql> start transaction

回退事务

mysql> rollback
  1. 只能在一个事务内使用,即start transaction
  2. 事务处理用来管理insert,update,delete语句,不能回退select语句,不能回退create和drop,事务处理块中可以使用着两条语句,如果回退执行,他们不会被撤消
mysql> select * from stu_info;
+--------+---------+-----+-------+-------+
| num    | name    | age | grade | socre |
+--------+---------+-----+-------+-------+
| 000001 | gushi   |  23 | 1006  |    90 |
| 000002 | hualian |  21 | 1005  |   100 |
| 000004 | gushi   |  16 | 1006  |    95 |
| 000009 | abc     |   8 | 2004  |     0 |
+--------+---------+-----+-------+-------+
4 rows in set (0.00 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from stu_info;
Query OK, 4 rows affected (0.00 sec)

mysql> select * from stu_info;
Empty set (0.00 sec)

mysql> rollback;
Query OK, 0 rows affected (0.44 sec)

mysql> select * from stu_info;
+--------+---------+-----+-------+-------+
| num    | name    | age | grade | socre |
+--------+---------+-----+-------+-------+
| 000001 | gushi   |  23 | 1006  |    90 |
| 000002 | hualian |  21 | 1005  |   100 |
| 000004 | gushi   |  16 | 1006  |    95 |
| 000009 | abc     |   8 | 2004  |     0 |
+--------+---------+-----+-------+-------+
4 rows in set (0.00 sec)

使用COMMIT

  MySQL语句一般都是针对数据库表执行和编写的,这是所谓的隐含提交,即提交操作是自动进行的。但是在事务处理块中提交不会自动进行,为进行明确的提交,用commit

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from stu_info where age=18;
Query OK, 5 rows affected (0.34 sec)

mysql> delete from stu_info where age=20;
Query OK, 0 rows affected (0.00 sec)

mysql> commit;
Query OK, 0 rows affected (0.44 sec)

  最后commit语句仅在不出错时写出更改,如果第一条delete起作用,第二条delete失败,则delete不会提交,实际上他是自动被撤销的

  当COMMIT或rollback语句执行后,事务会自动关闭

保留点

  COMMIT或rollback撤销的是整个事务,有时需要部分提交或回退,在事务块中放适当的占位符,如果需要回退,就会退到某个占位符。

mysql> savepoint s1;

  每个保留点名字唯一

mysql> rollback to s1;
  1. 保留点越多越好
  2. 保留点在事务处理完成(执行一条rollback或COMMIT)后自动释放,也可以用release savepoint 明确释放保留点

更改默认的提交行为

mysql> set autocommit=0;

  执行sql语句时,该语句都是针对表执行的,而且都是立即生效,autocommit决定是否自动提交,autocommit(0)假不自动提交,直到autocommit为真才自动提交,autocommit针对每个链接而不是服务器

  

原文地址:https://www.cnblogs.com/tianzeng/p/10361476.html