2012-11-25 44 views
5

目前,我有我的數據庫的表: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中,我可以使用(如在插入查詢或其他地方)

回答

6

只需添加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

1

爲什麼不讓'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