Menjatuhkan batasan unik dari tabel MySQL

Jawaban:

345

Batasan unik juga merupakan indeks.

Pertama digunakan SHOW INDEX FROM tbl_nameuntuk mengetahui nama indeks. Nama indeks disimpan di kolom yang disebut key_namedi hasil permintaan itu.

Maka Anda dapat menggunakan DROP INDEX :

DROP INDEX index_name ON tbl_name

atau sintaks ALTER TABLE :

ALTER TABLE tbl_name DROP INDEX index_name
Mark Byers
sumber
1
Maaf pak, saya sudah mencobanya sebelum mengajukan pertanyaan, tetapi tidak berhasil
Ankur Mukherjee
@Ankur Mukherjee: Saya lupa menyebutkan: Anda harus mengubah tbl_name dan index_name menjadi nama tabel aktual Anda dan nama indeks aktual, masing-masing. Anda dapat melihat nama-nama di MySQL Query Browser. Anda juga bisa melakukannya SHOW CREATE TABLE tbl_name.
Mark Byers
Pesan Kesalahan: "Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MySQL Anda untuk sintaks yang tepat untuk digunakan di dekat '(player_id, tahun, turnamen)' di baris 1"
Ankur Mukherjee
1
@Ankur Mukherjee: Cara yang saya sarankan menurut saya adalah cara terbaik untuk melakukannya.
Mark Byers
1
Saya membaca di suatu tempat dalam pertanyaan menggunakan phpMyAdmin ... Jawaban yang diberikan oleh @systemovich harus ditandai sebagai yang diterima.
Pere
123

Anda dapat DROPkendala unik dari tabel menggunakan phpMyAdmin seperti yang diminta seperti yang ditunjukkan pada tabel di bawah ini. Kendala unik telah ditempatkan di bidang Lebar sayap. Nama kendala sama dengan nama bidang, dalam contoh ini.

teks alternatif

systemovich
sumber
34
Penting untuk dicatat bahwa bagian indeks runtuh secara default, dan diperluas oleh tautan kecil dan halus dalam font 12px di mana bagian tersebut di tangkapan layar. Tetapi berkat Anda, saya menemukannya. Berkati wajahmu. +1
Jack
11

Indeks yang mampu menempatkan batasan kunci unik pada tabel adalah PRIMARYdan UNIQUEindeks.

Untuk menghapus batasan kunci unik pada kolom tetapi mempertahankan indeks, Anda bisa menghapus dan membuat ulang indeks dengan tipe INDEX.

Perhatikan bahwa sebaiknya semua tabel memiliki indeks yang ditandai PRIMARY.

thomasrutter
sumber
2
Terpilih karena @thomasrutter telah menyentuh fakta bahwa menghapus batasan unik dapat memengaruhi kinerja kueri - dan ini dapat dikurangi dengan mengganti UNIQUEindeks dengan reguler INDEX.
Alex
4

Untuk menambahkan batasan UNIK menggunakan phpmyadmin, pergi ke struktur tabel itu dan temukan di bawah dan klik itu,

masukkan deskripsi gambar di sini

Untuk menghapus batasan UNIK, dengan cara yang sama, buka struktur dan gulir ke bawah hingga Tab Indeks dan temukan di bawah lalu klik drop, masukkan deskripsi gambar di sini

Semoga ini berhasil.

Nikmati ;)

Umesh Patil
sumber
solusi ini persis apa yang saya cari.
Aryeh Beitz
2

Untuk WAMP 3.0: Klik Struktur Di Bawah Tambahkan 1 Kolom, Anda akan melihat '- Indeks' Klik -Indeks dan letakkan indeks mana pun yang Anda inginkan.

Jeffry Louis
sumber
2

Jika Anda ingin menghapus batasan unik dari tabel database mysql, gunakan tabel alter dengan indeks jatuh.

Contoh:

buat tabel unique_constraints (unid int, activity_name varchar (100), CONSTRAINT activty_uqniue UNIQUE (activity_name), primary key (unid));

