Fazer numérica chaves primárias dos excluídos registros em um banco de dados reutilizada para o futuro novos registros?

StackOverflow https://stackoverflow.com/questions/253522

Pergunta

Por exemplo se eu tiver um campo de numeração automática, adicionar novos registros, sem especificar este campo e deixar o mecanismo de banco de dados para buscá-lo para mim.
Então, vai pegar o número do registro excluído?Se sim, quando?

// O SQL Server, MySQL.//

Pergunta: O que acontece quando o mecanismo de banco de dados é executado fora de números de uso para as chaves primárias?

Foi útil?

Solução

NÃO.numérico chaves primárias não serão reutilizados, exceto que você especificar manualmente(você realmente deve evitar isso!)

Outras dicas

AFAIK, este poderia acontecer no MySQL:

Como AUTO_INCREMENT Manuseio Funciona no InnoDB:

O InnoDB utiliza a memória do contador de auto incremento, desde que o servidor é executado.Quando o servidor é parado e reiniciado, o InnoDB reinicializa o contador para cada tabela para o primeiro INSERIR a tabela, conforme descrito anteriormente.

Depois de uma reinicialização do servidor.O Innodb reutilizar gerado anteriormente os valores auto_increment.:

Correção sugerida:tabela innodb não deve perder a pista do próximo número da coluna auto_increment depois reinicie.

Depende do auto-sistema de numeração.Se você estiver usando uma sequência de qualquer tipo, o número de registros excluídos não vai ter reutilizado, como a sequência não sabe sobre eles.

Geralmente, não, os números não são reutilizados.

No entanto, você pode -- em produtos como o Oracle -- especificar um gerador de seqüência que os ciclos redor e reutilização de números.

Se esses são os números de registros excluídos ou não é a sua aplicativos do problema.

Essa pergunta precisa ser feita mais preciso:

..."com o Oracle Sequências"

..."com o MySQL autonumeração colunas"

...etc...

Contanto que você criar a tabela corretamente, você não irá reutilizar números.No entanto, você pode propagar novamente a coluna de identidade (NO MSSQL de qualquer maneira,) usando o seguinte:

-- Insira o número da última entrada válida na tabela não para o próximo número a ser usado

DBCC CHECKIDENT ([TableName], RECOMPARTILHAR, [NumberYouWantToStartAt])

Este é, naturalmente, loucura...e nunca deve ser feito :)

O MySQL não irá reutilizar Identificações, a menos que você truncate a tabela ou delete from a tabela sem where cláusula (no caso do MySQL, internamente, faz simplesmente um truncate).

Não especificamente.Se a chave está a ser lido a partir de uma sequência ou autoincrementing coluna de identidade de seqüência irá basta ligar e produzir o próximo valor.No entanto, você pode desativar este (set identity_insert on no SQL Server) e colocar qualquer número que você deseja na coluna, contanto que não viole a restrição de exclusividade.

Sim, isso realmente depende de como você gerar o id.

Por exemplo, se você estiver usando um GUID como a chave primária, a maioria das implementações de conseguir um novo Guid aleatório não são susceptíveis de escolher outro guid novamente, mas ele será dado o tempo suficiente e se o Guid não está na tabela, a instrução insert vai ficar bem, mas se já existe um guid lá você vai ter uma chave primária de violação de restrição.

Eu considero o MySQL "recurso" de reutilização de identificação de um bug.

Considerar algo como processamento de upload de arquivos.Usando o id de banco de dados como um nome de arquivo é uma boa prática :simples, não há risco de explorações com fornecida pelo usuário, nomes de arquivos, etc.

Você realmente não pode fazer tudo transacional quando o sistema de arquivos está envolvido...você vai ter que confirmar a transação de banco de dados, em seguida, gravar o arquivo, ou gravar o arquivo e confirmar a transação de banco de dados, mas, se um ou ambos falharem, ou você tem um acidente, ou o seu sistema de arquivos de rede tem um ajuste, você pode ter um registro válido no banco de dados e nenhum arquivo ou um arquivo sem um registro de banco de dados, desde que a coisa não é atômica.

Se um problema acontece, e a primeira coisa que o servidor faz quando voltar e substituir o id, e, portanto, os arquivos da revertida transações, é uma porcaria.Os arquivos talvez tenham sido úteis.

não, imagine se o seu banco decidi voltar a usar o seu account_id - arghhhh !!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top