首页 > 试题广场 >

数据库职工有一张表person,表结构与数据如图所示:

[单选题]
数据库职工有一张表person,表结构与数据如图所示

执行SQL语句 Insert into person(id_card_num ,first_name,last_name,gender,age)value(310001,banana,yellow,1,13) on duplicate key update age=13 以下描述正确的是()?
  • 第一条数据(id=1)first_name,last_name,age分别是banana,yellow,13,其他均保持不变
  • 第二条数据(id=2)age置为13,其他均保持不变
  • 第一条数据(id=1)age置为12,其他均保持不变
  • 第二条数据(id=2)id_cart_num,gender,age分别置为310001,1,13,其他均保持不变
没有正确答案。。
发表于 2018-09-04 14:54:32 回复(0)

我认为这条语句是找到唯一索引id_card_name==310001,然后对其修改数据。
有这样一个链接,关于

INSERT ... ON DUPLICATE KEY UPDATE

链接如下:

http://blog.csdn.net/ghsau/article/details/23557915
发表于 2017-08-22 17:57:48 回复(1)
首先题目中的SQL语句有问题,vaLues写成了value, 后面还多了个update: 
...,age)value(310001,banana,yellow,1,13)update on duplicate...
然后答案也是错的,在mysql中试了,sql语句如下:
use test;
DROP TABLE IF EXISTS person;
CREATE TABLE person(
id int(11) NOT NULL AUTO_INCREMENT,
id_card_num int(11) NOT NULL,
first_name VARCHAR(50),
last_name VARCHAR(50),
gender TINYINT(1),
age INT(11),
PRIMARY KEY(id)
);
SHOW INDEX FROM person;
ALTER TABLE person ADD UNIQUE(id_card_num);
ALTER TABLE person ADD INDEX(first_name, last_name);
ALTER TABLE person ADD INDEX(gender);

INSERT INTO person(id_card_num, first_name, last_name,gender,age)
VALUES(310001,'apple','red',1,12);
INSERT INTO person(id_card_num, first_name, last_name,gender,age)
VALUES(310002,'banana','yellow',0,12);
INSERT INTO person(id_card_num, first_name, last_name,gender,age)
VALUES(310003,'cucumber','green',0,12);

INSERT INTO person(id_card_num, first_name, last_name,gender,age)
VALUES(310001,'banana','yellow',1,13) ON DUPLICATE KEY UPDATE age=13;
SELECT * FROM person;
结果如下图:



发表于 2017-08-28 10:52:18 回复(3)

on duplicate key update 可以达到以下目的:
向数据库中插入一条记录:

  • 若该数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作, 即UPDATE 后面的操作。
  • 否则插入一条新的记录。

本题中id_card_num为UNIQUE KEY,310001已存在,所以应该执行on duplicate key update后的操作,将该条记录的age更新为13

//本题sql
Insert into person(id_card_num ,first_name,last_name,gender,age)value(310001,banana,yellow,1,13) update on duplicate key update age=13
//正确sql,更新单条记录时使用values,更新多条记录时使用value
Insert into person(id_card_num ,first_name,last_name,gender,age)values(310001,banana,yellow,1,13) on duplicate key update age=13
发表于 2020-05-05 17:01:28 回复(0)
on duplicate key, id_card_num是unique的,所以310001在原表中是重复键,应该执行后面的update,仅更新age=13
发表于 2018-03-20 20:44:26 回复(0)
试完,我一脸蒙圈的看着答案,只有id为1时的age变为13其他都没有变啊~~~
发表于 2017-09-04 17:47:49 回复(0)
感觉是不是选项C的13写成12了,不然这题没有正确答案
发表于 2020-06-19 21:45:59 回复(0)
这题目都是哪找的?
编辑于 2024-03-27 11:12:56 回复(0)
没有正确答案,ON DUPLICATE KEY UPDATE 是 MySQL 中的一种用法,通常在执行 INSERT 语句时使用,当插入的数据主键或者唯一索引已存在时,该语句就会触发,它的作用是对已存在的记录进行更新,而不是插入重复的记录。
ON DUPLICATE KEY UPDATE语句只会在遇到重复的主键时更新相应的字段值,而不会更新其他字段的值。
发表于 2023-02-05 21:15:15 回复(0)
这答案有问题吧
发表于 2022-05-10 09:21:01 回复(0)
insert语句里面,不用插入主键id吗?还是说 on duplicate key update语句里面可以忽略?还是说如果没有重复的,那么插入失败?
发表于 2020-03-18 15:30:03 回复(0)
是的,题目有错,答案也没有正确选项,贴个地址,供大家参考https://www.cnblogs.com/lqh969696/p/11387451.html
发表于 2020-03-10 16:46:30 回复(0)
列id_card_number被定义为UNIQUE,并且包含值310001,则原有的记录被更新,即第一行被更新
如果唯一属性不重复,则应该是新插入一条
发表于 2018-03-09 18:26:50 回复(0)
A
发表于 2017-12-23 02:06:00 回复(0)
发表于 2017-11-25 01:23:40 回复(0)
d
发表于 2017-10-18 00:19:00 回复(0)
答案做了,查了好久,应该选择A
发表于 2017-08-27 22:12:15 回复(0)
觉得也应该是A

发表于 2017-08-24 18:15:34 回复(0)
答案不对吧!!!应该选择A选项
id_card_num字段是unique index,所以对应的应该是id=1也就是第一条数据,
对第一条数据进行更新操作。
编辑于 2017-08-24 16:37:28 回复(1)
a
发表于 2017-08-23 22:59:51 回复(0)