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; 
+0

我怎样才能把这个独特的东西添加到柱子上?我使用Navicat作为数据库编辑器和phpmyadmin,但找不到可以处理这个问题的东西... – Mathlight

+0

您可以尝试通过运行此DDL来改变表格:'ALTER TABLE twMCUserDB ADD UNIQUE tb_uq(mc_userName)' –

+0

这返回这个:'[Err] 1170 - BLOB/TEXT列'mc_userName'用于没有密钥长度的密钥规范中 – Mathlight

为什么不让'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

+0

我不能这样做,因为我得到的错误'MySQL错误1170:BLOB/TEXT在没有钥匙长度的关键规格中使用的列......我会看看那个链接 – Mathlight

+0

你不能做什么? – w0051977

+0

对不起,我的意思是第一部分...使mc_userName成为主键而不是ID ....我得到上述错误 – Mathlight