Tenho as duas tabelas a seguir:
comprar e vender
CREATE TABLE `buynsell` (
`id` VARCHAR(20) NULL DEFAULT NULL,
`msg` VARCHAR(255) NULL DEFAULT NULL,
`date` VARCHAR(25) NULL DEFAULT NULL,
`fid` BIGINT(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`fid`),
INDEX `fid_index` (`fid`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=6523;
bsmsgs
CREATE TABLE `bsmsgs` (
`id` VARCHAR(20) NULL DEFAULT NULL,
`msg` MEDIUMTEXT NULL,
`date` VARCHAR(25) NULL DEFAULT NULL,
`subfid` BIGINT(20) NULL DEFAULT NULL,
`fid` BIGINT(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`fid`),
INDEX `fid_subfid_index` (`fid`, `subfid`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
AUTO_INCREMENT=11408;
O campo bsmsgs.subfid
é referenciado a bunsell.fid
. Eu estava farto de usar essas tabelas e, portanto, criei as duas novas a seguir (o mecanismo aindaMYISAM
está ):
comprar e vender
CREATE TABLE `buynsell` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`type` ENUM('B','S','D','H','T') NOT NULL DEFAULT 'B',
`msg` VARCHAR(250) NOT NULL,
`nick` VARCHAR(32) NOT NULL,
`dated` DATETIME NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `msg_nick` (`msg`, `nick`),
INDEX `type` (`type`),
FULLTEXT INDEX `msg` (`msg`)
)
COMMENT='The table storing information about users selling/buying/hiring things etc.'
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
respostas
CREATE TABLE `replies` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`bns_id` INT(10) UNSIGNED NOT NULL,
`msg` VARCHAR(250) NOT NULL,
`nick` VARCHAR(32) NOT NULL,
`dated` DATETIME NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `bns_id_msg` (`bns_id`, `msg`),
INDEX `bns_id` (`bns_id`),
FULLTEXT INDEX `msg` (`msg`)
)
COMMENT='Replies to buynsell messages from interested users.'
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
Agora, meu problema é que, embora os AUTO_INCREMENT
valores sejam tão altos, na verdade existem menos de 2.000 entradas na buynsell
tabela e cerca de 8.000 entradas na bsmsgs
tabela.
O que posso fazer é usar as mesmas entradas das tabelas anteriores nas minhas novas, mas quero um design elegante e, portanto, gostaria de inserir do zero.
Posso reinserir dados antigos buynsell
pulando para AUTO_INCREMENT
chave, fid e gerando novas linhas com ids começando de 1 a 2.000.
O que estou enfrentando problemas é referenciar o subfid
campo bsmsgs
para novos valores de id buynsell
enquanto referencia e armazena corretamente na tabela bns_id
de respostas .
NOTA
Se não puder ser alcançado puramente pelo MySQL, posso usar o LuaSQL para esta tarefa.
Eu acho que você pode fazer o seguinte:
1. Em sua nova tabela
buynsell
, adicione uma coluna,old_id
2. Reinsira os dados da tabela antiga como você disse, ignorando o campo auto_increment e armazenando old_buynsell.id como
old_id
em sua nova tabela.3. Importar dados para uma nova
replies
tabela4. Atualizar
bns_id
coluna emreplies
:5 Elimine a coluna old_id, você não precisa mais dela.