MySQL 开发

MySQL insert or update

2018-12-04  本文已影响160人  殷天文

业务场景

解决方案:

ON DUPLICATE KEY UPDATE

CREATE TABLE `stu_class_ref` (
  `id` varchar(30) NOT NULL,
  `stu_id` varchar(30) DEFAULT NULL,
  `class_id` varchar(30) DEFAULT NULL,
  `note` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `stu_id` (`stu_id`,`class_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO 
`test`.`stu_class_ref`(`id`, `stu_id`, `class_id`, `note`) 
VALUES ('001', 'zhangsan', 'yuwen', NULL);
准备数据
INSERT INTO 
`test`.`stu_class_ref`(`id`, `stu_id`, `class_id`, `note`) 
VALUES (UUID_SHORT(), 'zhangsan', 'yuwen', '我喜欢语文:)')
ON DUPLICATE KEY UPDATE note = '我喜欢语文:)'
> Affected rows: 2
> 时间: 0.042s
ON DUPLICATE KEY UPDATE
INSERT INTO 
`test`.`stu_class_ref`(`id`, `stu_id`, `class_id`, `note`) 
VALUES (UUID_SHORT(), 'zhangsan', 'yuwen', NULL)
ON DUPLICATE KEY UPDATE note = VALUES(class_id)
> Affected rows: 2
> 时间: 0.006s
ON DUPLICATE KEY UPDATE

REPLACE INTO

REPLACE INTO `stu_class_ref`(`id`, `stu_id`, `class_id`, `note`) 
VALUES (UUID_SHORT(), 'zhangsan', 'yuwen', NULL)
> Affected rows: 2
> 时间: 0.004s
REPLACE INTO

ON DUPLICATE KEY UPDATE 与 REPLACE INTO

CREATE TABLE `interesting` (
  `id` varchar(30) NOT NULL,
  `uni_a` varchar(30) DEFAULT NULL,
  `uni_b` varchar(30) DEFAULT NULL,
  `uni_c` varchar(30) DEFAULT NULL,
  `version` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uni_a` (`uni_a`) USING BTREE,
  UNIQUE KEY `uni_b` (`uni_b`) USING BTREE,
  UNIQUE KEY `uni_c` (`uni_c`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `test`.`interesting`(`id`, `uni_a`, `uni_b`, `uni_c`, `version`) 
VALUES ('1', 'a', 'a', 'a', NULL);
INSERT INTO `test`.`interesting`(`id`, `uni_a`, `uni_b`, `uni_c`, `version`) 
VALUES ('2', 'b', 'b', 'b', NULL);
INSERT INTO `test`.`interesting`(`id`, `uni_a`, `uni_b`, `uni_c`, `version`) 
VALUES ('3', 'c', 'c', 'c', NULL);
准备数据
  1. 执行 ON DUPLICATE KEY UPDATE
INSERT INTO `interesting`(`id`, `uni_a`, `uni_b`, `uni_c`, `version`) 
VALUES (UUID_SHORT(), 'a', 'b', 'c', NULL)
ON DUPLICATE KEY UPDATE version = 666
> Affected rows: 2
> 时间: 0.049s
ON DUPLICATE KEY UPDATE
  1. 再看一下 REPLACE INTO
REPLACE INTO `interesting`(`id`, `uni_a`, `uni_b`, `uni_c`, `version`) 
VALUES (UUID_SHORT(), 'a', 'b', 'c', NULL)
> Affected rows: 4
> 时间: 0.026s
REPLACE INTO

总结:

上一篇 下一篇

猜你喜欢

热点阅读