为时间戳定义更新值的语法如下:
CREATE TABLE Example1 (
...
`RowVersion` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
...
);
我可以通过以下方式将数据类型从时间戳更改为 GUID 列:
`RowVersion` CHAR(36) NOT NULL DEFAULT 'uuid()'
但我不能写:
`RowVersion` CHAR(36) NOT NULL DEFAULT 'uuid()' ON UPDATE 'uuid()',
当行更新而不创建触发器时,如何设置新的 uuid()?
该规范真的没有什么意义。有一个“rowversion”很好。但是对于“行版本”的列,有意义的是
timestamp
(因此我们可以比较 2 行中的 2 个值以查看哪个更早哪个更晚)或递增(integer
或不递增)值。GUID 不会递增,并且以这种方式使用零意义。此外,即使是第一个代码示例也不起作用。首先是因为您需要使用函数
uuid()
,而不是字符串'uuid()'
:即使在这种情况下,它也不起作用,因为 MySQL 不允许在
DEFAULT
列的值中使用除常量之外的任何内容(有一个例外,见下文)。从文档,MySQL,CREATE TABLE
语法:检查问题中的答案:MySQL - Alter table to automatically put in a
UUID
和How can I get MySQL to use the value returned by a function as a default? ,用于将 UUID 值放入列中的一些方法。但无论如何,这并不能解决“rowversion”问题。无论您是使用触发器、过程还是修改语句来更新 UUID 值,我都看不出它们如何用作行版本。