一、插入与更新操作:
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)
2、删除七天外数据:
DELETE FROM table_info t where TO_DAYS(NOW())-TO_DAYS(t.create_time)>7;
搜索
复制
Original: https://www.cnblogs.com/Iven-L/p/16571911.html
Author: 爱文(Iven)
Title: 11、ON DUPLICATE KEY UPDATE实现插入更新操作
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575707/
转载文章受原作者版权保护。转载请注明原作者出处!