在MyISAM存储引擎下写的服务器代码和SQL语句,可以不通过任何修改,移植到InnoDb存储引擎下吗?

解决方案 »

  1.   

    是不是Mysql存储引擎之间都可以不做任何修改就可以替换?
      

  2.   

    不一定,你要用到INNODB的功能,代码肯定要修改,当然如果不用,不需要修改
      

  3.   

    可以直接运行。SQL语句的解析是MYSQL来实现的,不是存储引擎。 但某些语句对某个存储引擎是不支持的,会无法达到预期效果,比如 innodb中的事务,在MYISAM中就不支持。 但 MYISAM下的基本上在INNODB中没有问题。
      

  4.   

    用到INNODB的功能,是不是必须修改啊?
      

  5.   


    innodb支持事务,如果出错,数据库自己会回滚吗,不需要我们特殊写SQL语句来处理的?
      

  6.   

     示例:mysql> delimiter $$
    03 mysql>
    04 mysql> CREATE PROCEDURE myProc(
    05     ->   in_from INTEGER,
    06     ->   in_to   INTEGER,
    07     ->   in_amount DECIMAL(8,2))
    08     -> BEGIN
    09     ->
    10     ->   DECLARE txn_error INTEGER DEFAULT 0 ;
    11     ->
    12     ->   DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN
    13     ->     SET txn_error=1;
    14     ->   END;
    15     ->
    16     ->   SAVEPOINT savepoint_tfer;
    17     ->
    18     ->   UPDATE employee
    19     ->      SET salary=in_amount
    20     ->    WHERE id=in_from;
    21     ->
    22     ->   IF txn_error THEN
    23     ->     ROLLBACK TO savepoint_tfer;
    24     ->     SELECT 'Transfer aborted ';
    25     ->   ELSE
    26     ->     UPDATE employee
    27     ->        SET salary=in_amount
    28     ->      WHERE id=in_to;
    29     ->
    30     ->      IF txn_error THEN
    31     ->         ROLLBACK TO savepoint_tfer;
    32     ->         SELECT 'Transfer aborted ';
    33     ->      END IF;
    34     ->   END IF;
    35     ->
    36     -> END$$
    37 Query OK, 0 rows affected (0.00 sec)
      

  7.   


    你看我理解的对不对,innodb
    你看我理解的对不对,innodb是支持事务的,你可以在存储过程里调用回滚的相关操作,如果出错了,会回滚到你需要的位置。如果你在存储过程里不写回滚的相关操作,即使出了错数据库也不会有回滚操作的?
      

  8.   

    查MYSQL手册了吧,不同存储引擎支持功能都不同,有的支持事务有的不支持事务,你代码肯定要做相应修改的撒
      

  9.   


    如果MYISAM出现异常回滚,那MYISAM和innodb在是否支持事务就没有什么区别了吧?
      

  10.   


    在一个事务中,如果混合使用事务性表和非事务性表,假如事务处理一切顺利,那么结果也会正常。但是,如果事务须回滚,那么在非事务性表上做的修改将无法取消。这将导致数据库处于数据不一致的状态,在这种状态下,很难对数据进行恢复,并且事务会变得悬而未决。上面是不是说发生异常时,MyISAM的表是不回滚的?