MySQL的唯一插入,增量更新
阿新 • • 發佈:2020-12-31
唯一插入
首先我們先建立一個使用者表:
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`='李四';
此時使用者表中新增使用者李四。