Embora os anos dessa pergunta tenham passado, gostaria de esclarecer para os falantes de espanhol, os testes foram feitos no Postgres:
A seguinte restrição foi adicionada a uma tabela de 1337 registros, em que o kit é a chave primária:
**Bloque 1**
ALTER TABLE ele_kitscompletos
ADD CONSTRAINT unique_div_nkit
PRIMARY KEY (div_nkit)
Isso cria uma chave primária padrão NÃO DEFERIDA para a tabela, portanto, ao tentar a próxima ATUALIZAÇÃO, obtemos um erro:
update ele_kitscompletos
set div_nkit = div_nkit + 1;
ERRO: chave duplicada viola a restrição de exclusividade «unique_div_nkit»
No Postgres, a execução de uma atualização para cada linha verifica se a restrição ou restrição é atendida.
O CONSTRAINT IMMEDIATE agora é criado e cada instrução é executada separadamente:
ALTER TABLE ele_kitscompletos
ADD CONSTRAINT unique_div_nkit
PRIMARY KEY (div_nkit)
DEFERRABLE INITIALLY IMMEDIATE
**Bloque 2**
BEGIN;
UPDATE ele_kitscompletos set div_nkit = div_nkit + 1;
INSERT INTO public.ele_kitscompletos(div_nkit, otro_campo)
VALUES
(1338, '888150502');
COMMIT;
Consulta OK, 0 linhas afetadas (tempo de execução: 0 ms; tempo total: 0 ms) Consulta OK, 1328 linhas afetadas (tempo de execução: 858 ms; tempo total: 858 ms) ERRO: llave duplicado : Você existe o arquivo (div_nkit) = (1338).
Aqui, o SI permite alterar a chave primária, uma vez que executa toda a primeira frase completa (1328 linhas); mas, embora esteja em transação (BEGIN), o CONSTRAINT é validado imediatamente após o término de cada sentença sem ter feito COMMIT, portanto, gera o erro ao executar o INSERT. Por fim, criamos o CONSTRAINT DEFERRED, faça o seguinte:
**Bloque 3**
ALTER TABLE public.ele_edivipol
DROP CONSTRAINT unique_div_nkit RESTRICT;
ALTER TABLE ele_edivipol
ADD CONSTRAINT unique_div_nkit
PRIMARY KEY (div_nkit)
DEFERRABLE INITIALLY DEFERRED
Se executarmos cada instrução do ** Bloco 2 **, cada sentença separadamente, nenhum erro será gerado para o INSERT, pois ele não valida, mas o COMMIT final é executado onde encontra uma inconsistência.
Para informações completas em inglês, sugiro que você verifique os links:
Restrições SQL adiadas em profundidade
NÃO DEFERRABLE versus DEFERRABLE INICIALMENTE IMEDIATO