本文转自:只会玩卡尔
-- 查询创建表语句
show create table person;
-- 创建person表,主键为int自增
CREATE TABLE `person` (
`id` int(6) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
`phone` varchar(32) DEFAULT NULL,
`address` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
-- 新增测试数据
insert into person(name,phone,address) values ('张三','18812345678','浙江省杭州市');
insert into person(name,phone,address) values ('李四','18712345678','湖南省长沙市');
insert into person(name,phone,address) values ('王五','18612345678','江苏省南京市');
-- 查询数据
select * from person;
执行replace into
语句:
replace into person(id,name,phone) values (1,'张三','18812345678') ;
再次进行查询:
执行replace into
语句:
replace into person(id,name,phone,address) values (4,'赵六','18512345678','河北省石家庄市');
再次进行查询:
根据如上执行过程可以看出:
第一次的replace into语句,为更新id=1的数据,结果影响了2行,并且更新后address字段值内容为空。
第二次的replace into语句,为新增id=4的数据,结果影响了1行。
通过查询资料发现,若更新原有数据,replace into会先删除掉原有数据,此时结果影响1行,随后又新增该更新后的语句,结果又影响1行,由于values中未带有address字段值内容,所以更新后数据address字段值为空。
Q.E.D.