在上一章mysql教程中我们讨论了:mysql增删改查、查询子句以及连接查询,本章中我们开始讨论mysql事务操作和临时表的使用。
一、mysql事务操作假设有N个操作(如select、update、delete等),将每个操作作为一个操作单元,这样N个操作组成的一个组合称为事务,实际上你可以把许多SQL查询合并到一个组中,并将它们作为事务的一部分一起执行。事务的基本特点是:要么所有操作成功提交要么失败回滚。
1、事务的属性
事务具有以下四个标准属性,通常简称为ACID:
- 原子性Atomicity——确保工作单元内的所有操作都能成功完成,否则事务将在故障点终止,之前的操作将回滚到以前的状态。
- 一致性Consistency——这确保数据库在成功提交事务后正确地更改状态。
- 隔离Isolation——这使得事务能够独立地操作,并且对彼此透明。
- 持久性Durability——这确保提交的事务的结果或效果在系统故障时仍然有效。
2、事务的提交和回滚:commit、rollback
这两个关键字commit和rollback主要用于MySQL事务。
- 当成功的事务完成时应该执行commit命令,以便对所有相关表的更改都将生效。
- 如果发生故障应该执行rollback命令,将事务中引用的每个表返回到它以前的状态。
当将autocommit设置为0时,通过执行set autocommit = 0命令后续的一系列语句就像事务一样,在发出显式的commit语句之前不会提交任何活动。
3、一个关于事务的通用示例
这个事件序列与所使用的编程语言无关,逻辑路径可以用创建应用程序所用的任何语言创建。
可以使用mysql_query()函数在PHP中执行这些SQL命令。
- 通过执行SQL命令begin work开始事务。
- 执行一个或多个SQL命令,如SELECT、INSERT、UPDATE或DELETE。
- 检查是否没有错误确保符合预期要求。
- 根据各个操作情况选择执行rollback回滚命令,还是执行commit命令进行提交。
一般不能直接使用事务,但在某些例外情况下可以,不过它们并不安全,也没有保障。如果计划在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命令来实现。
推荐阅读
- mysql alter命令和mysql索引介绍
- mysql基本增删改查、所有查询子句以及连接查询完全解读
- MySQL开发教程(数据类型、数据库连接、基本数据库和表操作详解)
- MySQL基本管理介绍和在PHP中使用MySQL
- PHP Ds Stack clear()函数用法介绍
- Amazon ACMS面试体验
- 查找具有给定总和且在恒定空间中允许有负数的子数组
- PHP Ds Map capacity()函数用法示例
- PHP数组用法教程和详细指南