首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为uuid()设置"On Update“

如何为uuid()设置"On Update“
EN

Database Administration用户
提问于 2016-04-11 12:18:13
回答 1查看 2K关注 0票数 0

定义时间戳更新值的语法如下:

代码语言:javascript
复制
CREATE TABLE Example1 (
    ...
    `RowVersion` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ...
);

我可以通过以下方式将时间戳中的数据类型更改为GUID colum:

代码语言:javascript
复制
`RowVersion` CHAR(36) NOT NULL DEFAULT 'uuid()'

但我不能写:

代码语言:javascript
复制
 `RowVersion` CHAR(36) NOT NULL DEFAULT 'uuid()' ON UPDATE 'uuid()',

在不创建触发器的情况下更新行时,如何设置新的uuid()?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2016-04-11 13:25:28

这个规范实在没有什么意义。拥有一个“行版本”是好的和好的。但是,对于作为“行版本”的列来说,有意义的是一个timestamp (因此我们可以比较2行中的2个值,以查看哪个值更早,哪个值更晚),或者使用一个递增值(integer与否)。GUID不递增,以这种方式使用GUID是没有意义的。

此外,即使是第一个代码示例也无法工作。首先,因为您需要使用函数uuid(),而不是字符串'uuid()'

代码语言:javascript
复制
`RowVersion` CHAR(36) NOT NULL DEFAULT uuid()

即使在这种情况下,它也不能工作,因为MySQL只允许列的DEFAULT值中的常量(除了下面的一个例外)。在文档中,MySQL,CREATE TABLE语法

DEFAULT子句指定列的默认值。除了一个例外,默认值必须是一个常量;它不能是一个函数或表达式。例如,这意味着不能将日期列的默认值设置为函数(如NOW()CURRENT_DATE )的值。例外情况是,可以将CURRENT_TIMESTAMP指定为TIMESTAMPDATETIME列的默认设置。你看..。

检查问题中的答案:MySQL - Alter将自动放入UUID如何让MySQL将函数返回的值作为默认值使用?,看看如何将UUID值放在列中。

但无论如何,这并不能解决“行版本”问题。无论您使用触发器、过程还是修改语句来更新UUID值,我都不知道如何将它们用作行版本。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/134962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档