当前位置:  数据库>oracle

MySQL和Oracle对比学习之事务

    来源: 互联网  发布时间:2017-06-16

    本文导语: MySQL中的存储引擎很是丰富,常用的有InnoDB,MyISAM等,也查看了不少的资料,基本也有所了解,从一些参考书中看MySQL中的sql部分也是一扫而过,感觉和Oracle中的sql部分没有大的区别。 因为InnoDB和MyISAM存储引擎的一个主要区别就是...

MySQL中的存储引擎很是丰富,常用的有InnoDB,MyISAM等,也查看了不少的资料,基本也有所了解,从一些参考书中看MySQL中的sql部分也是一扫而过,感觉和Oracle中的sql部分没有大的区别。
 因为InnoDB和MyISAM存储引擎的一个主要区别就是对于事务的支持,所以自己也复制了oracle中的想法。
 简单做了两个测试,只是想练手试一下,结果测试让我很意外。
 我创建了两个表myisam_test和innodb_test,做一个insert操作,然后rollback,按照预期的想法,因为Myisam不支持事务,所以insert操作做rollback是不会回退的,对于innodb应该可以。
mysql> create table myisam_test(id int) engine=myisam;
 Query OK, 0 rows affected (0.01 sec)
 mysql> insert into myisam_test values(1);
 Query OK, 1 row affected (0.00 sec)

 mysql> select *from myisam_test;
 +------+
 | id  |
 +------+
 |    1 |
 +------+
 1 row in set (0.00 sec)

 mysql> rollback;
 Query OK, 0 rows affected (0.01 sec)

mysql> select *from myisam_test;              --这个结果也是预料之中的。
+------+
| id  |
+------+
|    1 |
+------+
1 row in set (0.00 sec)


再来试试InnoDB的部分,结果让我很意外。感觉自己的认知都出现了问题。
mysql> create table innodb_test(id int) engine=innodb;
 Query OK, 0 rows affected (0.03 sec)

 mysql> insert into innodb_test values(1);
 Query OK, 1 row affected (0.01 sec)

 mysql> select *from innodb_test;
 +------+
 | id  |
 +------+
 |    1 |
 +------+
 1 row in set (0.00 sec)

 mysql> rollback;
 Query OK, 0 rows affected (0.00 sec)

mysql> select *from innodb_test;
+------+
| id  |
+------+
|    1 |
+------+
1 row in set (0.00 sec)


相比于在oracle中,因为没有这些存储引擎,测试结果就取一个表ora_test吧。
SQL> create table ora_test(id number);
 Table created.
 SQL> insert into ora_test values(1);
 1 row created.

 SQL> select *from ora_test;
        ID
 ----------
          1
 SQL> rollback;
 Rollback complete.
SQL> select *from ora_test;
no rows selected

完全不同的结果,自己琢磨了下,Oracle中是隐式开启事务,对于一个session中的dml语句,就会自动开启事务,加入一把TX锁。
 而在MySQL中却是需要使用start transaction来显示声明的。
 其实在Oracle中也可以显示声明事务,可以使用savepoint来做。这一点上和MySQL是很类似的。
 同是对于事务的提交方式上两者都是开放的,可以灵活的选择,在oracle中可以通过sqlplus或者驱动连接的设置。
SQL> set autocommit off;
 SQL> show autocommit
 autocommit OFF

在MySQL中式通过autocommit为1或者0来代表的。1代表自动提交,0表示禁用自动提交。
mysql> set autocommit=0;
 Query OK, 0 rows affected (0.00 sec)

所以这个案例带给我们的启示就是很多细节只是需要自己尝试去实验,不要想当然;很多思想也不能想当然,可能在这个地方可用,在别的地方就不一定可用,这些细节不能忽视。


    
 
 

您可能感兴趣的文章:

  • 与MSSQL对比学习MYSQL的心得(三)--查看字段的长度
  • 与MSSQL对比学习MYSQL的心得(四)--BLOB数据类型
  • mysql下普通索引和唯一索引的效率对比
  • 与MSSQL对比学习MYSQL的心得(二)--显示宽度
  • Oracle和MySQL对比
  • MySQL查询随机数据的4种方法和性能对比
  • 与MSSQL对比学习MYSQL的心得(一)--基本语法
  • 与MSSQL对比学习MYSQL的心得(五)--运算符
  • 与MSSQL对比学习MYSQL的心得(八)--插入 更新 删除
  • MySQL与Oracle的语法区别详细对比
  • 与MSSQL对比学习MYSQL的心得(七)--查询
  • 与MSSQL对比学习MYSQL的心得(六)--函数
  • 解析mysql二进制日志处理事务与非事务性语句的区别
  • MySQL C API中有没有事务处理的函数啊?
  • mysql 事务 回滚 提交
  • 基于mysql事务、视图、存储过程、触发器的应用分析
  • MYSQL事务回滚的2个问题分析
  • 为mysql数据库添加添加事务处理的方法
  • Mysql中的事务是什么如何使用
  • mysql实现事务的提交和回滚实例
  • mysql 锁表锁行语句分享(MySQL事务处理)
  • mysql 事务处理及表锁定深入简析
  • MySql的事务使用与示例详解
  • python连接mysql并提交mysql事务示例
  • PHP中执行MYSQL事务解决数据写入不完整等情况
  • MySql事务无法回滚的原因有哪些
  • MySQL事务处理与应用简析
  • mysql的XA事务恢复过程详解
  • MySQL数据库事务隔离级别介绍(Transaction Isolation Level)
  • 利用mysql事务特性实现并发安全的自增ID示例
  • MySQL存储过程例子(包含事务,输出参数,嵌套调用)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle欲收购开源数据库MySQL未果
  • MySQL类似Oracle的dual虚拟表
  • 在linux下是MYSQL好还是ORACLE厉害?
  • Oracle与Mysql主键、索引及分页的区别小结
  • 编程语言 iis7站长之家
  • Linux(redhat)下除了oracle / MySql 外还有哪些稍大型一点的 数据库
  • mysql仿oracle的decode效果查询
  • MySQL 移植到Oracle10 的问题
  • Oracle承诺一出 MySQL 5.5 版就发布
  • 解析mysql与Oracle update的区别
  • oracle与mysql的视频教程下载地址分享
  • 调查服务器系统BSD,SCO,Linux,windows?和数据库mysql,oracle,sqlserver?
  • 取数据库前几条数据(sql server、oracle、mysql)的sql写法
  • 调查显示MySQL进一步蚕食Oracle市场
  • 关于MySQL和Oracle转化的问题及解决
  • MySQL数据迁移到Oracle记录
  • Oracle并购SUN应放松对MySQL控制
  • JSP连接MySql/MS SQL Server/Oracle数据库连接方法[整理]
  • Oracle与Mysql自动增长列(id)的区别
  • Oracle 11g与MySQL的异构连接
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 在 linux下输入"mysql"命令,进入mysql命令行,但出现“Can't connetc to local MySQL server thuough socket /var/lib/mysql/mysql.sock
  • Mysql查询错误:ERROR:no query specified原因
  • MySQL 重装MySQL后, mysql服务无法启动
  • php安装完成后如何添加mysql扩展
  • 为什么用linux安装盘安装了mysql后,启动mysql,提示找不到mysql.sock文件?
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • 請教,在redhat linux7.2+mysql 中,系統提示mysql已啟動,網頁卻不能訪問mysql?
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • 求解释: useradd -g mysql mysql -d /home/mysql -s /sbin/nologin
  • MySQL Workbench的下载安装与使用教程


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3