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会将其视为一个事务来处理,因此没有任何数据插入。

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

^_^很晚了,写到这里吧,这里只是对这些容易忘记的知识进行总结,希望能增加记忆,做到融会贯通,晚安!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值