红穆笔记
首頁 語言筆記 數據表如何讓主鍵從1開始重新排列而不影響其他內容
語言筆記 mySql 踩坑總結

數據表如何讓主鍵從1開始重新排列而不影響其他內容

数据表如何让主键从1开始重新排列而不影响其他内容

研究了一上午,最後找到了解決辦法。

一個主表一個副表,想要一次性將兩個表的主鍵給重新排列。

本來說靠PHP來遍歷處理,結果離譜,太慢了,於是直接上SQL代碼處理!

SQL代碼:

🔒 隱藏內容:評論後查看

#創建同結構的item_instance_new
CREATE TABLE item_instance_new LIKE item_instance;
#設置自增ID:
ALTER TABLE `item_instance_new` CHANGE `guid` `guid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;
#創建一個備份字段
ALTER TABLE `item_instance_new` ADD `guid_bak_id` INT(10) NOT NULL AFTER `guid`;
#將舊錶字段移動到新表
INSERT INTO item_instance_new (guid_bak_id, itemEntry, owner_guid, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, reforgeID, transmogrifyId, upgradeID, durability, playedTime, text, pet_species, pet_breed, pet_quality, pet_level, isbot, money, aid)
SELECT guid, itemEntry, owner_guid, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, reforgeID, transmogrifyId, upgradeID, durability, playedTime, text, pet_species, pet_breed, pet_quality, pet_level, isbot, money, aid
FROM item_instance;
#取消自增ID
ALTER TABLE `item_instance_new` CHANGE `guid` `guid` INT(10) UNSIGNED NOT NULL DEFAULT '0';

#創建同結構的 character_inventory_new
CREATE TABLE character_inventory_new LIKE character_inventory;
#設置自增
ALTER TABLE `character_inventory_new` CHANGE `item` `item` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Item Global Unique Identifier';
#創建一個備份字段
ALTER TABLE `character_inventory_new` ADD `item_bak_id` INT(10) NOT NULL AFTER `item`;
#條件判斷後進行遷移
INSERT INTO character_inventory_new (bag, slot, guid, item, item_bak_id)
SELECT t1.bag, t1.slot, t1.guid, t3.guid, t1.item
FROM character_inventory t1
JOIN item_instance_new t3 ON t1.item = t3.guid_bak_id
WHERE t1.item = t3.guid_bak_id;
#查找多餘的ID數據
SELECT * FROM character_inventory
WHERE item NOT IN (SELECT item_bak_id FROM character_inventory_new);
#多餘是數據進行重新排列
INSERT INTO character_inventory_new (bag, slot, guid, item_bak_id)
SELECT bag, slot, guid, item FROM character_inventory WHERE item NOT IN (SELECT item_bak_id FROM character_inventory_new);
#取消自增ID並還原設置
ALTER TABLE `character_inventory_new` CHANGE `item` `item` INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Item Global Unique Identifier';

代碼詳解

這段代碼是一個數據庫遷移腳本,用於創建新的表並將舊錶中的數據遷移到新表中。下面對每個步驟進行解釋:

  1. 創建同結構的item_instance_new表:通過CREATE TABLE item_instance_new LIKE item_instance;語句創建一個與item_instance表結構相同的新表item_instance_new。

  2. 設置自增ID:通過ALTER TABLE item_instance_newCHANGEguid guid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT;語句設置item_instance_new表的guid字段爲自增ID,具體意思是在插入數據時,該字段會自動遞增生成唯一的ID。

  3. 創建一個備份字段:通過ALTER TABLE item_instance_newADDguid_bak_idINT(10) NOT NULL AFTERguid;語句在item_instance_new表中添加一個名爲guid_bak_id的字段,用於備份舊錶的guid字段。

  4. 將舊錶字段移動到新表:通過INSERT INTO item_instance_new (guid_bak_id, itemEntry, owner_guid, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, reforgeID, transmogrifyId, upgradeID, durability, playedTime, text, pet_species, pet_breed, pet_quality, pet_level, isbot, money, aid) SELECT guid, itemEntry, owner_guid, creatorGuid, giftCreatorGuid, count, duration, charges, flags, enchantments, randomPropertyId, reforgeID, transmogrifyId, upgradeID, durability, playedTime, text, pet_species, pet_breed, pet_quality, pet_level, isbot, money, aid FROM item_instance;語句將item_instance表中的數據插入到item_instance_new表中,同時使用guid字段的值填充guid_bak_id字段。

  5. 取消自增ID:通過ALTER TABLE item_instance_newCHANGEguid guid INT(10) UNSIGNED NOT NULL DEFAULT '0';語句取消item_instance_new表的guid字段的自增屬性,並將默認值設置爲0。

  6. 創建同結構的character_inventory_new表:通過CREATE TABLE character_inventory_new LIKE character_inventory;語句創建一個與character_inventory表結構相同的新表character_inventory_new。

  7. 設置自增:通過ALTER TABLE character_inventory_newCHANGEitem item INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Item Global Unique Identifier';語句設置character_inventory_new表的item字段爲自增ID,並添加註釋說明。

  8. 條件判斷後進行遷移:通過INSERT INTO character_inventory_new (bag, slot, guid, item) SELECT t1.bag, t1.slot, t1.guid, t3.guid FROM character_inventory t1 JOIN item_instance_new t3 ON t1.item = t3.guid_bak_id WHERE t1.item = t3.guid_bak_id;語句將character_inventory表中滿足條件的數據遷移到character_inventory_new表中。具體條件是t1.item(character_inventory表中的item字段)等於t3.guid_bak_id(item_instance_new表中的guid_bak_id字段)。

  9. 取消自增ID並還原設置:通過ALTER TABLE character_inventory_newCHANGEitem item INT(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Item Global Unique Identifier';語句取消character_inventory_new表的item字段的自增屬性,並將默認值設置爲0,並添加註釋說明。

這段代碼的作用是將舊錶item_instance和character_inventory的數據遷移到新表item_instance_new和character_inventory_new中,並對新表的某些字段進行設置。

微信赞赏

微信

支付宝赞赏

支付寶

✍️ 作者: 紅穆

網站管理員 · 感謝閱讀,更多精彩內容敬請關注

作者主頁 查看主頁 →

相關文章

数据表的id自增顺序修复

數據表的id自增順序修復 語言筆記 mySql

1,刪除原有主鍵:ALTER TABLE `table_name` DROP `id`;2,添加新主鍵字段:ALTER TABLE `table_name` ADD `id`INT(11) NOT NULL FIRST;3,設置新主鍵:ALTER TABLE `table_name` MODIFY …
👁 177
sqlite 使用PDO执行SQL语句exec()、query()

sqlite 使用PDO執行SQL語句exec()、query() 語言筆記 mySql

在PHP腳本中,通過PDO執行SQL查詢與數據庫進行交互,可以分爲三種不同的策略,使用哪一種方法取決於你要做什麼操作。 1、使用PDO::exec()方法 當執行INSERT、UPDATE和DELETE等沒有結果集的查詢時,使用PDO對象中的exec()方法去執行。該方法成功執行後,將返回受影響的行…
👁 323
mysql效率提升之limit这个狗东西

mysql效率提升之limit這個狗東西 語言筆記 mySql

mysql裏面,limit效率不高,特別是我幾大百萬數據,limit 100000, 50,這樣寫,查詢更是慢死,剛開始還挺快,後面服務器cup直接給我拉滿! 我還以爲是服務器被入侵了,於是找問題啊,找了幾天,結果發現是這個狗東西,可把我氣死了! 於是查詢了一下limit的原理,emmm,改!必須改…
👁 155
sql语句 清空数据库

sql語句 清空數據庫 語言筆記 mySql

可以使用 TRUNCATE 命令清空一個表,如果需要清空整個數據庫,則需要逐個清空每個表。下面是一個清空整個數據庫的示例 SQL 語句:SET foreign_key_checks = 0; SELECT CONCAT('TRUNCATE TABLE `', table_name, '`;') FR…
👁 297

推薦閱讀

(自适应移动端)响应式外国语学校网站源码 HTML5响应式大学学校院校类网站pbootcms模板 0740

(自適應移動端)響應式外國語學校網站源碼 HTML5響應式大學學校院校類網站pbootcms模板 0740 實用收藏 pbootcms模板

一款響應式外國語學校與大學院校PbootCMS網站模板源碼,支持移動端訪問。設計風格國際教育,適合外國語大學、國際學校展示教學環境與招生信息。有助於教育機構在線上吸引海內外學生。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:www.4s5.cn相關…
👁 63
无线数码门铃网站模板 0210

無線數碼門鈴網站模板 0210 實用收藏 易優模板

一款針對無線數碼門鈴行業的eyoucms網站模板。設計風格科技實用,能夠展示數碼門鈴產品、無線技術、智能家居應用及品牌形象。有助於智能家居企業在線上展示產品,吸引家庭客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優C…
👁 61
python如何打包在Windows上运行?

python如何打包在Windows上運行? 語言筆記 python

在Windows上打包和運行Python程序的最常用方式是使用PyInstaller。PyInstaller是一個免費的、跨平臺的Python應用程序打包工具,可以將Python代碼和其依賴的庫打包成一個獨立的可執行文件,使得在沒有安裝Python解釋器的系統上運行Python程序成爲可能。以下是使…
👁 300
地热分水器类网站模板 0875

地熱分水器類網站模板 0875 實用收藏 易優模板

此套eyoucms模板適用於地熱分水器類企業,設計風格專業科技,能夠展示分水器產品、地暖系統及工程應用。有助於暖通設備企業在線上展示產品,吸引工程與家庭客戶。模板展示 安裝說明 網站後臺:/login.php 賬號:admin 密碼:admin 相關文章易優CMS安裝常見問題總結易優CMS(Eyou…
👁 36
(PC+WAP)营销型绿色家具办公类pbootcms网站模板 办公桌椅网站源码下载 0104

(PC+WAP)營銷型綠色傢俱辦公類pbootcms網站模板 辦公桌椅網站源碼下載 0104 實用收藏 pbootcms模板

本套PbootCMS模板採用綠色風格,專爲營銷型辦公傢俱及綠色傢俱企業設計,支持PC與WAP端。設計風格現代簡約,能夠展示辦公桌椅、屏風等產品的設計感與實用性。有助於傢俱企業在線上展示產品線,提升品牌形象與銷售業績。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admi…
👁 56
(自适应手机端)HTML5响应式儿童乐园玩具批发制造类企业网站pbootcms模板 玩具游乐设施网站源码下载 0741

(自適應手機端)HTML5響應式兒童樂園玩具批發製造類企業網站pbootcms模板 玩具遊樂設施網站源碼下載 0741 實用收藏 pbootcms模板

一款響應式兒童樂園玩具批發製造類PbootCMS企業網站模板,支持PC與WAP端。設計風格活潑童趣,適合展示遊樂設施、玩具產品及品牌故事。有助於兒童樂園運營商或玩具製造商在線上吸引家庭客戶與經銷商。模板展示 安裝說明 網站後臺:/admin.php 賬號:admin 密碼:admin 解壓密碼:ww…
👁 43