1. 程式人生 > 其它 >MySQL的唯一插入,增量更新

MySQL的唯一插入,增量更新

技術標籤:資料庫資料庫mysql

唯一插入

首先我們先建立一個使用者表:

DROP TABLE IF EXISTS `nb_sys_user`;
CREATE TABLE `nb_sys_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否刪除,N:未刪除,Y:刪除',
  `gmt_create` datetime NOT NULL DEFAULT '2020-12-30 12:00:00' COMMENT '記錄建立時間',
  `
gmt_modified` datetime NOT NULL DEFAULT '2020-12-30 12:00:00' COMMENT '記錄修改時間', `user_id` int(11) NOT NULL DEFAULT '0' COMMENT '使用者id', `sfzhm` varchar(18) NOT NULL DEFAULT '' COMMENT '身份證號碼', `real_name` varchar(20) NOT NULL DEFAULT '' COMMENT '真實姓名', PRIMARY KEY (`id`) USING BTREE, KEY `idx_user_id`
(`is_deleted`,`user_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='使用者';

nb_sys_user表中插入資料:

INSERT INTO `nb_sys_user`(`is_deleted`, `gmt_create`, `gmt_modified`, `user_id`, `sfzhm`, `real_name`) VALUES ('N', '2020-12-30 12:00:00', '2020-12-30 12:00:00', 1, '32092519xx02184513'
, '張三');

此時再插入同樣的資料,還是可以成功的。

如果我們想要保持資料的唯一性,就需要先查詢,判斷使用者是否插入,無再進行新增插入操作。

有沒有一步到位的方法呢?答案是,有的。

sfzhm欄位新增唯一鍵約束

ALTER TABLE `nb_sys_user` ADD unique(`sfzhm`);

因為身份證號碼是唯一,所以自然是可以作為唯一鍵約束。

INSERT INTO `nb_sys_user`(`is_deleted`, `gmt_create`, `gmt_modified`, `user_id`, `sfzhm`, `real_name`) VALUES ('N', '2020-12-30 12:00:00', '2020-12-30 12:00:00', 1, '32092519xx02184513', '張三');

再執行上面的插入語句,發現插入並不會成功。

增量更新

1 如果該條資料存在,則實行更新操作
REPLACE INTO `nb_sys_user`(`is_deleted`, `gmt_create`, `gmt_modified`, `user_id`, `sfzhm`, `real_name`) VALUES ('N', '2020-12-30 12:00:00', '2020-12-30 12:00:00', 1, '32092519xx02184513', '張三三');

此時使用者姓名更新為張三三。

1 如果該條資料存在,則實行更新操作,不存在則進行插入操作
INSERT INTO `nb_sys_user`(`is_deleted`, `gmt_create`, `gmt_modified`, `user_id`, `sfzhm`, `real_name`) VALUES ('N', '2020-12-30 12:00:00', '2020-12-30 12:00:00', 1, '32092519xx02184516', '李四')  ON DUPLICATE KEY 
  UPDATE `real_name`='李四'; 

此時使用者表中新增使用者李四。