Crie um campo chamado “excluido” em suas tabelas e na hora de excluir, em vez de utilizar o DELETE, utilize o UPDATE e seta o campo “excluido” em 1.
E para que não apareça em suas consultas, utilize a condição “excluido” = 0, assim será retornado só os registros que ainda não foram excluído.
E para inserir um novo registro, faça uma busca por registros com o campo “excluido” = 1, se retornar 1 ou mais registros, utilize o UPDATE para armazenar o novo registro, senão faça um INSERT.
Exemplos:
CREATE TABLE perfil (
id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT,
nome VARCHAR(80) NOT NULL,
excluido TINYINT NOT NULL,
criado DATETIME NOT NULL
);
Verificar se existe algum registro excluído
SELECT id FROM perfil WHERE excluido = 1;
Se o número de registro retornado for igual a 1 ou mais, então você utilizara o UPDATE para cadastrar um novo registro. Mas primeiro obtém um idperfil dos registros retornado pelo SELECT anterior, para utilizar na condição abaixo:
UPDATE perfil SET nome = ‘Maria’, excluido = ‘0’, criado = ‘[Data e Hora Atual]’ WHERE idperfil = 1;
Acrescentamos o campo criado para ordenar pela ordem de inserção em vez pelo id.
Não sei se expliquei bem, mas fica ai a minha ideia!