Isso é possível?
Meu caso de uso é uma tabela contábil, com o requisito de que, uma vez criado, um registro seja somente leitura, ou seja, ninguém poderá editá-lo ou excluí-lo. Isso se aplica apenas à tabela contábil e às tabelas com uma relação direta com ela - existem outras tabelas no mesmo esquema que serão atualizadas / excluídas normalmente.
Meu entendimento é que, para fins de integridade dos dados, esses tipos de restrições devem ser aplicados na camada do banco de dados, mas não consigo encontrar uma maneira limpa e amplamente aceita de fazer isso - esse é um caso de uso em que eu faria melhor na camada de aplicação?
O ideal seria uma maneira de fazê-lo em SQL simples, de modo a ser independente de qual plataforma de banco de dados é usada, pois isso pode estar sujeito a alterações, mas eu sei que pode ser pedir muito, por isso, se houver Para ser dependente da plataforma, é preferível algum sabor do MySQL.
Obrigado!
fonte
Permissões parece ser a escolha óbvia - no entanto, você também pode usar o ARCHIVE Storage Engine . Este mecanismo de tabela foi projetado para registrar grandes quantidades de dados que não serão alterados:
A diferença de permissões é que alguém com privilégios estendidos ainda poderá alterar dados na maioria dos outros tipos de tabela, enquanto o ARCHIVE não permite que ninguém altere os dados que já estão na tabela.
fonte
REPLACE
é uma espécie deUPDATE
! "REPLACE funciona exatamente como INSERT, exceto que se uma linha antiga da tabela tiver o mesmo valor que uma nova linha para um índice PRIMARY KEY ou UNIQUE, a linha antiga será excluída antes da inserção da nova linha. Consulte a Seção 13.2.5 , "INSERIR Sintaxe". "Consulte " Arquitetura Point in Time " ou " Arquitetura de banco de dados temporal "
Design de banco de dados: uma arquitetura pontual
Banco de dados temporal
As idéias básicas de ambos são que você precisa adicionar dados sem excluir - ou armazenar dados de tal maneira que você possa extrair os dados como eles existem atualmente ... ou existiam em um datetime anterior.
questão relacionada aqui: como criar um ponto na arquitetura do tempo no mysql ,
fonte