2010-03-04 34 views
0

我會怎麼做以下在phpMyAdmin?:MySQL:如何使表中的多行數據唯一?

CREATE TABLE `myData` (
    id serial primary key, 
    title varchar(255) not null, 
    description varchar(255) not null, 
    UNIQUE (title, description) 
); 

順便說一句(感興趣的只是如何做UNIQUE(標題,描述)),以免打開另一個問題上的SO,我想知道什麼其他類型可以用於長字符串?因爲我們的目的有225個字符太小。儘管我知道varchar從MySQL 5.0.3開始可以接受多達65,535個字符。但是,我可以將這些字段指定爲MEDIUMTEXT(我的客戶希望這些字段爲了兼容性)?當我這樣做時,我得到一個錯誤,因爲「 BLOB/TEXT column ...用於沒有密鑰長度的密鑰規範」。那我該怎麼辦?我需要這兩個字段是唯一的 - 這樣即使描述不同,我也可以存儲相似的標題,但是當標題和描述與傳入數據的標題和描述相匹配時,我不希望存儲此傳入數據,然後。

+0

這個手柄的情況會改變嗎,不同的間距?即相同的標題,但有一個不同的情況。或相同的描述,但一個有2個空格,而不是一個。 – zapping 2010-03-04 12:59:05

+0

我想現在情況下的變化和不同的間距不會計算在內。如果它們匹配,它們在大小寫和間距上都是相同的。 – AleGore 2010-03-04 13:14:31

+0

對於你的第二個問題:http://dev.mysql.com/doc/refman/5.0/en/blob.html – Svish 2010-03-04 13:52:41

回答

1

默認最大鍵長度爲1000字節MyISAM3072字節InnoDB(與在鍵每一列不應該超過767字節額外要求)。

如果你的表是InnoDBMyISAM單字節編碼,那麼你可以創建約束好吧。

如果不是,那麼您可以創建一個前綴索引,但請注意索引只會在前綴內保持唯一性。

但是,您將散列標題和說明並將散列存儲在唯一列中會好得多。

0

若要使用phpMyAdmin(我希望這是你的問題;)獨特的),請執行以下操作:

導航到該表並選擇「結構」,然後添加一個索引超過2行(左下),選擇兩個字段和「indextyp:unique」並完成。

編輯: 新增了屏幕截圖,它是德語,但它看起來應該和你一樣。我真的希望這個訣竅,如果不是我不明白你的問題和你所做的所有評論。

http://dl.dropbox.com/u/3615626/stackoverflow/phpmyadmin-step1.png

http://dl.dropbox.com/u/3615626/stackoverflow/phpmyadmin-step2.png

它是 「指數」 下一篇,因爲 「唯一」 只是一種特殊類型的索引。

+0

有點難以遵循...首先,爲什麼索引但不唯一?如何選擇兩個字段和「indextyp:unique」? – AleGore 2010-03-04 13:24:04

+0

請參閱我的編輯 – edorian 2010-03-04 13:48:44

0
CREATE TABLE `myData` (
`id` INT(12) NOT NULL , 
`title` TEXT NOT NULL , 
`description` TEXT NOT NULL , 
PRIMARY KEY (`id`) , 
UNIQUE (
`title` (255) , 
`description` (255) 
) 
); 

MySQL將存儲來自標題和描述的完整信息,但它只會從這些字段索引255個第一個字符。這意味着你輸入了255個相同字符的2個標題,然後有些不同 - 它會給你一個加倍的錯誤。

+0

您認爲這有助於我回答問題嗎?我想知道如何在phpmyadmin中做到這一點,我也想知道哪種類型的選擇(長字符串)。 – AleGore 2010-03-04 13:27:36

0

如果您已經創建了表格,請在PhpMyAdmin中轉到它的結構,在左邊的複選框中選擇兩列(標題,說明)。然後單擊表格說明下控制行中的U圖標。這將在兩個選定的字段上添加一個唯一的索引。

Quassnoi有關索引長度和使用散列替代方法的評論是現貨。另請注意,UTF-8文本列在索引中每個字符需要三個字節,因此索引UTF-8文本列非常昂貴。

相關問題