当前位置:Gxlcms > 数据库问题 > MYSQL培训准备(1):MYSQL 的数据插入

MYSQL培训准备(1):MYSQL 的数据插入

时间:2021-07-01 10:21:17 帮助过:2人阅读

REPLACE [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... 语法二: REPLACE [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... 语法三: REPLACE [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name SET col_name=expression, col_name=expression, ...

    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 的数据插入

标签:

人气教程排行