当前位置:  开发笔记 > 编程语言 > 正文

我可以在MySql中使用函数作为默认值吗?

如何解决《我可以在MySql中使用函数作为默认值吗?》经验,为你挑选了5个好方法。

我想做这样的事情:


create table app_users
(
    app_user_id smallint(6) not null auto_increment primary key,
    api_key     char(36) not null default uuid()
);

但是这会导致错误,有没有办法在mysql中调用函数作为默认值?

谢谢.



1> 小智..:

不,你不能.

但是,您可以轻松创建触发器来执行此操作,例如:

CREATE TRIGGER before_insert_app_users
  BEFORE INSERT ON app_users 
  FOR EACH ROW
  SET new.api_key = uuid();


这与具有DEFAULT值不完全相同.如果值为NULL,如何将此答案更改为仅设置键?
SET SET new.api_key = COALESCE(new.api_key,uuid())保留现有值。

2> Pamput..:

如前所述,你不能.

如果要模拟此行为,可以使用以下方式触发:

CREATE TRIGGER before_insert_app_users
BEFORE INSERT ON app_users
FOR EACH ROW
  IF new.uuid IS NULL
  THEN
    SET new.uuid = uuid();
  END IF;

您仍然需要更新以前存在的行,如下所示:

UPDATE app_users SET uuid = (SELECT uuid());



3> Shadow..:

从mysql v8.0.13开始,可以使用表达式作为字段的默认值:

DEFAULT子句中指定的默认值可以是文字常量或表达式.除了一个例外,将表达式默认值括在括号内,以将它们与文字常量默认值区分开来.

CREATE TABLE t1 (
  uuid_field     VARCHAR(32) DEFAULT (uuid()),
  binary_uuid    BINARY(16)  DEFAULT (UUID_TO_BIN(UUID()))
);



4> TravisO..:

不幸的是,MySQL 5需要默认的常量.在下面的链接中更详细地讨论了该问题.但唯一的答案是允许null并添加表触发器.

MySQL最近才接受UUID作为其数据库包的一部分,它并不像我们想要的那样功能丰富.

http://www.phpbuilder.com/board/showthread.php?t=10349169



5> Thibaut Barr..:

我相信你不能:

默认值必须是常量; 它不能是一个功能或表达


@amrosama - 不,你不能.`getdate()`甚至不是MySQL函数.答案中的链接解释了唯一的例外:*«您可以指定CURRENT_TIMESTAMP作为TIMESTAMP列的默认值»*.
从技术上讲,我会说AUTO_INCREMENT也可以看作是动态设置默认值的"函数".
推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有