我有一个带有游戏表 (InnoDB) 的 mysql 数据库:
gamerooms
id: bigint(20) unsigned not null auto_increment
PRIMARY KEY (`id`)
我想开始为我可以公开共享的每一行生成一个 UUID 值,例如:
gamerooms
id | id_public |
--------------------
1 | abcde
2 | ghijk
3 | lmnop
...
select * from gamerooms where id_public = ...
如何添加这个新列,同时记住表中已经有记录?我很困惑,因为该列应该标记为 NOT NULL,但是在添加该列之后,所有已经存在的记录都会有空值。我必须提供默认值吗?:
ALTER TABLE `gamerooms` ADD COLUMN `id_public` varchar(36) DEFAULT something AFTER `id`
我当然想在创建 id_public 之后为其添加一个索引,所以不确定在第一次创建列之后的空值是否会搞砸。
另外,我可以将 varchar(36) 与 mysqls UUID() 输出一起使用,对吧?
谢谢
最佳答案
您的ALTER
语句是正确的:
ALTER TABLE `gamerooms`
ADD COLUMN `id_public` varchar(36) NOT NULL DEFAULT 'something' AFTER `id`
根据我的 MySQL Pocket Reference,如果您不为定义为 NOT NULL 的列提供默认值:
MySQL picks a value based on the type of the field
在这种情况下,我猜默认值是空字符串。添加列后,只需为该列创建一个新索引,然后使用 null alteration 指令重建索引,如下所示:
CREATE INDEX myIndex ON gamerooms(id_public);
ALTER TABLE gamerooms ENGINE = InnoDB;
您可以在执行插入操作的同时创建索引。我的 MySQL-fu 还不够强大,不知道该怎么做。
关于mysql - 如何为已使用的表添加 varchar 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9013319/