简单介绍MySQL中的事务机制(2)_MySQL教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:mysql查询区分大小写高性能
mysql查询默认是不区分大小写的 如: 效果是一样的。 要让mysql查询区分大小写,可以: 也可以在建表时,加以标识 测试30W数据 不支持索引,查询效率底下,不建议考虑。上面这些sql语句乍看不会有什么问题,但是当表中的数据多了以后,问题就会凸显出来,用不到索引,

  链事务

  链事务,就是指回滚时,只能恢复到最近一个保存点;而带有保存点的扁平事务则可以回滚到任意正确的保存点。

  嵌套事务

  看下面这个,你就能明白了,啥是嵌套事务:

  BEGIN WORK

  SubTransaction1:

  BEGIN WORK

  SubOperationX

  COMMIT WORK

  SubTransaction2:

  BEGIN WORK

  SubOperationY

  COMMIT WORK

  ...

  SubTransactionN:

  BEGIN WORK

  SubOperationN

  COMMIT WORK

  COMMIT WORK

  这就是嵌套事务,在事务中再嵌套事务,位于根节点的事务称为顶层事务。事务的前驱称为父事务,其它事务称为子事务。事务的前驱称为父事务,事务的下一层称为子事务。

  子事务既可以提交也可以回滚,但是它的提交操作并不马上生效,除非由其父事务提交。因此就可以确定,任何子事务都在顶层事务提交后才真正的被提交了。同理,任意一个事务的回滚都会引起它的所有子事务一同回滚。

  分布式事务

  分布式事务通常是指在一个分布式环境下运行的扁平事务,因此需要根据数据所在位置访问网络中的不同节点,比如:通过建设银行向招商银行转账,建设银行和招商银行肯定用的不是同一个数据库,同时二者的数据库也不在一个网络节点上,那么当用户跨行转账,就是通过分布式事务来保证数据的ACID的。

  MySQL中使用事务

  理论总结的再好,终归都要通过实践来进行理解。下面就来说说MySQL中是如何使用事务的。

  在MySQL命令行的默认设置下,事务都是自动提交的,即执行SQL语句后就会马上执行COMMIT操作。因此要显示地开启一个事务须使用命令BEGIN或START TRANSACTION,或者执行命令SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

  来看看我们可以使用哪些事务控制语句。

  BEGIN或START TRANSACTION;显示地开启一个事务;

  COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改称为永久性的;

  ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

  SAVEPOINT identifier;SAVEPOINT允许在事务中创建一个保存点,一个事务中可以有多个SAVEPOINT;

  RELEASE SAVEPOINT identifier;删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

  ROLLBACK TO identifier;把事务回滚到标记点;

  SET TRANSACTION;用来设置事务的隔离级别。InnoDB存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。

  这些不用你“管”

  有的时候有些SQL语句会产生一个隐式的提交操作,即执行完成这些语句后,会有一个隐式的COMMIT操作。有以下SQL语句,不用你去“管”:

  DDL语句,ALTER DATABASE、ALTER EVENT、ALTER PROCEDURE、ALTER TABLE、ALTER VIEW、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE等;

  修改MYSQL架构的语句,CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD;

  管理语句,ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE等。

  以上的这些SQL操作都是隐式的提交操作,不需要手动显式提交。

  事务的隔离级别

  上面也说到了SET TRANSACTION用来设置事务的隔离级别。那事务的隔离级别是什么东东?

  在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。

分享:WordPress如何修改Mysql数据库的表前缀
我们知道 WordPress 的数据库表,可以设置前缀,默认是 wp_,很多同学也就默认用了 wp_,如果某种原因(比如提高安全性)要修改的 WordPress 数据的前缀,我们应该怎么做? 开始之前 修改数据是一件风险很高的工作,开始之前必然就是做好 数据库备份 ,也可以 把博客设置

来源:模板无忧//所属分类:MySQL教程/更新时间:2015-05-23
相关MySQL教程