存储引擎的更改 在MyISAM存储引擎下写的服务器代码和SQL语句,可以不通过任何修改,移植到InnoDb存储引擎下吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 是不是Mysql存储引擎之间都可以不做任何修改就可以替换? 不一定,你要用到INNODB的功能,代码肯定要修改,当然如果不用,不需要修改 可以直接运行。SQL语句的解析是MYSQL来实现的,不是存储引擎。 但某些语句对某个存储引擎是不支持的,会无法达到预期效果,比如 innodb中的事务,在MYISAM中就不支持。 但 MYISAM下的基本上在INNODB中没有问题。 用到INNODB的功能,是不是必须修改啊? innodb支持事务,如果出错,数据库自己会回滚吗,不需要我们特殊写SQL语句来处理的? 示例:mysql> delimiter $$03 mysql>04 mysql> CREATE PROCEDURE myProc(05 -> in_from INTEGER,06 -> in_to INTEGER,07 -> in_amount DECIMAL(8,2))08 -> BEGIN09 ->10 -> DECLARE txn_error INTEGER DEFAULT 0 ;11 ->12 -> DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN13 -> SET txn_error=1;14 -> END;15 ->16 -> SAVEPOINT savepoint_tfer;17 ->18 -> UPDATE employee19 -> SET salary=in_amount20 -> WHERE id=in_from;21 ->22 -> IF txn_error THEN23 -> ROLLBACK TO savepoint_tfer;24 -> SELECT 'Transfer aborted ';25 -> ELSE26 -> UPDATE employee27 -> SET salary=in_amount28 -> WHERE id=in_to;29 ->30 -> IF txn_error THEN31 -> 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) 你看我理解的对不对,innodb你看我理解的对不对,innodb是支持事务的,你可以在存储过程里调用回滚的相关操作,如果出错了,会回滚到你需要的位置。如果你在存储过程里不写回滚的相关操作,即使出了错数据库也不会有回滚操作的? 查MYSQL手册了吧,不同存储引擎支持功能都不同,有的支持事务有的不支持事务,你代码肯定要做相应修改的撒 如果MYISAM出现异常回滚,那MYISAM和innodb在是否支持事务就没有什么区别了吧? 在一个事务中,如果混合使用事务性表和非事务性表,假如事务处理一切顺利,那么结果也会正常。但是,如果事务须回滚,那么在非事务性表上做的修改将无法取消。这将导致数据库处于数据不一致的状态,在这种状态下,很难对数据进行恢复,并且事务会变得悬而未决。上面是不是说发生异常时,MyISAM的表是不回滚的? mysql 表连接 mysql数据库导出问题 mysql的数据类型问题 新手提问 java中用preparedstatement向mysql日期字段插入问题 PREPARE stmt1 FROM @v; EXECUTE stmt1;的结果集怎么得到? 请教mysql两个查询语句 mysql 连接出问题,请高手解决 mysql里有没有DateDiff()函数? 请问高手--在freeBSD下遇到编译时,找不到mysql库的问题怎么解决(高分求) MYSQL怎么判断外键关系是否存在? 求助:请教一个SQL 查询语句问题
innodb支持事务,如果出错,数据库自己会回滚吗,不需要我们特殊写SQL语句来处理的?
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)
你看我理解的对不对,innodb
你看我理解的对不对,innodb是支持事务的,你可以在存储过程里调用回滚的相关操作,如果出错了,会回滚到你需要的位置。如果你在存储过程里不写回滚的相关操作,即使出了错数据库也不会有回滚操作的?
如果MYISAM出现异常回滚,那MYISAM和innodb在是否支持事务就没有什么区别了吧?
在一个事务中,如果混合使用事务性表和非事务性表,假如事务处理一切顺利,那么结果也会正常。但是,如果事务须回滚,那么在非事务性表上做的修改将无法取消。这将导致数据库处于数据不一致的状态,在这种状态下,很难对数据进行恢复,并且事务会变得悬而未决。上面是不是说发生异常时,MyISAM的表是不回滚的?