MySQL insert into select 主鍵沖突解決方案
場景
項目中,一張表里的基礎(chǔ)數(shù)據(jù),ID 是以 varchar 類型存入的,由于每年都會存在變動,在不改變歷史數(shù)據(jù)的情況下,每年生產(chǎn)一份當年使用的數(shù)據(jù),如果當年基礎(chǔ)數(shù)據(jù)有變動,則改動當年的數(shù)據(jù),往年歷史數(shù)據(jù)不做變更,通過邏輯進行數(shù)據(jù)分隔。
方案
1、小批量數(shù)據(jù)
小批量數(shù)據(jù),由于數(shù)據(jù)量少,通過 復制數(shù)據(jù)庫中原數(shù)據(jù)生成 insert 腳本,使用 UUID 來處理了主鍵問題,如下:
INSERT INTO test_category (id, create_date, update_date, label, sort, type, value, year) VALUES (replace(uuid(),'-',''), now(), now(), '汽車', 1, 'category', 'automobile', '2021'); INSERT INTO test_category (id, create_date, update_date, label, sort, type, value, year) VALUES (replace(uuid(),'-',''), now(), now(), '手機', 2, 'category', 'phone', '2021'); ...
因為數(shù)據(jù)量少,自己修改腳本也花不了多長時間,那么,如果數(shù)據(jù)量大,再這么寫就不行了,需要處理成百上千,甚至更多的時候,要怎么做呢?
2、大批量數(shù)據(jù)
這里,我通過 UUID + 自增來實現(xiàn),具體 SQL 如下:
INSERT INTO test_category (id, name, kind_id, sort, type, year) select concat(left(replace(uuid(),'-',''),28),(@i:=@i+1)) as id, name, kind_id, sort, type,'2022' as year from exhibits_dict_new edn left join (select @i:=1000) as t on 1 = 1 where year = '2021';
需要注意,這里關(guān)聯(lián)了一張臨時自增表,即:(select @i:=1000) as t 這里定義的 1000 為從 1000 開始,每一條記錄,自增 1,為了避免與原 ID 出現(xiàn)重復現(xiàn)象,使用了 UUID 函數(shù)生成新記錄,并截取后重新進行自增拼接,這樣,就完美的解決了使用 insert into select 在同一張表里進行數(shù)據(jù)插入時的 主鍵沖突問題。
3、備份表常用 SQL
-- 創(chuàng)建一張表結(jié)構(gòu)、索引信息一模一樣的 空表 create table test_category_bak like test_category; -- 往新備份的表中,插入需要備份的數(shù)據(jù) 全量備份,也可以在后面加上 where 條件進行條件備份 insert into test_category_bak select * from test_category; -- 復制表,包含表中的數(shù)據(jù) create table table_name2 as select * from table_name1; -- 只復制表,不包含數(shù)據(jù)內(nèi)容 create table table_name2 as select * from table_name1 where 1=2;
到此這篇關(guān)于MySQL insert into select 主鍵沖突解決方案的文章就介紹到這了,更多相關(guān)MySQL insert into select 主鍵沖突內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于mysql實現(xiàn)group by取各分組最新一條數(shù)據(jù)
這篇文章主要介紹了基于mysql實現(xiàn)group by取各分組最新一條數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09MySQL將版本由5.7.37更新到5.7.39的實現(xiàn)方式
這篇文章主要介紹了MySQL將版本由5.7.37更新到5.7.39的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12Mysql 查詢JSON結(jié)果的相關(guān)函數(shù)匯總
這篇文章主要介紹了Mysql 查詢 JSON 結(jié)果的相關(guān)函數(shù)匯總,幫助大家更好的理解和使用MySQL,感興趣的朋友可以了解下2020-11-11mysql oracle和sqlserver分頁查詢實例解析
最近簡單的對oracle,mysql,sqlserver2005的數(shù)據(jù)分頁查詢作了研究,把各自的查詢的語句貼到腳本之家平臺供大家參考2017-10-10Mysql通過ibd文件恢復數(shù)據(jù)的詳細步驟
mysql在使用的過程中,難免遇到數(shù)據(jù)庫表誤操作,下面這篇文章主要給大家介紹了關(guān)于Mysql通過ibd文件恢復數(shù)據(jù)的詳細步驟,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-06-06