Find below an almost full reguid script…only thing that it doesn’t reguid is “item sets” from chars…the script is tested on a 10GB database.So yeah…be a nice guy and post back the additional sql for item sets if you’re gonna make it…
Note:this script was used about 2-3 months ago, but i don’t think the structure has changed.
[SPOILER]-- item_instance and references reguid script
show warnings;
/* create a new table with autoincrement new guid */
DROP TABLE IF EXISTS item_instance_temp
;
CREATE TABLE IF NOT EXISTS item_instance_temp
(
guid
INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
itemEntry
MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT ‘0’,
owner_guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’,
creatorGuid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’,
giftCreatorGuid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’,
count
INT(10) UNSIGNED NOT NULL DEFAULT ‘1’,
duration
INT(10) NOT NULL DEFAULT ‘0’,
charges
TINYTEXT NULL,
flags
MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT ‘0’,
enchantments
TEXT NOT NULL,
randomPropertyId
SMALLINT(5) NOT NULL DEFAULT ‘0’,
durability
SMALLINT(5) UNSIGNED NOT NULL DEFAULT ‘0’,
playedTime
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’,
text
TEXT NULL,
old_guid
int(10) unsigned NOT NULL DEFAULT ‘0’,
PRIMARY KEY (guid
),
INDEX idx_owner_guid
(owner_guid
),
KEY idx_oldguid_tmp
(old_guid
)
) COMMENT=‘Item System’ COLLATE=‘utf8_general_ci’ ENGINE=InnoDB AUTO_INCREMENT=100;
/* add new guid fields to tables */
ALTER TABLE auctionhouse
ADD COLUMN new_itemguid
INT(10) UNSIGNED NOT NULL;
ALTER TABLE character_feed_log
ADD COLUMN new_item_guid
INT(10) UNSIGNED NOT NULL;
ALTER TABLE character_gifts
ADD COLUMN new_item_guid
INT(10) UNSIGNED NOT NULL;
ALTER TABLE character_inventory
ADD COLUMN new_item_guid
INT(10) NOT NULL DEFAULT ‘0’ AFTER item
,
ADD COLUMN new_bag
INT(10) NOT NULL DEFAULT ‘0’ AFTER new_item_guid
;
ALTER TABLE guild_bank_item
ADD COLUMN new_item_guid
INT(10) UNSIGNED NOT NULL;
ALTER TABLE item_loot_items
ADD COLUMN new_container_id
INT(10) UNSIGNED NOT NULL;
ALTER TABLE item_loot_money
ADD COLUMN new_container_id
INT(10) UNSIGNED NOT NULL;
ALTER TABLE item_refund_instance
ADD COLUMN new_item_guid
INT(10) NOT NULL;
ALTER TABLE item_soulbound_trade_data
ADD COLUMN new_itemGuid
INT(10) NOT NULL;
ALTER TABLE mail_items
ADD COLUMN new_item_guid
INT(10) NOT NULL;
/* insert data into the new table */
INSERT INTO item_instance_temp
(
itemEntry
, owner_guid
, creatorGuid
, giftCreatorGuid
, count
, duration
, charges
, flags
, enchantments
, randomPropertyId
, durability
, playedTime
, text
, old_guid
) SELECT itemEntry
, owner_guid
, creatorGuid
, giftCreatorGuid
, count
, duration
, charges
, flags
, enchantments
, randomPropertyId
, durability
, playedTime
, text
, guid
FROM item_instance
ORDER BY itemEntry
ASC;
/* delete entries that don’t have a reference in item_instance */
DELETE FROM auctionhouse
WHERE itemguid
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM character_gifts
WHERE item_guid
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM character_inventory
WHERE item
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM guild_bank_item
WHERE item_guid
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM item_loot_items
WHERE container_id
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM item_loot_money
WHERE container_id
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM item_refund_instance
WHERE item_guid
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM item_soulbound_trade_data
WHERE itemGuid
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM mail_items
WHERE item_guid
NOT IN (SELECT guid
FROM item_instance
);
/* delete entries from characher_inventory for players that don’t exist anymore*/
delete from character_inventory where guid not in (select guid from characters);
/* delete entries from characther_inventory with bags that don’t exist in item_instance */
delete from character_inventory where bag not in (select guid from item_instance) and bag>0;
/* delete entries from item_instance where itemEntry is not found in world.item_template */
delete from item_instance where itemEntry not in (select entry from world.item_template);
/* add new guid to tables */
UPDATE auctionhouse p
INNER JOIN item_instance_temp pp
ON p.itemguid = pp.old_guid
SET p.new_itemguid = pp.guid;
UPDATE character_feed_log p
INNER JOIN item_instance_temp pp
ON p.item_guid = pp.old_guid
SET p.new_item_guid = pp.guid;
UPDATE character_gifts p
INNER JOIN item_instance_temp pp
ON p.item_guid = pp.old_guid
SET p.new_item_guid = pp.guid;
UPDATE character_inventory p
INNER JOIN item_instance_temp pp
ON p.item = pp.old_guid
SET p.new_item_guid = pp.guid;
UPDATE character_inventory p
INNER JOIN item_instance_temp pp
ON p.bag = pp.old_guid
SET p.new_bag = pp.guid;
UPDATE guild_bank_item p
INNER JOIN item_instance_temp pp
ON p.item_guid = pp.old_guid
SET p.new_item_guid = pp.guid;
UPDATE item_loot_items p
INNER JOIN item_instance_temp pp
ON p.container_id = pp.old_guid
SET p.new_container_id = pp.guid;
UPDATE item_loot_money p
INNER JOIN item_instance_temp pp
ON p.container_id = pp.old_guid
SET p.new_container_id = pp.guid;
UPDATE item_refund_instance p
INNER JOIN item_instance_temp pp
ON p.item_guid = pp.old_guid
SET p.new_item_guid = pp.guid;
UPDATE item_soulbound_trade_data p
INNER JOIN item_instance_temp pp
ON p.itemGuid = pp.old_guid
SET p.new_itemGuid = pp.guid;
UPDATE mail_items p
INNER JOIN item_instance_temp pp
ON p.item_guid = pp.old_guid
SET p.new_item_guid = pp.guid;
/* drop old item_instance and rename item_instance_temp to item_instance */
DROP TABLE item_instance
;
ALTER TABLE item_instance_temp
DROP COLUMN old_guid
;
RENAME TABLE item_instance_temp
TO item_instance
;
ALTER TABLE item_instance
CHANGE COLUMN guid
guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ FIRST;
/* drop old guid field and rename new one to same name as the one dropped */
ALTER TABLE auctionhouse
DROP COLUMN itemguid
,
CHANGE COLUMN new_itemguid
itemguid
INT(10) UNSIGNED NOT NULL AFTER auctioneerguid
,
ADD UNIQUE INDEX itemguid
(itemguid
);
ALTER TABLE character_feed_log
DROP COLUMN item_guid
,
CHANGE COLUMN new_item_guid
item_guid
INT(11) NOT NULL AFTER difficulty
;
ALTER TABLE character_gifts
DROP COLUMN item_guid
,
CHANGE COLUMN new_item_guid
item_guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ AFTER guid
,
ADD PRIMARY KEY (item_guid
);
ALTER TABLE guild_bank_item
DROP COLUMN item_guid
,
CHANGE COLUMN new_item_guid
item_guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ AFTER SlotId
,
ADD INDEX Idx_item_guid
(item_guid
);
ALTER TABLE item_loot_items
DROP COLUMN container_id
,
CHANGE COLUMN new_container_id
container_id
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ COMMENT ‘guid of container (item_instance.guid)’ FIRST;
ALTER TABLE item_loot_money
DROP COLUMN container_id
,
CHANGE COLUMN new_container_id
container_id
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ COMMENT ‘guid of container (item_instance.guid)’ FIRST;
ALTER TABLE item_refund_instance
DROP COLUMN item_guid
,
CHANGE COLUMN new_item_guid
item_guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ COMMENT ‘Item GUID’ FIRST,
DROP PRIMARY KEY,
ADD PRIMARY KEY (player_guid
, item_guid
);
ALTER TABLE item_soulbound_trade_data
DROP COLUMN itemGuid
,
CHANGE COLUMN new_itemGuid
itemGuid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ COMMENT ‘Item GUID’ FIRST,
ADD PRIMARY KEY (itemGuid
);
ALTER TABLE mail_items
DROP COLUMN item_guid
,
CHANGE COLUMN new_item_guid
item_guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ AFTER mail_id
,
ADD PRIMARY KEY (item_guid
);
ALTER TABLE character_inventory
DROP INDEX guid
,
DROP COLUMN item
,
CHANGE COLUMN new_item_guid
item
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ COMMENT ‘Item Global Unique Identifier’ AFTER slot
,
ADD PRIMARY KEY (item
),
DROP COLUMN bag
,
CHANGE COLUMN new_bag
bag
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ AFTER guid
,
ADD UNIQUE INDEX guid
(guid
, bag
, slot
);
– item_instance and references reguid script
show warnings;
/* create a new table with autoincrement new guid */
DROP TABLE IF EXISTS item_instance_temp
;
CREATE TABLE IF NOT EXISTS item_instance_temp
(
guid
INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
itemEntry
MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT ‘0’,
owner_guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’,
creatorGuid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’,
giftCreatorGuid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’,
count
INT(10) UNSIGNED NOT NULL DEFAULT ‘1’,
duration
INT(10) NOT NULL DEFAULT ‘0’,
charges
TINYTEXT NULL,
flags
MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT ‘0’,
enchantments
TEXT NOT NULL,
randomPropertyId
SMALLINT(5) NOT NULL DEFAULT ‘0’,
durability
SMALLINT(5) UNSIGNED NOT NULL DEFAULT ‘0’,
playedTime
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’,
text
TEXT NULL,
old_guid
int(10) unsigned NOT NULL DEFAULT ‘0’,
PRIMARY KEY (guid
),
INDEX idx_owner_guid
(owner_guid
),
KEY idx_oldguid_tmp
(old_guid
)
) COMMENT=‘Item System’ COLLATE=‘utf8_general_ci’ ENGINE=InnoDB AUTO_INCREMENT=100;
/* add new guid fields to tables */
ALTER TABLE auctionhouse
ADD COLUMN new_itemguid
INT(10) UNSIGNED NOT NULL;
ALTER TABLE character_feed_log
ADD COLUMN new_item_guid
INT(10) UNSIGNED NOT NULL;
ALTER TABLE character_gifts
ADD COLUMN new_item_guid
INT(10) UNSIGNED NOT NULL;
ALTER TABLE character_inventory
ADD COLUMN new_item_guid
INT(10) NOT NULL DEFAULT ‘0’ AFTER item
,
ADD COLUMN new_bag
INT(10) NOT NULL DEFAULT ‘0’ AFTER new_item_guid
;
ALTER TABLE guild_bank_item
ADD COLUMN new_item_guid
INT(10) UNSIGNED NOT NULL;
ALTER TABLE item_loot_items
ADD COLUMN new_container_id
INT(10) UNSIGNED NOT NULL;
ALTER TABLE item_loot_money
ADD COLUMN new_container_id
INT(10) UNSIGNED NOT NULL;
ALTER TABLE item_refund_instance
ADD COLUMN new_item_guid
INT(10) NOT NULL;
ALTER TABLE item_soulbound_trade_data
ADD COLUMN new_itemGuid
INT(10) NOT NULL;
ALTER TABLE mail_items
ADD COLUMN new_item_guid
INT(10) NOT NULL;
/* insert data into the new table */
INSERT INTO item_instance_temp
(
itemEntry
, owner_guid
, creatorGuid
, giftCreatorGuid
, count
, duration
, charges
, flags
, enchantments
, randomPropertyId
, durability
, playedTime
, text
, old_guid
) SELECT itemEntry
, owner_guid
, creatorGuid
, giftCreatorGuid
, count
, duration
, charges
, flags
, enchantments
, randomPropertyId
, durability
, playedTime
, text
, guid
FROM item_instance
ORDER BY itemEntry
ASC;
/* delete entries that don’t have a reference in item_instance */
DELETE FROM auctionhouse
WHERE itemguid
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM character_gifts
WHERE item_guid
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM character_inventory
WHERE item
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM guild_bank_item
WHERE item_guid
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM item_loot_items
WHERE container_id
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM item_loot_money
WHERE container_id
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM item_refund_instance
WHERE item_guid
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM item_soulbound_trade_data
WHERE itemGuid
NOT IN (SELECT guid
FROM item_instance
);
DELETE FROM mail_items
WHERE item_guid
NOT IN (SELECT guid
FROM item_instance
);
/* delete entries from characher_inventory for players that don’t exist anymore*/
delete from character_inventory where guid not in (select guid from characters);
/* delete entries from characther_inventory with bags that don’t exist in item_instance */
delete from character_inventory where bag not in (select guid from item_instance) and bag>0;
/* delete entries from item_instance where itemEntry is not found in world.item_template */
delete from item_instance where itemEntry not in (select entry from world.item_template);
/* add new guid to tables */
UPDATE auctionhouse p
INNER JOIN item_instance_temp pp
ON p.itemguid = pp.old_guid
SET p.new_itemguid = pp.guid;
UPDATE character_feed_log p
INNER JOIN item_instance_temp pp
ON p.item_guid = pp.old_guid
SET p.new_item_guid = pp.guid;
UPDATE character_gifts p
INNER JOIN item_instance_temp pp
ON p.item_guid = pp.old_guid
SET p.new_item_guid = pp.guid;
UPDATE character_inventory p
INNER JOIN item_instance_temp pp
ON p.item = pp.old_guid
SET p.new_item_guid = pp.guid;
UPDATE character_inventory p
INNER JOIN item_instance_temp pp
ON p.bag = pp.old_guid
SET p.new_bag = pp.guid;
UPDATE guild_bank_item p
INNER JOIN item_instance_temp pp
ON p.item_guid = pp.old_guid
SET p.new_item_guid = pp.guid;
UPDATE item_loot_items p
INNER JOIN item_instance_temp pp
ON p.container_id = pp.old_guid
SET p.new_container_id = pp.guid;
UPDATE item_loot_money p
INNER JOIN item_instance_temp pp
ON p.container_id = pp.old_guid
SET p.new_container_id = pp.guid;
UPDATE item_refund_instance p
INNER JOIN item_instance_temp pp
ON p.item_guid = pp.old_guid
SET p.new_item_guid = pp.guid;
UPDATE item_soulbound_trade_data p
INNER JOIN item_instance_temp pp
ON p.itemGuid = pp.old_guid
SET p.new_itemGuid = pp.guid;
UPDATE mail_items p
INNER JOIN item_instance_temp pp
ON p.item_guid = pp.old_guid
SET p.new_item_guid = pp.guid;
/* drop old item_instance and rename item_instance_temp to item_instance */
DROP TABLE item_instance
;
ALTER TABLE item_instance_temp
DROP COLUMN old_guid
;
RENAME TABLE item_instance_temp
TO item_instance
;
ALTER TABLE item_instance
CHANGE COLUMN guid
guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ FIRST;
/* drop old guid field and rename new one to same name as the one dropped */
ALTER TABLE auctionhouse
DROP COLUMN itemguid
,
CHANGE COLUMN new_itemguid
itemguid
INT(10) UNSIGNED NOT NULL AFTER auctioneerguid
,
ADD UNIQUE INDEX itemguid
(itemguid
);
ALTER TABLE character_feed_log
DROP COLUMN item_guid
,
CHANGE COLUMN new_item_guid
item_guid
INT(11) NOT NULL AFTER difficulty
;
ALTER TABLE character_gifts
DROP COLUMN item_guid
,
CHANGE COLUMN new_item_guid
item_guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ AFTER guid
,
ADD PRIMARY KEY (item_guid
);
ALTER TABLE guild_bank_item
DROP COLUMN item_guid
,
CHANGE COLUMN new_item_guid
item_guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ AFTER SlotId
,
ADD INDEX Idx_item_guid
(item_guid
);
ALTER TABLE item_loot_items
DROP COLUMN container_id
,
CHANGE COLUMN new_container_id
container_id
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ COMMENT ‘guid of container (item_instance.guid)’ FIRST;
ALTER TABLE item_loot_money
DROP COLUMN container_id
,
CHANGE COLUMN new_container_id
container_id
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ COMMENT ‘guid of container (item_instance.guid)’ FIRST;
ALTER TABLE item_refund_instance
DROP COLUMN item_guid
,
CHANGE COLUMN new_item_guid
item_guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ COMMENT ‘Item GUID’ FIRST,
DROP PRIMARY KEY,
ADD PRIMARY KEY (player_guid
, item_guid
);
ALTER TABLE item_soulbound_trade_data
DROP COLUMN itemGuid
,
CHANGE COLUMN new_itemGuid
itemGuid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ COMMENT ‘Item GUID’ FIRST,
ADD PRIMARY KEY (itemGuid
);
ALTER TABLE mail_items
DROP COLUMN item_guid
,
CHANGE COLUMN new_item_guid
item_guid
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ AFTER mail_id
,
ADD PRIMARY KEY (item_guid
);
ALTER TABLE character_inventory
DROP INDEX guid
,
DROP COLUMN item
,
CHANGE COLUMN new_item_guid
item
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ COMMENT ‘Item Global Unique Identifier’ AFTER slot
,
ADD PRIMARY KEY (item
),
DROP COLUMN bag
,
CHANGE COLUMN new_bag
bag
INT(10) UNSIGNED NOT NULL DEFAULT ‘0’ AFTER guid
,
ADD UNIQUE INDEX guid
(guid
, bag
, slot
);
[/SPOILER]