A sintaxe para definir um valor de atualização para timestamp é a seguinte:
CREATE TABLE Example1 (
...
`RowVersion` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
...
);
Posso alterar o tipo de dados de carimbo de data/hora para coluna GUID por:
`RowVersion` CHAR(36) NOT NULL DEFAULT 'uuid()'
Mas eu não posso escrever:
`RowVersion` CHAR(36) NOT NULL DEFAULT 'uuid()' ON UPDATE 'uuid()',
Como posso definir um novo uuid () quando a linha é atualizada sem criar um gatilho?
A especificação realmente faz muito pouco sentido. Ter um "rowversion" é bom e ok. Mas o que faz sentido usar para uma coluna que é uma "rowversion" é um
timestamp
valor (para que possamos comparar os 2 valores em 2 linhas para ver qual é o anterior e o posterior) ou uminteger
valor incremental (ou não). Os GUIDs não são incrementados e não fazem sentido serem usados dessa maneira.Além disso, nem mesmo o primeiro exemplo de código funcionará. Primeiro porque você precisaria usar a função
uuid()
, não a string'uuid()'
:Mesmo nesse caso, porém, não funcionaria porque o MySQL não permite nada além de constantes no
DEFAULT
valor da coluna (com uma exceção, veja abaixo). Da documentação, MySQL,CREATE TABLE
Sintaxe :Confira as respostas nas perguntas: MySQL - Alterar tabela para colocar automaticamente em um
UUID
e Como posso fazer com que o MySQL use o valor retornado por uma função como padrão? , para algumas maneiras de colocar os valores UUID na coluna.Mas, de qualquer forma, isso não resolve o problema de "rowversion". Quer você use gatilhos, procedimentos ou modifique suas instruções para atualizar os valores UUID, não vejo como eles podem ser usados como versões de linha.