热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MySQL和Oracle对比学习之事务

MySQL中的存储引擎很是丰富,常用的有InnoDB,MyISAM等,也查看了不少的资料,基本也有所了解,从一些参考书中看MySQL中的sql部分

MySQL中的存储引擎很是丰富,常用的有InnoDB,MyISAM等,也查看了不少的资料,基本也有所了解,从一些参考书中看MySQL中的sql部分

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)

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

本文永久更新链接地址

推荐阅读
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 1.介绍有时候我们需要一些模拟数据来进行测试,今天简单记录下如何用存储过程生成一些随机数据。2.建表我们新建一张学生表和教师表如下:CREATETABLEstudent(idINT ... [详细]
  • 本文详细介绍了MySQL数据库中的Bin Log和Redo Log,阐述了它们在日志记录机制、应用场景以及数据恢复方面的区别。通过对比分析,帮助读者更好地理解这两种日志文件的作用和特性。 ... [详细]
  • 福克斯新闻数据库配置失误导致1300万条敏感记录泄露
    由于数据库配置错误,福克斯新闻暴露了一个58GB的未受保护数据库,其中包含约1300万条网络内容管理记录。任何互联网用户都可以访问这些数据,引发了严重的安全风险。 ... [详细]
  • 本文详细介绍了优化DB2数据库性能的多种方法,涵盖统计信息更新、缓冲池调整、日志缓冲区配置、应用程序堆大小设置、排序堆参数调整、代理程序管理、锁机制优化、活动应用程序限制、页清除程序配置、I/O服务器数量设定以及编入组提交数调整等方面。通过这些技术手段,可以显著提升数据库的运行效率和响应速度。 ... [详细]
  • 本文介绍如何使用SAS根据输入数据集自动生成并执行SQL查询,其中CASE语句依据另一个数据集中的观测值动态调整。 ... [详细]
  • 本文深入探讨了SQL数据库中常见的面试问题,包括如何获取自增字段的当前值、防止SQL注入的方法、游标的作用与使用、索引的形式及其优缺点,以及事务和存储过程的概念。通过详细的解答和示例,帮助读者更好地理解和应对这些技术问题。 ... [详细]
  • Oracle中NULL、空字符串和空格的处理与区别
    本文探讨了在Oracle数据库中使用NULL、空字符串('')和空格('_')时可能遇到的问题及解决方案。重点解释了它们之间的区别,以及在查询和函数中的行为。 ... [详细]
  • Oracle 数据导出为 SQL 脚本的详细步骤
    本文介绍如何使用 PL/SQL Developer 工具将 Oracle 数据库中的数据导出为 SQL 脚本,包括详细的步骤和注意事项。 ... [详细]
  • 1.执行sqlsever存储过程,消息:SQLServer阻止了对组件“AdHocDistributedQueries”的STATEMENT“OpenRowsetOpenDatas ... [详细]
  • 在Fedora 31上部署PostgreSQL 12
    本文详细介绍如何在Fedora 31操作系统上安装和配置PostgreSQL 12数据库。包括环境准备、安装步骤、配置优化以及安全设置,确保数据库能够稳定运行并提供高效的性能。 ... [详细]
  • 本文介绍了解决在Windows操作系统或SQL Server Management Studio (SSMS) 中遇到的“microsoft.ACE.oledb.12.0”提供程序未注册问题的方法,特别针对Access Database Engine组件的安装。 ... [详细]
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • 本章详细介绍SP框架中的数据操作方法,包括数据查找、记录查询、新增、删除、更新、计数及字段增减等核心功能。通过具体示例和详细解析,帮助开发者更好地理解和使用这些方法。 ... [详细]
  • 在安装 SQL Server 时,选择混合验证模式可以提供更高的灵活性和管理便利性。如果您已经安装了 SQL Server 并使用单一的 Windows 身份验证模式,可以通过以下步骤将其更改为混合验证模式。 ... [详细]
author-avatar
欢迎bm访问老年人空间
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有