如何为已经在使用的表添加varchar字段?

use*_*701 12 mysql

我有一个带有游戏的表(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不够强大,不知道如何做到这一点.