zoukankan      html  css  js  c++  java
  • alter table导致的mysql事务回滚失败

    今天做数据迁移, 发现事务有时候可以回滚, 有时候不可以回滚, 最后一点点调试发现中间有段修改表结构的语句, 最终导致回滚失败。

    1.MySQL最常用的两个表类型: InnoDB和MyISAM。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持、存储过程、视图、行级锁定等等高级数据库功能,若回滚失败,先检查表类型。 

    SHOW ENGINES 语句可以查看当前的数据库支持的存储类

    SHOW CREATE TABLE 表名;可以查看表的创建语句,最后有表的存储结构

    ALTER TABLE 表名 ENGINE = InnoDB;修改表的存储类型


    2.有的时候有些SQL语句会产生一个隐式的提交操作,即执行完成这些语句后,会有一个隐式的COMMIT操作。有以下SQL语句,不用你去“管”:

    • DDL语句,ALTER DATABASE、ALTER EVENT、ALTER PROCEDURE、ALTER TABLE、ALTER VIEW、CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE等;
    • 修改MYSQL架构的语句,CREATE USER、DROP USER、GRANT、RENAME USER、REVOKE、SET PASSWORD;
    • 管理语句,ANALYZE TABLE、CACHE INDEX、CHECK TABLE、LOAD INDEX INTO CACHE、OPTIMIZE TABLE、REPAIR TABLE等

    设计事务时,不应包含这类语句。如果在事务的前部中发布了一个不能被回滚的语句,则后部的其它语句会发生错误,在这些情况下,通过发布ROLLBACK语句不能 回滚事务的全部效果。

    MySQL 数据表主要支持六种类型 ,分别是:BDB、HEAP、ISAM、MERGE、MYISAM、InnoBDB。
    这六种又分为两类,一类是“事务安全型”(transaction-safe),包括BDB和InnoDB;其余都属于第二类,称为”非事务安全型”(non-transaction-safe)。
    问题解决:
      存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。
    InnoDB 是较新的事务安全型存储引擎,用于事务处理应用程序,支持BDB的几乎所有特性,并具有众多新特性,包括ACID事务支持。
    特性:
    事务处理机制 
    支持外链 
    崩溃后能立即恢复 
    支持外键功能,级联删除 
    支持并发能力 
    在硬盘上的存储方式:InnoBDB frm
    最新版本的Mysql已经计划移除对BDB的支持,转而全力发展InnoDB。InnoDB对Mysql有更好的特性支持,而且开发社区活跃。
      MyISAM 默认的MySQL插件式存储引擎,它是基于ISAM类型,但它增加了许多有用的扩展,它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。注意,通过更改STORAGE_ENGINE配置变量,能够方便地更改MySQL服务器的默认存储引擎。 
    优点:
    1.比ISAM表更小,所占资源更少 
    2.可以在不同平台间二进制移植表的类型在创建表时指定。
  • 相关阅读:
    备份服务-Rsync
    mysql查询语句,int类型加引号居然也能查
    echo显示带颜色
    python读文件
    python发送邮件
    javadoc源码获取
    mac修改终端用户名
    [tomcat]-tomcat8启动时SessionIdGeneratorBase.createSecureRandom耗时
    shell运算符
    shell中$*和$@ 两个都区别
  • 原文地址:https://www.cnblogs.com/xiaopotian/p/8275405.html
Copyright © 2011-2022 走看看