我想要做这样的事情:我可以在MySql中使用函数作为默认值吗?
create table app_users
(
app_user_id smallint(6) not null auto_increment primary key,
api_key char(36) not null default uuid()
);
然而,这导致了错误,有没有办法,呼吁MySQL中的默认值的功能?
谢谢。
我想要做这样的事情:我可以在MySql中使用函数作为默认值吗?
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();
不幸的是,MySQL 5需要默认的常量。这个问题在下面的链接中有更详细的讨论。但唯一的答案是允许null并添加一个表触发器。
MySQL最近才接受UUID作为其数据库包的一部分,它不像我们希望的那样功能丰富。
我要补充一点,让NULL和依赖触发器可能会工作,但大多数开发人员会认为这是一个非常黑客的解决方案。我不会亲自推荐它,而是分别为他们自己。 – TravisO 2013-09-13 18:58:06
我相信you can't:
的默认值必须是常量;它不能是一个功能或表达式
如前所述你不能。
如果要模拟这种行为,你可以用这种方式使用触发器:
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());
@查看http://stackoverflow.com/questions/6280789/generate-guid-in-mysql-for-existing-data填充现有行中的UUID。 – 2013-10-22 17:09:40
这与具有DEFAULT值不完全相同。如果值为NULL,那么如何将此答案更改为仅设置键? – ToolmakerSteve 2015-04-01 17:38:28
我用md5(uuid())修改它,并且工作正常。我的问题好吗? – 2015-05-13 16:46:05