MySQL设置NULLABLE唯一字段

时间:2010-10-19 04:01:02

标签: mysql unique-key

我有一个案例,我需要存储Twitter用户名,电子邮件和其他一些独特的字段。但是,我只能稍后设置推特用户名。不在注册过程中。我该如何在SQL中处理这个?

这是我当前的SQL结构:

CREATE TABLE `kios_users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `username` varchar(32) NOT NULL,
 `password` varchar(60) NOT NULL,
 `email` varchar(100) NOT NULL,
 `no_hp` varchar(15) NOT NULL,
 `twitter_oauth_token` varchar(60) NOT NULL,
 `twitter_oauth_token_secret` varchar(60) NOT NULL,
 `twitter_username` varchar(32) NULL,
 `verify_level` enum('just_reg','hp_ok','all_ok') NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `email` (`email`),
 UNIQUE KEY `no_hp` (`no_hp`),
 UNIQUE KEY `username` (`username`),
 UNIQUE KEY `twitter_username` (`twitter_username`)
) ENGINE=MyISAM

使用这种结构,我无法将twitter_username设置为空。你能告诉我最好的餐桌结构吗?

3 个答案:

答案 0 :(得分:4)

您可以设置虚拟唯一值,但不是最佳值。 您可以在应用逻辑中管理唯一性,而不是最佳。 我认为最好的方法是使用只包含两个字段的另一个表:idtwitter_usernametwitter_username上有唯一键,只有拥有推特用户名时才插入。 此外,id列上应该存在一对一的关系。

答案 1 :(得分:2)

您已将twitter_username设置为“NOT NULL”。尝试

`twitter_username` varchar(32) NULL

答案 2 :(得分:0)

你能不能只为你的twitter参数允许NULL并在应用程序级别强制执行唯一性? (即在php / .net /无论你使用什么)

或者,将Twitter帐户详细信息存储在链接到您的用户ID的单独表格中