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

研究了一上午,最后找到了解决办法。

一个主表一个副表,想要一次性将两个表的主键给重新排列。

本来说靠PHP来遍历处理,结果离谱,太慢了,于是直接上SQL代码处理!

SQL代码:

代码详解

这段代码是一个数据库迁移脚本,用于创建新的表并将旧表中的数据迁移到新表中。下面对每个步骤进行解释:

  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中,并对新表的某些字段进行设置。

© 版权声明
THE END
喜欢就支持一下吧
点赞8
相关推荐
评论 共1条

请登录后发表评论