事务专题(一)

1.简介(transactions

对数据库进行的每一次操作就是一次事务。


要使用事务,必须数据库支持事务才行,这就要涉及到搜索引擎。对于mysql,默认的搜索引擎Innodb。使用最多的就是MyISAM和Innodb。


2.两种搜索引擎(存储引擎)

(一)MyISAM不支持事务也不支持外键,尤其是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本都可以使用这个引擎来创建表。

特点:①不支持事务,用回滚来证明

>> 表记录:t2表的engine是myisam。

事务专题(一) 

    >> 操作

事务专题(一)

注意:如果你在数据库进行事务操作,但是事务无法成功,你就要看你的表引擎了,看这种引擎是否支持事务。
>> 下面请看innodb中的事务操作

事务专题(一)

  ②存储结构三个 

.frm(表定义结构文件)、

.MYD(MyData,数据文件)、

.MYI(MyIndex,存储索引)

可以在不同服务器上拷贝和存储数据文件和索引文件
事务专题(一)

③加锁和并发
        加锁:对整张表进行加锁,而不是行。
        并发:在读数据的时候,所有的表上都可以获得共享锁(读锁),每个连接都不互相干扰。
                在写数据的时候,获得排他锁,会把整个表进行加锁,而其他的连接请求(读,写请求)都处于等待中。
④列索引
⑤压缩表
 总结
 
 myisam在索引层和压缩层的卓越贡献,所以我们经常把myisam用于slave层,供客户端去读取。而myisam在写库操作的时候会产生排他锁,如果写操作一直占用的话,那么其他连接请求一直就处于等待中,从而造成堵塞,甚至能把服务器dang掉。

具体见博客:http://www.cnblogs.com/baochuan/archive/2012/03/15/2398276.html

(二)Innodb
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比MyISAM的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

--自动增长列必须是索引

--有外键约束


3.事务的原则ACID

ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。
  •  原子性。即不可分割性,事务要么全部被执行,要么就全部不被执行。如果事务的所有子事务全部提交成功,则所有的数据库操作被提交,数据库状态发生转换;如果有子事务失败,则其他子事务的数据库操作被回滚,即数据库回到事务执行前的状态,不会发生状态转换。
  •  一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态。
  • 隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,即在事务正确提交之前,它可能的结果不应显示给任何其他事务。
  • 持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。   

  运行嵌入式SQL应用程序或脚本,在可执行SQL语句第一次执行时(在建立与数据库的连接之后或在现有事务终止之后),事务就会自动启动。在启动事务之后,必须由启动事务的用户或应用程序显式地终止它,除非使用了称为自动提交(automatic commit)的过程(在这种情况下,发出的每个单独的SQL语句被看做单个事务,它一执行就被隐式地提交了)。

  在大多数情况下,通过执行COMMIT或ROLLBACK语句来终止事务。当执行COMMIT语句时,自从事务启动以来对数据库所做的一切更改就成为永久性的了-- 即它们被写到磁盘。当执行ROLLBACK语句时,自从事务启动以来对数据库所做的一切更改都被撤销,并且数据库返回到事务开始之前所处的状态。不管是哪种情况,数据库在事务完成时都保证能回到一致状态。

  一定要注意一点:虽然事务通过确保对数据的更改仅在事务被成功提交之后才成为永久性的,从而提供了一般的数据库一致性,但还是须要用户或应用程序来确保每个事务中执行的SQL操作序列始终会导致一致的数据库。

4、数据库系统支持两种事务模式:

  • 自动提交模式:每个SQL语句都是一个独立的事务,当数据库系统执行完一个SQL语句后,会自动提交事务。
  • 手动提交模式:必须由数据库客户程序显示指定事务开始边界和结束边界。