MySQL: Tablodaki birkaç satır veri benzersiz yapmak nasıl?

4 Cevap php

Nasıl myphpadmin aşağıdaki (interested only in how to do UNIQUE (title, description)) yapardı?:

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

Ve arada, böylece SO üzerinde başka bir soru açmak için değil, ben uzun dizeleri için kullanabileceğiniz başka ne tür bilmek istiyorum? 225 karakterler bizim amaçlarımız için çok küçük olduğu için. Ben varchar MySQL 5.0.3 olarak 65.535 karaktere kadar kabul olduğunu biliyor olsa. Ama MEDIUMTEXT (müvekkilim bu uyumluluk uğruna gibi olmak istiyor) gibi bu alanları belirtmek olabilir? Ben bunu yaparken ben, çünkü "BLOB/TEXT column ... used in key specification without a key length" bir hata alıyorum. Ne zaman yapmalıyım? Ben açıklamaları farklı hatta benzer başlıkları saklamak mümkün olacaktır böylece, ancak başlıklar ve başlıklar ve gelen verilerin açıklamalarını maç açıklamaları varken, ben o zaman bu gelen verileri saklamak istemeyen - Ben benzersiz olması için bu iki alanı gerekir .

. Benim çerez Ben şimdi Aksi halde bununla birlikte bu soruları sormak istiyorsunuz sorusuna alınamıyor sorulduğunda kapalı çünkü - ama - ve ben (zaten http://stackoverflow.com/questions/2378784/mysql-problem-to-store-only-different-data SO ile ilgili bir soru açtı Benim privious soruyu. Man yanıtladı Atlı teşekkür etmek isterdim, gerçekten bana yardımcı oldu!)

4 Cevap

1000 MyISAM ve 3072 ilave şartı ile (InnoDB için bayt için bayt olan maksimum anahtar uzunluğu varsayılan bu anahtarında her sütun olmamalı ) 767 bayt.

Masa InnoDB veya MyISAM tek bayt kodlama ile ise, o zaman tamam kısıtlamayı oluşturabilirsiniz.

Değilse, o zaman önceden sabitlenmiş bir dizin oluşturabilirsiniz, ancak dizin sadece önek içinde tekliği korumak farkında olabilirsiniz.

Bu sizin başlık ve açıklama karma ve yerine benzersiz bir sütun karma saklamak olduğunu, ancak, çok daha iyi olacak.

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 başlık ve açıklama tam bilgi depolar, ancak endeks bu alanlardan sadece 255 ilk karakterlerini olacak. Senin 255 Aynı karakter 2 başlıkları yazın ve ardından farklı bir şey anlamına gelir - bu iki katına bir hata verecektir.

PhpMyAdmin kullanarak EŞSİZ (ben bu ;) soru oldu umarım) oluşturmak için aşağıdakileri yapın:

Tablo gidin ve "yapı" seçeneğini seçin, daha sonra 2 satır (sol altta) üzerinde bir dizin eklemek, iki alan ve "indextyp: benzersiz" seçin ve bitti.

Edit: Added Screenshots, it's german but it should look the same to you. I really hope that does the trick, if not i didn't understand your question and all the comments you made at all.

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

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

"benzersiz" dizin sadece özel bir türüdür çünkü "index" altında yayımlandı.

Eğer tablo zaten oluşturulmuş varsa, soldaki onay kutularını ile iki sütun (başlık, açıklama) seçin, PhpMyAdmin bunun için yapıya gidin. sonra tablo tanımı altında denetimlerin aralıksız U simgesini tıklatın. Bu iki seçilmiş alanlar üzerinde, benzersiz bir dizin katacak.

Indeks uzunluğunda ve bir karma alternatif kullanma hakkında Quassnoi yaptığı yorumlar nokta vardır. Ayrıca UTF-8 metin sütunları indekslerde karakter başına üç bayt gerektirir, bu nedenle indeksleme UTF-8 metin sütunları oldukça pahalı olduğunu unutmayın.