我有这个 MYSQL 查询,它说我在第 22 行有一个语法错误,那个有

external_id             binary(16) default unhex(replace(uuid(), '-', '')) not null

我不明白这里有什么问题,你能帮我吗? 谢谢

create table transfer
(//other fields 
  external_id             binary(16) default unhex(replace(uuid(), '-', '')) not null,
  constraint uidx_transfer_external_id
  unique (external_id),
//other constraints
);

#1楼 票数:0 已采纳

您不能在默认值下使用函数。 相反,您可以使用触发器。

CREATE TRIGGER before_insert_mytable
  BEFORE INSERT ON mytable
  FOR EACH ROW
  SET new.external_id = uuid();

#2楼 票数:0

将默认值表达式包装到括号中。

create table transfer
( -- other fields 
  external_id binary(16) default (unhex(replace(uuid(), '-', ''))) not null,
  constraint uidx_transfer_external_id
  unique (external_id)
  -- other constraints
);

小提琴

附注。 需要 MySQL 8.0.13 或以上版本。

  ask by Mihai Marius translate from so

未解决问题?本站智能推荐:

3回复

存储MySQL GUID / UUID

这是我将UUID()生成的MySQL GUID / UUID转换为二进制(16)的最佳方法: 然后将其存储在BINARY(16) 以我应该知道的方式做这件事是否有任何影响?
6回复

插入和选择 UUID 作为二进制 (16)

我不明白为什么 返回类似: 但是,如果我将它插入到一个 binary(16) 字段(UUID() 函数)中,例如一个 BEFORE INSERT 触发器并运行一个选择,它会返回如下内容: 请注意,这两个 UUID 不是相同的数据。 我意识到二进制和 UUID 字符串看起来并不相同,但所
1回复

在MariaDB中,放置在触发器中的函数启动时将返回不同的值

有这样的表和功能: 插入正常工作: 只需创建一个触发器: 并在表中获得一半的截断值: 此触发器有什么问题? 软件版本为: 适用于x86上Win64的5.5.33a-MariaDB版本(mariadb.org二进制分发版)
2回复

mysql中列的GUID的默认值

我希望一列默认为GUID,因此,如果我正在执行插入操作,但未明确设置该值,则希望将其默认为新的GUID值。 我怎样才能做到这一点?
4回复

使用 UUID 时,我还应该使用 AUTO_INCREMENT 吗?

我们正在构建一个新的网络应用程序,它将在许多本地设备上具有离线 iPad/Android 应用程序版本,这将涉及插入新数据。 因此,我们需要使用 UUID 来允许与主数据库进行必要的双向同步。 为此,我们将 UUID 存储为BINARY(16)主键。 我在研究后了解到的问题是,非顺序主键插入所需的
1回复

选择数据库时的UUID-性能测试

我有主键UUID(以数字形式,而不是以字符串形式)。 字符串很慢。 在编写SQL SELECT时,标准Integer主键是否比UUID快得多? 你有那种味道吗?
2回复

MySQL将uuid与主键匹配

我在选择不想要的记录时遇到了一个非常奇怪的问题。 这是我的设置,应重现此问题。 桌子 记录 查询 结果 如您所见,它选择了错误的记录。 任何见解将不胜感激。 编辑 感谢您的输入。 事实证明,这是类型转换对我的把戏! 这是MySQL发出的警
1回复

无法选择uuid =(数字)的行

所以我试图在我的数据库中查找一个uuid,但是当我尝试选择它时,它给了我这个错误 1241-操作数应包含1列 香港专业教育学院试图使限制为100个字符,但由于您可以看到相同的错误