SQL35 对于表actor批量插入如下数据,冲突忽略

本文最后更新于:2022年4月9日 中午


题目描述

对于表actor批量插入如下数据,如果数据已经存在,请忽略(不支持使用replace操作)

1
2
3
4
5
CREATE TABLE IF NOT EXISTS actor (
actor_id smallint(5) NOT NULL PRIMARY KEY,
first_name varchar(45) NOT NULL,
last_name varchar(45) NOT NULL,
last_update timestamp NOT NULL DEFAULT (datetime('now','localtime')))
actor_id first_name last_name last_update
‘3’ ‘ED’ ‘CHASE’ ‘2006-02-15 12:34:33’

输入描述

输出描述

题解

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

备注:

  1. 系统使用的是sqlite3,因此 insert or ignore into 表 values(),...,()

  2. 对于mysql,那么把or去掉,insert ignore into 表 values(),...,()

  3. 主键冲突的解决方案有三种,但是需要根据具体的业务来选择合适的方式

    • 忽略新数据: insert ignore
    • 更新部分数据: insert ... on duplicate key update
    • 全部替换: replace into

    从效率上来讲, insert into 不考虑冲突的效率最高,三种解决冲突的方式都会有效率下降(需要检索),其中三种本身的效率依次是:忽略新数据 > 更新部分数据 > 替换全部。