mysql事务操作介绍和临时表的使用

在上一章mysql教程中我们讨论了:mysql增删改查、查询子句以及连接查询,本章中我们开始讨论mysql事务操作和临时表的使用。
一、mysql事务操作假设有N个操作(如select、update、delete等),将每个操作作为一个操作单元,这样N个操作组成的一个组合称为事务,实际上你可以把许多SQL查询合并到一个组中,并将它们作为事务的一部分一起执行。事务的基本特点是:要么所有操作成功提交要么失败回滚。
1、事务的属性
事务具有以下四个标准属性,通常简称为ACID:

  • 原子性Atomicity——确保工作单元内的所有操作都能成功完成,否则事务将在故障点终止,之前的操作将回滚到以前的状态。
  • 一致性Consistency——这确保数据库在成功提交事务后正确地更改状态。
  • 隔离Isolation——这使得事务能够独立地操作,并且对彼此透明。
  • 持久性Durability——这确保提交的事务的结果或效果在系统故障时仍然有效。
事务操作以begin work开始以commit或rollback语句结束,开始和结束语句之间的SQL命令构成了事务的主体。
2、事务的提交和回滚:commit、rollback
这两个关键字commit和rollback主要用于MySQL事务。
  • 当成功的事务完成时应该执行commit命令,以便对所有相关表的更改都将生效。
  • 如果发生故障应该执行rollback命令,将事务中引用的每个表返回到它以前的状态。
你可以通过设置名为autocommit的会话变量来控制事务的行为,如果autocommit设置为1(默认值),那么每个SQL语句(不管是否在事务中)都被认为是一个完整的事务,并在事务结束时默认提交。
当将autocommit设置为0时,通过执行set autocommit = 0命令后续的一系列语句就像事务一样,在发出显式的commit语句之前不会提交任何活动。
3、一个关于事务的通用示例
这个事件序列与所使用的编程语言无关,逻辑路径可以用创建应用程序所用的任何语言创建。
可以使用mysql_query()函数在PHP中执行这些SQL命令。
  • 通过执行SQL命令begin work开始事务。
  • 执行一个或多个SQL命令,如SELECT、INSERT、UPDATE或DELETE。
  • 检查是否没有错误确保符合预期要求。
  • 根据各个操作情况选择执行rollback回滚命令,还是执行commit命令进行提交。
4、MySQL中的事务安全表类型
一般不能直接使用事务,但在某些例外情况下可以,不过它们并不安全,也没有保障。如果计划在MySQL编程中使用事务,那么需要以一种特殊的方式创建表。有许多类型的表支持事务,但最流行的是InnoDB。
当从源代码编译MySQL时,对InnoDB表的支持需要一个特定的编译参数。如果你的MySQL版本不支持InnoDB,请你的Internet服务提供商构建一个支持InnoDB表类型的MySQL版本。
如果MySQL安装支持InnoDB表,可以在创建表的时候添加定义:TYPE = InnoDB。
例如下面的代码创建了一个名为sample的InnoDB表:
root@host# mysql -u root -p password; Enter password:*******mysql> use post; Database changedmysql> create table sample -> ( -> post_author varchar(40) NOT NULL, -> post_countINT -> ) TYPE = InnoDB;

要了解更多关于InnoDB的细节,你可以点击下面的链接InnoDB,你也可以使用其他的表类型比如GEMINI或者BDB,但是这取决于你的安装是否支持这两种表类型。
二、临时表的使用1、什么是临时表?
MySQL版本3.23中添加了临时表,如果使用比3.23更旧的MySQL版本则不能使用临时表,但可以使用堆表。
如前所述只要会话是活动的,临时表就会一直存在。如果你通过MySQL客户端程序连接到MySQL数据库服务器,那么临时表将一直存在,并直到您关闭客户端或手动销毁表。
临时表的创建和普通表一样,但是要添加temporary关键字:
create temporary table temp_name(...);

当你执行show tables命令时临时表不会在列表中列出,如果退出MySQL会话然后执行select命令,那么你会发现数据库中没有可用的数据并且临时表也不存在。
2、删除临时表
【mysql事务操作介绍和临时表的使用】一般来说mysql会自动删除临时表,但是如果你想在中间操作的时候删除它们,那么可以通过执行drop table命令来实现。

    推荐阅读