mysql的设置自动提交失效

工作几年了基本没用过mysql,悲催哈。。。今天在搞个小东西的时候用到mysql。一个很简单的问题,搞了几个小时,看来无知还是比较可怕的。。

进入正题吧。

问题很简单 JDBC 连接mysl 获取connnection 然后conn.setAutoCommit(false);

重点来了 现在是要插入一条记录

inset1......然后做一些逻辑处理,更新另一条数据 update2.。。

最后conn.commit();当然catch里面还有 conn.rollback()。

DEBUG时候发现 insert1执行完,数据库已经有值了。。原以为是隔离级别的问题,没在意。然后继续执行逻辑处理,

出现异常conn.reollback()了。。此时再一看 插入的数据没有回滚。代码检查N次没查出问题。

无奈又要问度娘,谷爷。。。此段时间乃是煎熬啊~~~~

最后还是有成果的。找到了个mysql表存储引擎的文章。

show create table 表名;

可以看到ENGINE=MyISAM

MyISAM是指Mysql的默认存储引擎,当create创建新表时,未指定新表的存储引擎时,默认使用Myisam。

MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力

既然有非事务表,就应该有支持事务的表了。没错,度娘又告诉我了 InnoDB

InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。

 那就改吧。。

alter table 表名 engine=InnoDB;

 然后再查看一下

变成InnoDB了。。

再跑次程序。。没错回滚了 。。。

很小个问题。。。。但如果不了解Mysql的话也挺头痛的。。搞了几个小时。。。无知就是悲催哈。。。。

 

 

posted @ 2012-05-28 22:42 北京—王志伟 阅读(463) 评论(2) 编辑

oracle varchar2字段中的乱码数据提取

由于工作需要,在迁移一批数据时发现一张表的varchar2字段本应该由数字组成,但出现了乱码。如下图。

现在就是要把这几十万数据中的乱码数据提取出来。

问了下度娘,他老人家告诉我用这个函数:translate

以下是这个函数的说明 :

http://www.2cto.com/database/201110/109385.html 

废话不多说开工。

1 create table temp_color_group_new as
2 select t.color_group_no,
3        translate(t.color_group_no, '9876543210', ' ') as new_no,
4        t.svc_inst_id
5   from temp_color_group t;

translate(t.color_group_no, '9876543210', ' ') as new_no

这里的color_group_no是可能出现的乱码字段,

 '9876543210':根据实际情况变更,本场景为color_group_no只可能是数字组成,如果有字母的话再加上就好。如果有汉字呢?⊙﹏⊙b汗~~没研究了,那位有高人有着告诉我一下哈。。学习学习。

' ':这里是个空格,不要定义为空''否则转换后的新号码都是null了。。也可以定义成特殊字符如“_”不过,后面转换稍麻烦点。。

创建好临时表temp_color_group_new 这个后,再将空格trim掉。

update  temp_color_group_new  set new_no = trim(new_no) ; 

此时new_no字段符合数字规则的应该都变成null了 is not null的都是乱码数据或者有特殊字符的数据如换行符等。

OK 搞定。。。 高人莫喷。。。

 

posted @ 2012-05-24 12:59 北京—王志伟 阅读(656) 评论(2) 编辑
  

公告

统计