alter table unique_constraints drop index activty_uqniue;

Di mana activty_uqniue adalah kendala UNIQUE untuk kolom activity_name .

Manjunatha HC
sumber
0

sementara menjatuhkan kunci unik kami menggunakan indeks

ALTER TABLE tbl
DROP INDEX  unique_address;
Hamza.S
sumber
0

Batasan dapat dihapus dengan sintaks:

ALTER TABEL

Pada MySQL 8.0.19, ALTER TABLE memungkinkan sintaksis yang lebih umum (dan standar SQL) untuk menjatuhkan dan mengubah batasan yang ada dari semua jenis, di mana jenis kendala ditentukan dari nama kendala: ALTER TABLE tbl_name DROP CONSTRAINT symbol;

Contoh:

CREATE TABLE tab(id INT, CONSTRAINT unq_tab_id UNIQUE(id));

-- checking constraint name if autogenerated
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'tab';

-- dropping constraint
ALTER TABLE tab DROP CONSTRAINT unq_tab_id;

db <> demo biola

Lukasz Szozda
sumber
-3

nama tabel saya adalah pembeli yang memiliki kolom kendala unik emp_id sekarang saya akan menghapus emp_id

langkah 1: exec sp_helpindex pembeli, lihat file gambar

langkah 2: salin alamat indeks

masukkan deskripsi gambar di sini

step3: mengubah batasan drop pembeli tabel [UQ__buyers__1299A860D9793F2E] ubah tabel drop kolom pembeli pembeli emp_id

catatan:

Blokir

bukannya pembeli mengubahnya ke nama tabel Anda :)

Blokir

itu semua nama kolom emp_id dengan batasan dijatuhkan!

vignesh .B
sumber
-5
  1. Hapus tabel pertama

  2. pergi ke SQL

Gunakan kode ini:

CREATE  TABLE service( --tablename 
  `serviceid` int(11) NOT NULL,--columns
  `customerid` varchar(20) DEFAULT NULL,--columns
  `dos` varchar(30) NOT NULL,--columns
  `productname` varchar(150) NOT NULL,--columns
  `modelnumber` bigint(12) NOT NULL,--columns
  `serialnumber` bigint(20) NOT NULL,--columns
  `serviceby` varchar(20) DEFAULT NULL--columns
)
--INSERT VALUES
INSERT INTO `service` (`serviceid`, `customerid`, `dos`, `productname`, `modelnumber`, `serialnumber`, `serviceby`) VALUES
(1, '1', '12/10/2018', 'mouse', 1234555, 234234324, '9999'),
(2, '09', '12/10/2018', 'vhbgj', 79746385, 18923984, '9999'),
(3, '23', '12/10/2018', 'mouse', 123455534, 11111123, '9999'),
(4, '23', '12/10/2018', 'mouse', 12345, 84848, '9999'),
(5, '546456', '12/10/2018', 'ughg', 772882, 457283, '9999'),
(6, '23', '12/10/2018', 'keyboard', 7878787878, 22222, '1'),
(7, '23', '12/10/2018', 'java', 11, 98908, '9999'),
(8, '128', '12/10/2018', 'mouse', 9912280626, 111111, '9999'),
(9, '23', '15/10/2018', 'hg', 29829354, 4564564646, '9999'),
(10, '12', '15/10/2018', '2', 5256, 888888, '9999');
--before droping table
ALTER TABLE `service`
  ADD PRIMARY KEY (`serviceid`),
  ADD  unique`modelnumber` (`modelnumber`),
  ADD  unique`serialnumber` (`serialnumber`),
  ADD unique`modelnumber_2` (`modelnumber`);
--after droping table
ALTER TABLE `service`
  ADD PRIMARY KEY (`serviceid`),
  ADD  modelnumber` (`modelnumber`),
  ADD  serialnumber` (`serialnumber`),
  ADD modelnumber_2` (`modelnumber`);
ram
sumber