OTL操纵MySql处理事务的方法

IT教程 4年前 (2020) https://www.55wd.com

otl

导入需要改为事物来处理,导入出错的时候就进行回滚。

现在的文件导入,通过多个filecount进行导入。

出错率较高,

现在批量导入,都是从文件中导入,怎么从数据库中批量导入呢--是从文件到数据库,不是从数据库到数据库。接收到导入的请求,批量数据,调用事物进行。

只要没有用户的输入,就可以避免sql注入的风险

通过otl可以设置事物,应该注意otl_stream缓冲区大小的合理设置(参见13.1小节)以及OTL默认的语句执行成功后立刻提交事务。对于批量操作,OTL默认的语句执行成功后立刻提交事务的操作方式往往不实用。例如对于批量更新10000条记录,缓冲区大小为1000的情况,当缓冲区填满时更新操作被执行,执行成功后当前事务被立刻提交,如果在此后的处理中出现错误,根本没有办法通过回滚事务取消之前的更新。防止语句执行后立刻提交事务的方法请参见12.1小节

缓冲区大小为 otl_stream 第一个参数,我们目前都是1,即执行完立刻提交,可以设置多个。

这个缓冲区到底是什么意思

记录数,但是设为2就是隔一个插入一次

有问题就会跳出了

otl_explicit_select:指定该流为一个简单的SELECT语句流;

otl_implicit_select:指定该流为一个返回结果集的流;

start transaction

commit

不能,应用otl自己的直接执行命令 otl_cursor::direct_exec都不能声明事物

otl_nocommit_stream不能够的原因1.不是oracal数据库2.没有声明事物。

otl_stream的buffer size,无法设定,不知为啥。

   MySQL在innodb存储引擎的行级锁的情况下才可支持事务,而Oracle则完全支持事务

(1) 对事务的提交

   MySQL默认是自动提交,而Oracle默认不自动提交,需要用户手动提交,需要在写commit;指令或者点击commit按钮

(2) 分页查询

   MySQL是直接在SQL语句中写"select... from ...where...limit  x, y",有limit就可以实现分页;而Oracle则是需要用到伪列ROWNUM和嵌套查询

(3) 事务隔离级别

MySQL是read commited的隔离级别,而Oracle是repeatable read的隔离级别,同时Oracle支持serializable的隔离级别,可以实现最高级别的

   读一致性。每个session提交后其他session才能看到提交的更改。Oracle通过在undo表空间中构造多版本数据块来实现读一致性,每个session

   查询时,如果对应的数据块发生变化,Oracle会在undo表空间中为这个session构造它查询时的旧的数据块

   MySQL没有类似Oracle的构造多版本数据块的机制,只支持read commited的隔离级别。一个session读取数据时,其他session不能更改数据,但

   可以在表最后插入数据。session更新数据时,要加上排它锁,其他session无法访问数据

oracle中事务从上一个commit或rollback开始;

但是MySQL中事务的开始必须要有START TRANSACTION;这才标志着一个事物的开始,否则使用rollback是无法回滚数据的。

InnoDB影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN开始事务,导致每插入一条都自动Commit,严重影响了速度。可以在执行SQL前调用BEGIN,多条SQL形成一个事物(即使AUTOCOMMIT打开也可以),将大大提高性能。

最终完成了1.表的引擎改为InnoDB:ALTER TABLE Ttest ENGINE=InnoDB;

2.  otl_cursor::direct_exec(db,"START TRANSACTION;");和commit来完成事物

3.中间不需要任何处理,依旧用otl_stream

4.有错误不会提交,具有原子性和一致性隔离性和持久性。

5.绕了一大圈,最终用只是一个语句的问题。

被例子误导,Oracle和MYSQL不同,所以也是不通的。Oracle事物不需要声明,所以麻烦的一比,需要OTL一堆函数才能让他不自动提交。相比而言,mysql反而更方便,手动声明和提交,包含一下就行了,爽的一批!!!

脏读:事物之间没有隔离。可以查到没有提交的事物

不可重复读:一个事物中读取两次前后被修改的数据导致两次查询结果不一致。

幻读:事物中两次统计前后别的事物对表进行修改导致两次统计结果不同。

1、事务隔离级别为读提交时,写数据只会锁住相应的行

2、事务隔离级别为可重复读时,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key 锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。

3、事务隔离级别为串行化时,读写数据都会锁住整张表

4、隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

参考:

事务四大特征:原子性,一致性,隔离性和持久性(ACID)

https://blog.csdn.net/lovesomnus/article/details/44459675

MySQL的四种事务隔离级别

https://www.cnblogs.com/huanongying/p/7021555.html

两个例子说明,虽然被误导了好久(oracle和MYSQL差异巨大),但是也贴上来,虽然没什么用

OTL技术应用

https://www.cnblogs.com/skyme/archive/2010/11/08/1871509.html

https://blog.csdn.net/rain_qingtian/article/details/12749177

PermitRootLogin yes无效问题

奶奶的,搞了半下午终于找到 原因。 /etc/ssh/sshd_config明明设置了PermitRootLogin 为yes,可就是用putty连,root登录不了,每次都acce

Android快速转战Kotlin教程

前言 kotlin是啥?这里就不用多说了,想必看这篇文章的童鞋肯定是有所了解的。 那么这篇文章你可以收获什么?答:本文主要通过本人如何从

文章回顾

大家看了本文OTL操纵MySql处理事务的方法的精彩教程资源内容,是不是对OTL操纵MySql处理事务的方法了解更多,真心希望OTL操纵MySql处理事务的方法能帮助到你, 小编会一直给你带来更多教程资源文章信息。

版权声明: 发表于 2020-05-03 8:27:25。

本文由第三方用户分享仅代表作者观点,不代表本网站立场,秉承互联网开放分享的精神,目的在于传递更多信息,加强各行业互通交流,但对内容不作任何保证或承诺,请读者自行参考斟酌。网站发布的信息(包含但不限于版式、图片、字体、文章等素材)由第三方用户分享,版权归原作者所有,本站不承担任何相关的版权纠纷等相关责任。如您认为本篇内容侵犯了您的权益,请与我们联系,我们会及时处理。

豌豆资源网专注分享全网综合资源网站大全,致力于超实用的内容资源搜索。

转载请注明:
本文标题:OTL操纵MySql处理事务的方法
本文地址:https://55wd.com/s10357/