MySQL - Buat Field yang ada menjadi Unik

155

Saya memiliki tabel yang sudah ada dengan bidang yang harus unik tetapi tidak. Saya hanya tahu ini karena entri dibuat ke tabel yang memiliki nilai yang sama dengan entri lain, sudah ada, dan ini menyebabkan masalah.

Bagaimana cara membuat bidang ini hanya menerima nilai unik?

Lothar
sumber

Jawaban:

293
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

Untuk MySQL 5.7.4 atau yang lebih baru:

ALTER TABLE mytbl ADD UNIQUE (columnName);

Pada MySQL 5.7.4, klausa IGNORE untuk ALTER TABLE dihapus dan penggunaannya menghasilkan kesalahan.

Jadi, pastikan untuk menghapus entri duplikat terlebih dahulu karena kata kunci IGNORE tidak lagi didukung.

Referensi

WuHoUnited
sumber
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. Documents
The Scrum Meister
1
Apakah ada cara untuk mengatakannya untuk menghapus baris berdasarkan kriteria tertentu? Atau apakah Anda perlu melakukan beberapa preprocessing sebelum ALTERmenyelesaikannya.
corsiKa
7
ALTER IGNOREmungkin masih memberikan kesalahan Duplikat pada versi MySQL> 5.5 dan pada InnoDB demi keamanan data Anda. Jika Anda yakin bahwa menjaga baris pertama dari duplikat adalah hal yang benar, cobalah set session old_alter_table=1. Jangan lupa untuk mengaturnya kembali. mysqlolyk.wordpress.com/2012/02/18/…
michaelliu
2
Bagi siapa pun yang menemukan ini menggunakan 5.6.7 atau lebih tinggi, IGNORE tidak lagi didukung. moredocs Saya kira cara untuk melakukannya sekarang adalah untuk memastikan Anda tidak memiliki duplikat terlebih dahulu, bukan?
William T. Mallard
1
Pastikan untuk membuat salinan cadangan tabel sebelum Anda menjalankan kueri ini. Ini akan menghapus semua baris kecuali yang pertama jika nama kolom memiliki nilai yang sama atau kosong.
stable_daddy
34

Tulis saja permintaan ini di phpmyadmin db Anda.

ALTER TABLE TableName ADD UNIQUE (FieldName)

Misalnya: ALTER TABLE user ADD UNIQUE (email)

Rizwan Shamsher Kaim Khani
sumber
16

Jika Anda juga ingin memberi nama batasan, gunakan ini:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);
ypercubeᵀᴹ
sumber
7

CREATE UNIQUE INDEX foo ON table_name (field_name)

Anda harus menghapus nilai duplikat pada kolom itu sebelum mengeksekusi sql itu. Nilai duplikat apa pun yang ada pada kolom itu akan membawa Anda ke kesalahan mysql 1062

Zulan
sumber
4

Cara termudah dan tercepat adalah dengan tabel struktur phpmyadmin.

GUNAKAN PHPMYADMIN ADMIN PANEL!

Itu ada dalam bahasa Rusia tetapi dalam versi bahasa Inggris harus sama. Cukup klik tombol Unik. Dari sana Anda juga dapat membuat kolom Anda PRIMARY atau DELETE.

MKA
sumber
2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

adalah jawaban yang tepat

bagian sisipan

INSERT IGNORE INTO mytable ....
pengguna3772326
sumber
1

Kode ini adalah untuk memecahkan masalah kita untuk mengatur kunci unik untuk tabel yang ada

alter ignore table ioni_groups add unique (group_name);
KARTHIKEYAN.A
sumber
Tetapi menghapus semua duplikat termasuk yang di luar kolom
Biasi Wiga