首页 > 试题广场 >

批量插入数据,不使用replace操作

[编程题]批量插入数据,不使用replace操作
  • 热度指数:125930 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
题目已经先执行了如下语句:
drop table if exists actor;
CREATE TABLE actor (
   actor_id  smallint(5)  NOT NULL PRIMARY KEY,
   first_name  varchar(45) NOT NULL,
   last_name  varchar(45) NOT NULL,
   last_update  DATETIME NOT NULL);
insert into actor values ('3', 'WD', 'GUINESS', '2006-02-15 12:34:33');

对于表actor插入如下数据,如果数据已经存在,请忽略(不支持使用replace操作)
actor_id first_name last_name last_update
'3' 'ED' 'CHASE' '2006-02-15 12:34:33'
示例1

输入

drop table if exists actor;
CREATE TABLE actor (
   actor_id  smallint(5)  NOT NULL PRIMARY KEY,
   first_name  varchar(45) NOT NULL,
   last_name  varchar(45) NOT NULL,
   last_update  DATETIME NOT NULL);
insert into actor values ('3', 'WD', 'GUINESS', '2006-02-15 12:34:33');

输出

3|WD|GUINESS|2006-02-15 12:34:33
在 SQLite 中,用 INSERT OR IGNORE 来插入记录,或忽略插入与表内UNIQUE字段都相同的记录
INSERT OR IGNORE INTO actor VALUES (3, 'ED', 'CHASE', '2006-02-15 12:34:33')
用 INSERT OR REPLACE 来插入记录,或更新替代与表内UNIQUE字段都相同的记录
INSERT OR REPLACE INTO actor VALUES (3, 'ED', 'CHASE', '2006-02-15 12:34:33')
发表于 2017-07-20 22:57:47 回复(3)
更多回答
发表于 2022-06-05 10:59:46 回复(0)
INSERT IGNORE INTO actor VALUES (3, 'ED', 'CHASE', '2006-02-15 12:34:33');
发表于 2021-03-28 10:32:24 回复(0)
第一次知道还有INSERT OR IGNORE这种东西啊
发表于 2019-07-18 16:57:30 回复(35)

因为题目判定系统使用的是sqlite3,所以必须按sqlite3的写法来做,

insert or ignore into actor 
values(3,'ED','CHASE','2006-02-15 12:34:33');

如果是mysql,那么把or去掉,像下面这样:

insert IGNORE into actor 
values(3,'ED','CHASE','2006-02-15 12:34:33');

两种数据库还是有区别的。

发表于 2017-11-08 19:14:26 回复(11)
如果不存在则插入,如果存在则忽略
INSERT OR IGNORE INTO tablename VALUES(...);

如果不存在则插入,如果存在则替换
INSERT OR REPLACE INTO tablename VALUES(...);

这里指的存在表示的是unique属性的列值存在的情况下,unique表示键值唯一

发表于 2017-09-01 01:52:36 回复(1)
mysql中要把or去掉
发表于 2017-07-31 17:12:13 回复(5)
insert or ignore into actor values('3','ED','CHASE','2006-02-15 12:34:33') 

insert into:插入数据,如果主键重复,则报错
insert repalce:插入替换数据,如果存在主键或unique数据则替换数据
insert ignore:如果存在数据,则忽略。
发表于 2017-08-30 15:51:40 回复(0)
看到insert or ignore这玩意,我瞬间觉得我的sql白学了
发表于 2020-06-10 16:34:55 回复(1)
  •  insert into
    表示插入数据,数据库会检查主键,如果出现重复会报错;
  • replace into
    表示插入替换数据,需求表中有PrimaryKey, 或者unique索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;
  • insert ignore
    如果中已经存在相同的记录,则忽略当前新数据;
    insert ignore actor values('3','ED','CHASE','2006-02-15 12:34:33');

发表于 2021-10-06 13:18:12 回复(1)
知识盲区:ignore
insert ignore into actor values (3, 'ED', 'CHASE', '2006-02-15 12:34:33')
我用的select 插的,局限性很大。
insert into actor select 3, 'ED', 'CHASE', '2006-02-15 12:34:33' from actor where actor_id <> 3


发表于 2021-03-27 11:05:53 回复(0)

总结:

  • insert into
    在插入时,如果没有该数据,则插入成功;
    在插入时,如果已经存在该数据,则会报错。
  • insert ignore into
    在插入时,如果没有该数据,则插入成功;
    在插入时,如果存在数据,则会忽略掉本次插入的数据,并且原数据不变。
  • replace into
    在插入时,如果没有该数据,则直接插入新数据成功;
    在插入时,如果存在该数据,则会先删掉原先的数据,并且插入新数据进行更新。

对于某个表中是否已经存在该数据的判断依据:根据主键或者唯一索引判断。

发表于 2022-08-06 19:34:29 回复(1)
【关键词】1.用插入的方法;2.主键重复时,对已存在数据进行忽略。
MySQL中插入时忽略的方法:insert ignore into...
insert ignore into actor
values
('3','ED','CHASE','2006-02-15 12:34:33');
此时忽略的意思是,插了等于没插。
发表于 2021-01-24 01:20:53 回复(1)
牛客网的表情好可爱啊
发表于 2020-05-02 20:01:02 回复(17)
insert ignore into actor values('3', 'ED', 'CHASE', '2006-02-15 12:34:33')

发表于 2021-08-30 17:21:51 回复(0)
两种解法:
    第一种insert ignore into语句
    
insert ignore into actor (3,'ED','CHASE','2006-02-15 12:34:33');

   第二钟是on dupilcate key update语句

insert into actor (3,'ED','CHASE','2006-02-15 12:34:33') on duplicate key update id = id;



   
发表于 2021-08-15 01:34:19 回复(0)
inserT into actor 
values('1','PENELOPE','GUINESS','2006-02-15 12:34:33'),
('2','NICK','WAHLBERG','2006-02-15 12:34:33')
发表于 2021-05-07 11:49:32 回复(0)
查询结果作为插入数据
insert into actor(actor_id,first_name, last_name, last_update) 
select actor_id,first_name, last_name, last_update
from actor
where actor_id != 3
编辑于 2021-04-08 17:13:18 回复(0)
/*
这是对于mysql这么写,他这个中间要加or
 insert into:插入数据,如果主键重复,则报错
insert repalce:插入替换数据,如果存在主键或unique数据则替换数据
insert ignore:如果存在主键或unique数据,则忽略。

insert IGNORE into actor
values(3,'ED','CHASE','2006-02-15 12:34:33');
*/

------------------------------------------------------------分割线-----------------------------------------
你把分割线以上的粘进去也能通过,我懵了,这不是注释吗
发表于 2020-04-23 21:24:59 回复(0)
insert or ignore into actor values('3','ED','CHASE','2006-02-15 12:34:33')
发表于 2022-04-16 14:57:32 回复(0)

问题信息

难度:
141条回答 18501浏览

热门推荐

通过挑战的用户

查看代码