Usuwanie wyjątkowego ograniczenia z tabeli MySQL

Odpowiedzi:

344

Unikalnym ograniczeniem jest również indeks.

Najpierw użyj, SHOW INDEX FROM tbl_nameaby znaleźć nazwę indeksu. Nazwa indeksu jest przechowywana w kolumnie o nazwiekey_name w wynikach tego zapytania.

Następnie możesz użyć DROP INDEX :

DROP INDEX index_name ON tbl_name

lub składnia ALTER TABLE :

ALTER TABLE tbl_name DROP INDEX index_name
Mark Byers
źródło
1
Przepraszam, że próbowałem, zanim zadałem pytanie, ale to nie działa
Ankur Mukherjee
@Ankur Mukherjee: Zapomniałem wspomnieć: Musisz zmienić nazwę tbl_name i nazwa_indeksu odpowiednio na nazwę twojej aktualnej tabeli i nazwę faktycznego indeksu. Możesz zobaczyć nazwy w MySQL Query Browser. Możesz też zrobić SHOW CREATE TABLE tbl_name.
Mark Byers
Komunikat o błędzie: „Wystąpił błąd w składni SQL; sprawdź w instrukcji, która odpowiada wersji serwera MySQL, czy jest odpowiednia składnia do użycia w pobliżu„ (identyfikator_gracza, rok, turniej) ”w wierszu 1”
Ankur Mukherjee
1
@Ankur Mukherjee: Moim zdaniem sposób, który zasugerowałem, jest najlepszym sposobem na zrobienie tego.
Mark Byers
1
Czytałem gdzieś w pytaniu za pomocą phpMyAdmin ... Odpowiedź udzielona przez @systemovich powinna być oznaczona jako zaakceptowana.
Pere
123

Możesz użyć DROPunikalnego ograniczenia z tabeli używając phpMyAdmin zgodnie z żądaniem, jak pokazano w poniższej tabeli. Unikalne ograniczenie zostało nałożone na pole Wingspan. W tym przypadku nazwa ograniczenia jest taka sama jak nazwa pola.

alternatywny tekst

systemowicz
źródło
34
Należy zauważyć, że sekcja indeksów jest domyślnie zwinięta i jest rozwinięta małym, subtelnym linkiem czcionką 12px, w której sekcja znajduje się na zrzucie ekranu. Ale dzięki tobie znalazłem to. Pobłogosław swoją twarz. +1
Jack
11

Indeksy umożliwiające umieszczenie unique kluczy na stole są PRIMARYi UNIQUEindeksy.

Aby usunąć unikalne ograniczenie klucza w kolumnie, ale zachować indeks, można usunąć i ponownie utworzyć indeks z typem INDEX.

Pamiętaj, że dobrym pomysłem jest, aby wszystkie tabele były oznaczone indeksem PRIMARY.

thomasrutter
źródło
1
Pozytywnie oceniany, ponieważ @thomasrutter poruszył fakt, że usunięcie unikalnego ograniczenia może negatywnie wpłynąć na wydajność zapytania - i można to złagodzić, zastępując UNIQUEindeks normalnym INDEX.
Alex
4

Aby dodać ograniczenie UNIQUE za pomocą phpmyadmin, przejdź do struktury tej tabeli, znajdź poniżej i kliknij ją,

wprowadź opis zdjęcia tutaj

Aby usunąć ograniczenie UNIKALNE, w ten sam sposób przejdź do struktury i przewiń w dół do Tabeli indeksów, znajdź poniżej i kliknij upuść, wprowadź opis zdjęcia tutaj

Mam nadzieję, że to zadziała.

Cieszyć się ;)

Umesh Patil
źródło
to rozwiązanie było dokładnie tym, czego szukałem.
Aryeh Beitz
2

W WAMP 3.0: Kliknij strukturę poniżej Dodaj 1 kolumnę, zobaczysz „- Indeksy” Kliknij - Indeksy i upuść dowolny indeks.

Jeffry Louis
źródło
2

Jeśli chcesz usunąć unikalne ograniczenia z tabeli bazy danych mysql, użyj tabeli zmian z indeksem upuszczania.

Przykład:

utwórz tabelę unikalne ograniczenia (unid int, nazwa_działania varchar (100), CONSTRAINT activty_uqniue UNIQUE (nazwa_działania), klucz podstawowy (unid));

alter table unique_constraints drop index activty_uqniue;

Gdzie activty_uqniue jest UNIQUE dla ACTIVITY_NAME kolumnie.

Manjunatha HC
źródło
0

upuszczając unikalny klucz używamy indeksu

ALTER TABLE tbl
DROP INDEX  unique_address;
Hamza.S
źródło
0

Ograniczenie można usunąć składnią:

ZMIEŃ TABELĘ

Począwszy od MySQL 8.0.19, ALTER TABLE zezwala na bardziej ogólną (i standard SQL) składnię na usuwanie i modyfikowanie istniejących ograniczeń dowolnego typu, gdzie typ ograniczenia jest określany na podstawie nazwy ograniczenia: ALTER TABLE tbl_name DROP CONSTRAINT symbol;

Przykład:

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 skrzypiec

Łukasz Szozda
źródło
-3

nazwa mojej tabeli to kupujący, która ma unikalną kolumnę ograniczeń emp_id teraz iam zamierzam upuścić emp_id

krok 1: exec sp_helpindex kupujący, zobacz plik obrazu

krok 2: skopiuj adres indeksu

wprowadź opis zdjęcia tutaj

krok 3: zmień ograniczenie upuszczania nabywców tabeli [UQ__buyers__1299A860D9793F2E] zmień upuszczenie kupujących tabelę emp_id

Uwaga:

Zablokować cytat

zamiast kupujących zmień go na nazwę swojego stołu :)

Zablokować cytat

oznacza to, że cała nazwa kolumny emp_id z ograniczeniami została usunięta!

vignesh .B
źródło
-5
  1. Najpierw usuń tabelę

  2. przejdź do SQL

Użyj tego kodu:

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`);
Baran
źródło