在MySQL数据库中,MyISAM存储引擎和InnoDB存储引擎在处理INSERT、UPDATE等操作时,有这很大的区别;在这里呢,我只记录下两者在表中的转换使用,以备后用并分享给大家。
首先呢,创建一个表以借之来说明今天的主旨(该表是用LIST分区的方式建表):
CREATE TABLE t(
a int,
b int)engine=myisam
partition by list(b)(
partition p0 values in (1,3,5,7,9),
partition p1 value in (0,2,4,6,8)
) ;
下面呢插入一些数据至该表中,
INSERT INTO t values(1,2),(2,4),(6,10),(5,3);
当执行该语句时,会报错,原因呢,就是第三个插入值(6,10)中的10不在表的约束条件之内。
但是当我去执行SELECT * FROM t;后发现,表中已经有了两条数据,即(1,2),(2,4)插入成功了。
以此说明MyISAM存储引擎在遇到分区未定义的值时,会将之前的行数据都插入,但之后的数据不会被插入。那么InnoDB会怎样处理呢?
下面我们把目光投向InnoDB:
--myisam==>innodb
ALTER TABLE t engine=innodb;
--继续插入上面的数据
INSERT INTO t values (1,2),(2,4),(6,10),(5,3);
意料之中,同样的报错了,因为之前说过,有未定义的值。
--查看结果
SELECT * FROM t;
显示表中为空;
到这,已经很显然了,InnoDB存储引擎在遇到分区未定义的值时,不会将之前的行数据插入,其实呢,在遇到这种情况时,InnoDB会将其视为一个事务来处理,因此没有任何数据插入。
综上,在使用分区时,也需要对不同存储引擎的支持的事务特性进行考虑了。
^_^很晚了,写到这里吧,这里只是对这些容易忘记的知识进行总结,希望能增加记忆,做到融会贯通,晚安!