题目描述
题目已经执行了如下语句:
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 语句)
答案解析
本题主要考察的是 SQL 中的 insert,insert ignore 以及 replace 的区别。
我们先来看一下三个语句的区别:
| 指令 | 记录已存在 |
|---|---|
| insert | 报错 |
| insert ignore | 忽略 |
| replace | 替换 |
示例:
创建表:
CREATE TABLE student(id INT(10) PRIMARY KEY AUTO_INCREMENT,name VARCHAR(255) UNIQUE,age INT(10));
插入记录:
INSERT INTO student(name, age)VALUES('小明',24),('小张',25),('小红',23),('小强',24);
查询所有记录,查询全表结果如下:
+----+--------+------+| id | name | age |+----+--------+------+| 1 | 小明 | 24 || 2 | 小张 | 25 || 3 | 小红 | 23 || 4 | 小强 | 24 |+----+--------+------+
INSERT
如果使用 insert 插入已存在的数据,插入不会成功,报错,但是主键 id 自增。
INSERT IGNORE
如果使用 insert ignore 插入已存在的数据,则会忽略新插入的记录,主键 id 会自增,语句执行不报错。
执行语句:
INSERT IGNORE INTO student(name, age) VALUES ('小明', 24);
语句执行成功,查询全表结果如下:
+----+--------+------+| id | name | age |+----+--------+------+| 1 | 小明 | 24 || 2 | 小张 | 25 || 3 | 小红 | 23 || 4 | 小强 | 24 |+----+--------+------+
REPLACE
如果使用 replace 语句,如果插入的是已存在的记录,则会删除原来的记录,添加新的记录;如果插入的是未存在的记录,则会执行正常的 insert 操作。
执行语句:
REPLACE INTO student(name,age) VALUES ('小明',25);
语句执行成功,查询全表结果如下:
+----+--------+------+| id | name | age |+----+--------+------+| 2 | 小张 | 25 || 3 | 小红 | 23 || 4 | 小强 | 24 || 5 | 小明 | 25 |+----+--------+------+
回到本题,本题要求如果数据已经存在,则忽略;所以我们应该使用 insert ignore 语句,SQL 如下:
INSERT IGNORE INTO `actor` (`actor_id`,`first_name`,`last_name`,`last_update`)VALUES (3,'ED','CHASE','2006-02-15 12:34:33');
