DB2-MySql-PG 事务处理的不同

DB2-MySql-PG 事务处理的不同

1. 结论
在事务期间出现数据操作异常(Exception)时,若不rollback,
且继续进行后续操作,最后commit的情况下:

DB2,异常SQL无效,正常SQL生效,类似于autocommit的执行效果。
MySQL,同DB2。但对异常SQL的处理机制不同,如超长时插入截断后数据等。
PostgreSQL,事务直接失败,相当于rollback了。

2. 对象
DB2 v9.5.0.2
PostgreSQL 9.0.4
MySQL 5.0.24-max
MySQL 5.5.24

3. 脚本
-- drop
DROP TABLE TEST_TA
GO
-- create
CREATE TABLE TEST_TA (
ID INT NOT NULL ,
NM CHAR(1) ,
PRIMARY KEY (ID) )
ENGINE = INNODB
GO

-- insert
INSERT INTO TEST_TA (ID,NM) VALUES(1,'1') -- I1
GO
INSERT INTO TEST_TA (ID,NM) VALUES(2,'12') -- I2
GO
INSERT INTO TEST_TA (ID,NM) VALUES(3,'1') -- I3
GO
INSERT INTO TEST_TA (ID,NM) VALUES(4,'1') -- I4
GO

-- select
SELECT * FROM TEST_TA
GO

-- delete
DELETE FROM TEST_TA
GO
4. 方法
使用JDBC 对各数据库执行 SQL:create. (AutoCommit=true)
开启事务,执行 SQL:insert,吞掉I2异常,继续执行I3,I4,commit。(AutoCommit=false)
察看结果,select,delete。(AutoCommit=true)

过程中,I2的字段超长后,得到一下信息。

MySQL:
Data truncation: Data truncated for column ‘NM’ at row 1

DB2:
SQLCODE: -433, SQLSTATE: 22001, SQLERRMC: 12
Message: Value “12″ is too long.

PostgreSQL:
value too long for type character(1)
current transaction is aborted, commands ignored until end of transaction block

执行select的结果,DB2:3,MySQL:4,PG:0

5. 用途
在需要有效数据统一提交,无效数据排除的情况下,需要细心的处理异常.

比如字段超长的这个无效数据混杂在有效数据之中,
对DB2,只需要最后commit就可以了.
对MySQL,则需要先一次排查出所有无效数据,再rollback,最后把有效数据进行commit.
而PG,则需要循环排查无效数据和rollback,最后把有效数据进行commit.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值