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?

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


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)


16

Jika Anda juga ingin memberi nama batasan, gunakan ini:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

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


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.


2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

adalah jawaban yang tepat

bagian sisipan

INSERT IGNORE INTO mytable ....

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);

Tetapi menghapus semua duplikat termasuk yang di luar kolom
Biasi Wiga
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.