我想做这样的事情:
create table app_users
(
app_user_id smallint(6) not null auto_increment primary key,
api_key char(36) not null default uuid()
);
但是这会导致错误,有没有办法在mysql中调用函数作为默认值?
谢谢.
不,你不能.
但是,您可以轻松创建触发器来执行此操作,例如:
CREATE TRIGGER before_insert_app_users BEFORE INSERT ON app_users FOR EACH ROW SET new.api_key = uuid();
如前所述,你不能.
如果要模拟此行为,可以使用以下方式触发:
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());
从mysql v8.0.13开始,可以使用表达式作为字段的默认值:
DEFAULT子句中指定的默认值可以是文字常量或表达式.除了一个例外,将表达式默认值括在括号内,以将它们与文字常量默认值区分开来.
CREATE TABLE t1 ( uuid_field VARCHAR(32) DEFAULT (uuid()), binary_uuid BINARY(16) DEFAULT (UUID_TO_BIN(UUID())) );
不幸的是,MySQL 5需要默认的常量.在下面的链接中更详细地讨论了该问题.但唯一的答案是允许null并添加表触发器.
MySQL最近才接受UUID作为其数据库包的一部分,它并不像我们想要的那样功能丰富.
http://www.phpbuilder.com/board/showthread.php?t=10349169
我相信你不能:
默认值必须是常量; 它不能是一个功能或表达