我有一个带有游戏的表(InnoDB)的mysql数据库:
gamerooms
id: bigint(20) unsigned not null auto_increment
PRIMARY KEY (`id`)
Run Code Online (Sandbox Code Playgroud)
我想开始为我可以公开分享的每一行生成UUID值,例如:
gamerooms
id | id_public |
--------------------
1 | abcde
2 | ghijk
3 | lmnop
...
select * from gamerooms where id_public = ...
Run Code Online (Sandbox Code Playgroud)
如何添加此新列,还要记住表中已有记录?我很困惑,因为列应该标记为NOT NULL,但是在添加列之后,所有已经存在的记录都将具有空值.我是否必须提供默认值?:
ALTER TABLE `gamerooms` ADD COLUMN `id_public` varchar(36) DEFAULT something AFTER `id`
Run Code Online (Sandbox Code Playgroud)
我想在id_public上创建一个索引,因此不确定在第一次创建列之后是否有空值会弄乱任何东西.
另外,我可以使用varchar(36)和mysqls UUID()输出,对吧?
谢谢
Jon*_*hop 25
你的ALTER陈述是正确的:
ALTER TABLE `gamerooms`
ADD COLUMN `id_public` varchar(36) NOT NULL DEFAULT 'something' AFTER `id`
Run Code Online (Sandbox Code Playgroud)
根据我的MySQL Pocket Reference,如果您没有为定义为NOT NULL的列提供默认值:
MySQL根据字段的类型选择一个值
在这种情况下,我猜测默认是空字符串.添加完列后,只需为该列创建一个新索引,然后使用null更改指令重建索引,如下所示:
CREATE INDEX myIndex ON gamerooms(id_public);
ALTER TABLE gamerooms ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
您可以在插入的同时创建索引.我的MySQL-fu不够强大,不知道如何做到这一点.