2010-03-04 64 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文本列非常昂贵。

相关问题