网站建设知识
MySQL数据库中MyISAM存储引擎和InnoDB存储引擎在遇到未定义的值时的处理方式
2025-07-22 10:02  点击:0

MySQL数据库中MyISAM存储引擎和InnoDB存储引擎在遇到未定义的值时的处理方式。在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会将其视为一个事务来处理,因此没有任何数据插入。

综上,在使用分区时,也需要对不同存储引擎的支持的事务特性进行考虑了。