事务内容:
事务要遵循ACID
事务SQL样本
start transaction;
select valance from checking where customer_id=10233276;
update checking set balance=balance-200.0 where customer_id=10233276;
update savings set balance=balance+200.0 where customer_id=10233276;
commit;
参考网址:http://blog.csdn.net/sunandice/article/details/7697278
SQL的四种隔离级别:
read uncommited(未提交读):事务在修改中,即使没有提交,其他事务也可以读出这些‘脏’数据
read commited(提交读):一个事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。
repeatable read(可重复读):是MySQL的默认事务隔离级别,解决了脏读的问题,即在同一事务中多次读取同样记录的结果一致,期间的另外事务的修改是不能看到的,会出现幻读。
serializable(可串行化):最高的隔离级别,强制事务串行执行,避免了幻读的可能性。它会在读取的每一行数据上都加锁,所以可能导致大量的超时和锁争用的问题。
死锁出现后,只有部分或者完全回滚其中一个事务,才能打破死锁,innoDb目前处理死锁的方式是,将持有最少行级排它锁的事务进行回滚。
事务日志:使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把修改行为记录到持久在硬盘上的事务日志中,这样,内存中被修改的数据在后台可以慢慢地刷回到磁盘。
MySQL提供的两种事务型的存储引擎InnoDB和NDB Cluster还有XtraDB和PBXT。他们采用自动提交,每个不是显示地开始一个事务,每个查询都被当做一个事务执行提交操作。可以通过 show variables like 'autocommit';查看 使用set autocommit=1启用自动提交
当autocommit=0时,所有的查询都是在一个事务中,修改autocommit对MyISAM或者内存表,不会有任何影响,因为它们没有commit或者rollback的概念
mysql还可以通过执行set transaction isolation level来舍子隔离级别
多版本并发控制(MVCC)使大多数读操作都可以不用加锁,不是简单的加行级锁,InnoDB的MVCC通过在每行记录后面保存两个隐藏的列来实现,一个是保存了行的创建时间,一个是保存行的过期时间,这些时间用系统版本号代替,没开始一个事务,系统版本号都会自动递增
.frm保存创建表的定义,他的名字与表名相同
可以通过show table status like 'user'\G来显示表的相关信息,其中collation为表的默认字符集和字符列排列规则,checksum保存整个表的实时效验和