11、ON DUPLICATE KEY UPDATE实现插入更新操作

2023-02-16,,,,

一、插入更新操作

MySQL中,采用ON DUPLICATE KEY UPDATE语句对不存在的数据进行INSERT插入操作,对已存在的数据进行UPDATE更新操作;

总结:

1、ON DUPLICATE KEY UPDATE语句根据主键或唯一键来判断当前插入是否已存在。

2、记录已存在时,只会更新ON DUPLICATE KEY UPDATE语句之后指定的字段。

3、如果同时传递了主键和唯一键,以主键为判断存在依据,唯一键字段内容可以被修改。

注:(uuid为主键,name为唯一索引)

CREATE TABLE `demo` (
`uuid` varchar(64) NOT NULL COMMENT '设备id',
`name` varchar(255) NOT NULL COMMENT '主机名',
`code` varchar(255) DEFAULT NULL COMMENT '设备用途',
PRIMARY KEY (`uuid`) USING BTREE,
UNIQUE KEY `name` (`name`) USING BTREE COMMENT '唯一索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1、当INSERT语句存在主键或者唯一索引的列:

当INSERT语句存在主键或者唯一索引的列时,ON DUPLICATE KEY UPDATE语句根据主键ID或唯一索引来判断当前插入是否已存在,若已存在时,只会更新ON DUPLICATE KEY UPDATE之后限定的字段

(1)、INSERT中仅根据主键方式:

根据主键进行更新操作

INSERT INTO `demo`(`uuid`, `code`) VALUES ('1', '35')
ON DUPLICATE KEY UPDATE
`code` = VALUES(`code`)

(2)、INSERT中仅根据唯一索引方式:

根据唯一索引进行更新操作

INSERT INTO `demo`( `name`, `code`) VALUES ( '桌子', '80')
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`code` = VALUES(`code`)

(3)、INSERT中主键存在相同,唯一索引不同:

根据主键进行更新操作

INSERT INTO `demo`( `uuid`,`name`, `code`) VALUES ( "2",'凳子', '50')
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`code` = VALUES(`code`)

(4)、INSERT中唯一索引存在相同,主键不同:

即不插入也不更新(存在唯一键冲突)

2、当INSERT语句不存在主键或者唯一索引的列:

当INSERT语句不存在主键或者唯一索引的列时,仅执行插入操作

INSERT INTO `demo`( `uuid`,`name`, `code`) VALUES ( "3",'裤子', '80')
ON DUPLICATE KEY UPDATE
`name` = VALUES(`name`),
`code` = VALUES(`code`)

3、ON DUPLICATE KEY UPDATE之后没有使用VALUES的情况:

(1)、`name` = `name`方式:

保持数据库原值,不进行更新操作

INSERT INTO `demo`( `uuid`,`name`, `code`) VALUES ( "3",'衣服', '80')
ON DUPLICATE KEY UPDATE
`name` = `name`,
`code` = VALUES(`code`)

(2)、`name` ="鞋子"方式:

INSERT INTO `demo`( `uuid`,`name`, `code`) VALUES ( "3",'衣服', '80')
ON DUPLICATE KEY UPDATE
`name` = "鞋子",
`code` = VALUES(`code`)

4、ON DUPLICATE KEY UPDATE与WHERE方式同时实现:

对设备进行更新操作时,有时需要判断某字段在满足某种情况才能执行更新

故可采用:

#方式一
INSERT INTO `demo`( `uuid`,`name`, `code`) VALUES ( "3",'衣服', '50')
ON DUPLICATE KEY UPDATE
`name` = IF( `name` = "鞋子", "电器", `name` ),
`code` = VALUES(`code`) #方式二
INSERT INTO `demo`( `uuid`,`name`, `code`) VALUES ( "3",'衣服', '50')
ON DUPLICATE KEY UPDATE
`name` = IF( `code` = "80", "电器", `name` ),
`code` = VALUES(`code`)

二、MySQL保留七天数据方式:

1、查询七天内数据:

SELECT * FROM table_info t where TO_DAYS(NOW())-TO_DAYS(t.create_time)<7;

2、删除七天外数据:

DELETE FROM table_info t where TO_DAYS(NOW())-TO_DAYS(t.create_time)>7;

搜索

复制

11、ON DUPLICATE KEY UPDATE实现插入更新操作的相关教程结束。

《11、ON DUPLICATE KEY UPDATE实现插入更新操作.doc》

下载本文的Word格式文档,以方便收藏与打印。