为什么不能单纯用锁而要用事务呢?

已解决:我怎么知道哪些数据库支持事务呢?

已解决:我update一个语句,如果错了,怎样回滚呢?

已解决:如何查看auto commit是否开启了?

问题:数据库的事务隔离与锁机制有什么差别和联系,最近在看,感觉两个很混乱~求解释。?

问题:什么叫做脏读,不可重复读,幻影读?


 

1.我怎么知道哪些数据库支持事务呢?

 

最简单的方式是show engines 然后挑选具有 transaction的引擎

但是很可惜show engines 不能加上过滤条件,其实show engines的数据,从information_schema得出

我们可以直接查询这个information_schema用户关于引擎表的表

接着查询表结构,目的是为了看看这个表都有哪些字段了

 

 

发现只有innodb引擎是支持事务功能的,难怪有一本书专门写innodb引擎啦,现在mysql也把innodb作为默认引擎


 

2.我update一个语句,如果错了,怎样回滚呢?

不一定要在存储过程里面做,直接在命令台上操作就可以了,两种方式

第一种,start transaciton; 配合 commit 使用

第二种,set autocommit=0 一头一尾 set autocommit=1 配合 commit 使用

我在第一个客户(session)删除了表

在第二个客户(session)已经打不开了,因为事务对DDL语句无效,一旦你执行DDL语句或者锁,事务就被commit了

所以事务这个机制,主要是针对数据的,也就是开发人员使用的DML语句

这是DML语句,所以第二个客户(session)不能查看到任何信息

 

 


4.如何查看auto commit是否开启了

 

show variables 真是一个万能句子


 

3.数据库的事务隔离与锁机制有什么差别和联系,最近在看,感觉两个很混乱~求解释。?

锁机制分为2中

1.外部锁定,指的是锁住物理层的那些表文件,很不靠谱,#内幕  作者都不建议使用

2.内部锁定,锁住表或者行

 

posted @ 2015-10-22 15:39  lawrence.li  阅读(990)  评论(0编辑  收藏  举报