Aprendi que todas as árvores B secundárias no InnoDB armazenam pares do formulário (chave de pesquisa, TID) onde TID é a chave primária dos registros. Tenho as seguintes perguntas:
(1) No InnoDB, as árvores B secundárias implementam a exclusão por exclusão de marca? Ou seja, as entradas nas folhas são marcadas como exclusão em vez de exclusão física.
(2) Em caso afirmativo, ao inserir uma nova entrada cuja chave de pesquisa é a mesma de alguma entrada excluída por marcação existente, como o InnoDB decide se a entrada excluída por marcação foi confirmada ou não? Por exemplo, suponha que a árvore B seja um índice exclusivo. Suponha que a primeira transação marca-exclui a chave de pesquisa hello
e a segunda transação tenta inserir a chave de pesquisa hello
. Se a primeira transação ainda não foi confirmada, a inserção deve falhar; caso contrário, a inserção deve ser bem-sucedida. Gostaria de saber como o InnoDB decide se é permitido inserir arquivos hello
.
Principalmente "não" às suas perguntas.
Deixe-me examinar vários aspectos de como o InnoDB lida com índices secundários.
PRIMARY KEY
.UNIQUE
as chaves são verificadas no início do processamento da transação; uma duplicata levará a um "tempo limite de espera de bloqueio" ou a um "deadlock" ou "erro de chave duplicada".Provavelmente há mais.
As coisas citadas são tópicos-chave para pesquisa adicional na literatura sobre MySQL.