MySQL的唯一列串
问题描述:
目前,我有我的数据库的表:MySQL的唯一列串
CREATE TABLE `twMCUserDB` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`mc_userName` text NOT NULL,
`mc_userPass` text NOT NULL,
`tw_userName` text NOT NULL,
`tw_userPass` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
现在我想要做的是,列mc_userName
将是唯一的(就像ID)。但mc_userName
必须是一个字符串。
现在做我试图使它也主键,但没有工作......
所以我给你们的问题是如下:
当我将数据添加到表,我首先必须检查mc_userName是否已经存在?或者是有任何内置函数在Mysql中,我可以使用(如在插入查询或其他地方)
答
只需添加UNIQUE
`mc_userName` text NOT NULL UNIQUE,
或
CREATE TABLE `twMCUserDB` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`mc_userName` text NOT NULL,
`mc_userPass` text NOT NULL,
`tw_userName` text NOT NULL,
`tw_userPass` text NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT tb_uq UNIQUE (mc_userName)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
答
为什么不让'mc_userName'的主键而不是id?您将不得不将mc_userName的数据类型更改为VARCHAR,如本文所述:MySQL error: key specification without a key length。或者,创建一个包含ID和用户名的组合主键。
如果因为数据库的设计而无法执行此操作,请在查询中使用EXISTS关键字。看看这里的更多信息:http://dev.mysql.com/doc/refman/5.0/en/exists-and-not-exists-subqueries.html
我怎样才能把这个独特的东西添加到柱子上?我使用Navicat作为数据库编辑器和phpmyadmin,但找不到可以处理这个问题的东西... – Mathlight
您可以尝试通过运行此DDL来改变表格:'ALTER TABLE twMCUserDB ADD UNIQUE tb_uq(mc_userName)' –
这返回这个:'[Err] 1170 - BLOB/TEXT列'mc_userName'用于没有密钥长度的密钥规范中 – Mathlight