MySQL - Mevcut bir Alanı Benzersiz Yap


155

Benzersiz olması gereken bir alan ile zaten var olan bir tablo var. Ben sadece biliyorum çünkü zaten başka bir var, aynı değeri olan tabloya bir giriş yapıldı ve bu sorunlara neden oldu.

Bu alanın yalnızca benzersiz değerleri kabul etmesini nasıl sağlayabilirim?

Yanıtlar:


293
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

MySQL 5.7.4 veya üstü için:

ALTER TABLE mytbl ADD UNIQUE (columnName);

MySQL 5.7.4'ten itibaren ALTER TABLE için IGNORE yan tümcesi kaldırılır ve kullanımı bir hata oluşturur.

Bu nedenle, IGNORE anahtar sözcüğü artık desteklenmediğinden, önce yinelenen girişleri kaldırdığınızdan emin olun.

Referans


62
+1 If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. Dokümanlar
The Scrum Meister

1
Belirli bir ölçüt temelinde satırları silmesini söylemenin bir yolu var mı? Yoksa bunu yapmak için önce bazı önişleme yapmak gerekir ALTER.
corsiKa

7
ALTER IGNOREyine de MySQL sürüm> 5.5 ve InnoDB'de verilerinizin güvenliği için Yinelenen hata verebilir. Çoğaltılan satırlardan ilkini tutmanın doğru şey olduğundan eminseniz, deneyin set session old_alter_table=1. Geri koymayı unutma. mysqlolyk.wordpress.com/2012/02/18/…
michaelliu

2
5.6.7 veya daha büyük bir sürüm kullanan bu sorunla karşılaşan herkes için IGNORE artık desteklenmemektedir. Moredocs Şimdi bunu yapmanın yolu, ilk önce kopyaların olmadığından emin olmaktır, değil mi?
William T. Mallard

1
Bu sorguyu çalıştırmadan önce tablonun yedek bir kopyasını oluşturduğunuzdan emin olun. Sütun adı aynı değerlere sahipse veya boşsa, ilk satır dışındaki tüm satırları siler.
steady_daddy

34

Bu sorguyu db phpmyadmin'inize yazmanız yeterlidir.

ALTER TABLE TableName ADD UNIQUE (FieldName)

Örneğin: ALTER TABLE user ADD UNIQUE (email)


16

Kısıtlamayı da adlandırmak istiyorsanız, bunu kullanın:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

7

CREATE UNIQUE INDEX foo ON table_name (field_name)

Söz konusu sql yürütülmeden önce o sütundaki yinelenen değerleri kaldırmanız gerekir. Bu sütunda varolan herhangi bir yinelenen değer, mysql hatası 1062'ye yol açacaktır


4

En kolay ve en hızlı yol phpmyadmin yapı tablosu ile olacaktır.

PHPMYADMIN YÖNETİM PANELİ KULLANIN!

Orada Rus dilinde ama İngilizce Versiyon aynı olmalı. Benzersiz düğmesini tıklamanız yeterlidir. Ayrıca sütunlarınızı PRIMARY veya DELETE yapabilirsiniz.


2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

doğru cevap mı

ekleme parçası

INSERT IGNORE INTO mytable ....

1

Bu kod, mevcut tablo için benzersiz anahtar ayarlamak için sorunumuzu çözmek içindir

alter ignore table ioni_groups add unique (group_name);

Ancak sütunların dışındaki olanlar da dahil olmak üzere tüm kopyaları kaldırır
Biasi Wiga
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.