Mam następujący schemat tabeli, który mapuje user_customers do uprawnień w bazie danych MySQL na żywo:
mysql> describe user_customer_permission;
+------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_customer_id | int(11) | NO | PRI | NULL | |
| permission_id | int(11) | NO | PRI | NULL | |
+------------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
Chciałbym usunąć klucze podstawowe dla id_użytkownika i id_użytkownika i zachować klucz podstawowy dla identyfikatora.
Po uruchomieniu polecenia:
alter table user_customer_permission drop primary key;
Otrzymuję następujący błąd:
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
Jak mogę upuścić klucz podstawowy kolumny?
@markb
: jeśli przywrócisz klucz podstawowy, na pewno możesz przywrócić go z powrotem doAUTO_INCREMENT
.AUTO_INCREMENT
mechanizmu z tabelą InnoDB,AUTO_INCREMENT
kolumnaai_col
musi być zdefiniowana jako część indeksu, aby można było wykonać odpowiednikSELECT MAX(ai_col)
wyszukiwania indeksowanego w tabeli, aby uzyskać maksymalną wartość kolumny. Zazwyczaj osiąga się to, czyniąc kolumnę pierwszą kolumną jakiegoś indeksu tabeli.Jedna linia:
Nie utracisz również automatycznego przyrostu i będziesz musiał go ponownie dodać, co może mieć skutki uboczne.
źródło
Wierzę, że Quassnoi odpowiedział na twoje bezpośrednie pytanie. Na marginesie: może to jest po prostu trochę niezręczne sformułowanie z twojej strony, ale wydaje się, że masz wrażenie, że masz trzy podstawowe klucze, po jednym na każdym polu. Nie o to chodzi. Z definicji możesz mieć tylko jeden klucz podstawowy. To, co masz tutaj, to klucz podstawowy, który składa się z trzech pól. Dlatego nie można „upuścić klucza podstawowego na kolumnę”. Możesz upuścić klucz podstawowy lub nie upuszczać klucza podstawowego. Jeśli chcesz, aby klucz podstawowy zawierał tylko jedną kolumnę, możesz upuścić istniejący klucz podstawowy na 3 kolumny i utworzyć nowy klucz podstawowy na 1 kolumnie.
źródło
źródło
Jeśli masz złożony klucz podstawowy, zrób tak:
ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);
źródło
„jeśli przywrócisz klucz podstawowy, na pewno możesz przywrócić go z powrotem do AUTO_INCREMENT”
Nie powinno być wątpliwości, czy pożądane jest „przywrócenie właściwości PK” i „przywrócenie właściwości autoinkrementacji” kolumny ID.
Biorąc pod uwagę, że BYŁO to autoinkrementacja we wcześniejszej definicji tabeli, jest całkiem prawdopodobne, że istnieje jakiś program, który wstawia się do tej tabeli bez podawania wartości identyfikatora (ponieważ kolumna ID i tak jest autokrementacją).
Każda taka operacja programu zostanie przerwana, nie przywracając właściwości autoinkrementu.
źródło
Najpierw zmodyfikuj kolumnę, aby usunąć pole auto_increment w następujący sposób: alter table user_customer_permission zmodyfikuj identyfikator kolumny int;
Następnie upuść klucz podstawowy. zmień tabelę user_customer_permission upuść klucz podstawowy;
źródło
źródło
Miałem ten sam problem i oprócz niektórych wartości w mojej tabeli. Chociaż zmieniłem mój klucz podstawowy za pomocą
ALTER TABLE
user_customer_permissionDROP PRIMARY KEY , ADD PRIMARY KEY (
id)
problem nadal występuje na moim serwerze. Utworzyłem nowe pole w tabeli Przeniesiłem wartości do nowego pola i usunąłem stare, problem rozwiązany !!
źródło
Aby dodać klucz podstawowy w kolumnie.
Aby usunąć klucz podstawowy z tabeli.
źródło
Najpierw wykonaj kopię zapasową bazy danych. Następnie upuść dowolny klucz obcy powiązany z tabelą. obciąć tabelę kluczy obcych. obciąć bieżącą tabelę. Usuń wymagane klucze podstawowe. Użyj narzędzia sqlyog lub workbench, heidisql lub dbeaver lub phpmyadmin.
źródło
Znajdź tabelę w menedżerze SQL, kliknij ją prawym przyciskiem myszy i wybierz projekt, a następnie kliknij prawym przyciskiem myszy małą ikonę klucza i wybierz usuń klucz podstawowy.
źródło