日期:2014-05-17  浏览次数:20479 次

MySQL 碎片问题
MySQL数据碎片是怎么产生的?
对数据库有什么影响?
碎片对查询,插入,等操作有什么影响吗?

------解决方案--------------------
不清楚MYSQL,帮顶了
------解决方案--------------------
mysql 常会出现这样的情况
主要是你没有进行事务管理 !~
这样就产生了 脏数据 也就是你说的 数据碎片
以下 是我从网上找的部分处理方法



conn.setAutoCommit(false);
try 
{
PreparedStatement insertStatement = conn.prepareStatement("INSERT INTO CUSTOM_ORDER(CUSTOMER, ORDER_LIST) VALUES(?, ?)");
insertStatement.setString(1, customer);
insertStatement.setString(2, orderList);
insertStatement.execute(); 

PreparedStatement updateStatement = conn.prepareStatement("UPDATE PLAYER SET ACCOUNT = ACCOUNT - ? WHERE ID = ?");
updateStatement.setInt(1, sumPrice);
updateStatement.setString(2, customer);
updateStatement.execute(); 
conn.commit();

catch(SQLException se)
{
conn.rollback();
}
finally
{
conn.close();


代码很简单,而且根据我以前的经验来看,这样的代码是可以保证数据完整性的,因为对数据表两个连续的更新是一个事务,当发生异常的时候,事务会回滚。然而,测试的结果出乎意料,即使第二个SQL语句执行发生了异常,第一个SQL产生的更新结果也会体现到数据表中。查阅了很多资料,都没有发现这样的代码会有什么问题,而且Java Tutorial对于事务的介绍所给出的例子跟以上代码十分的类似,讲解中也提到两个preparedStatment只有在commit方法被调用的时候,才会作用于数据库。后来我在第一个execute方法之后设置了断点,竟然发现在执行完该方法之后,CUSTOM_ORDER表中已经多了一条记录了。但是此时,我并没有想到这会跟数据库本身有关,拼命在Google上找与JDBC相关的资料。