时间:2021-07-01 10:21:17 帮助过:2人阅读
REPLACE INTO 跟INSERT INTO功能类似,不同点在于:REPLACE INTO首先尝试插入数据到表中, 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 否则,直接插入新数据。类似于SQL Server中以下语句:
if not exists (select 1 from t where id = 1)? insert into t(id, update_time) values(1, getdate()) else update t set update_time = getdate() where id = 1
需要注意的是:
1)插入数据的表必须有主键或者是唯一索引!否则的话,REPLACE INTO会直接插入数据,这将导致表中出现重复的数据。
2)如果一个表中既有主键,又有唯一索引,或者有多个唯一索引时,必须用INSERT INTO和UPDATE代替REPLACE INTO。
我们创建一张表t_s_alarm,创建一个主键i_id,创建一个唯一索引i_code,语句如下:
create table t_s_alarm( i_id INT(10) unsigned not null auto_increment, i_code INT(10) unsigned not NULL, v_alarm varchar(100) default NULL, v_memo VARCHAR(100) default NULL, primary key (i_id), unique key (i_code))
插入三条记录:
INSERT INTO t_s_alarm (i_code, v_alarm, v_memo) VALUES (1, ‘alarm1‘, ‘test1‘), (2, ‘alarm2‘, ‘test1‘), (3, ‘alarm3‘, ‘test3‘);
执行查询结果:
select * from t_s_alarm
再执行replace语句,执行结果是影响了2条记录:
REPLACE INTO t_s_alarm (i_code, v_alarm, v_memo) VALUES (1, ‘alarm4‘, ‘test4‘)
执行结果:
Query OK, 2 rows affected (63 ms)
执行查询结果:
select * from t_s_alarm
从查询的结果来看,第一条记录被删除了,插入了一条新记录。
MYSQL培训准备(1):MYSQL 的数据插入
标签: