Dla mnie mówi: to zdefiniowałoby wiele kluczy podstawowych. Używam InnoDB. Uwaga, mam już 3 z nich.
LMD
2
Zdecydowanie postawiłbym FIRSTpo AUTO_INCREMENT, co oznacza, że idbędzie to pierwsza kolumna istniejącej już tabeli. W przeciwnym razie zostanie on umieszczony na końcu tabeli, tak jak jest teraz napisane, co może być trochę zagmatwane, gdy robimy prosteSELECT * ...
StefanK
Jak zdobyć pierwsze miejsce w nowej kolumnie „id”
TipVisor
17
Istniejąca kolumna
Jeśli chcesz dodać ograniczenie klucza podstawowego do istniejącej kolumny, wszystkie poprzednio wymienione składnie zawiodą.
Aby dodać ograniczenie klucza podstawowego do istniejącej kolumny, użyj formularza:
mysql nie rozpoznaje MODIFY jako właściwej instrukcji (przynajmniej w XAMPP, InnoDB)
LMD
@LMD Z jakiej wersji mysql korzystasz? (UWAGA: wiem, że to działało w momencie, gdy to opublikowałem i wydaje mi się, że było to 5,6 ... ale nie pamiętam na pewno)
MER
1
Jeśli u Ciebie tak jak u mnie to nie zadziała zamień MODIFY na CHANGE i będzie działać!
csr-nontol
12
Jeśli twój stół jest dość duży, lepiej nie używaj stwierdzenia:
ponieważ tworzy kopię wszystkich danych w tabeli tymczasowej, zmienia tabelę, a następnie kopiuje ją z powrotem. Lepiej zrób to ręcznie. Zmień nazwę stołu:
rename table goods to goods_old;
utwórz nową tabelę z kluczem podstawowym i wszystkimi niezbędnymi indeksami:
createtable goods (
id int(10) unsigned notnull AUTO_INCREMENT
... other columns ...primarykey(id));
przenieś wszystkie dane ze starej tabeli do nowej, wyłączając klucze i indeksy, aby przyspieszyć kopiowanie:
SET UNIQUE_CHECKS=0;ALTERTABLE goods DISABLE KEYS;INSERTINTO goods (... your column names ...)SELECT... your column names FROM goods_old;ALTERTABLE goods ENABLE KEYS;SET UNIQUE_CHECKS=1;
SET AUTOCOMMIT =0;SET UNIQUE_CHECKS=0;SET FOREIGN_KEY_CHECKS=0;INSERTINTO goods (... your column names ...)SELECT... your column names FROM goods_old;SET FOREIGN_KEY_CHECKS=1;SET UNIQUE_CHECKS=1;COMMIT;SET AUTOCOMMIT =1;
Dodanie PK do tabeli zawierającej ~ 200 mln wierszy zajmuje 2000 sekund.
Byłem zaskoczony, jak długo musiałem szukać, aby znaleźć tę odpowiedź. Dzięki za te pomocne przykłady.
Ryan
4
Nie jestem pewien, czy to ma znaczenie dla kogokolwiek innego, ale wolę tabelę identyfikatorów od pierwszej kolumny w bazie danych. Składnia tego jest następująca:
Dla mnie żadna z sugestii nie zadziałała, dając mi błędy składni, więc po prostu spróbowałem użyć phpmyadmin (wersja 4.9.2), (10.4.10-MariaDB) i dodałem idkolumnę z kluczem podstawowym z automatycznym zwiększaniem wartości. Idkolumna została ładnie dodana od pierwszego elementu.
Wynik zapytania:
ALTER TABLE table_nameADD idINT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY ( id);
Odpowiedzi:
Po dodaniu kolumny zawsze możesz dodać klucz podstawowy:
ALTER TABLE goods ADD PRIMARY KEY(id)
Aby dowiedzieć się, dlaczego Twój skrypt nie działał, musisz określić
PRIMARY KEY
, a nie tylko słowoPRIMARY
:źródło
FIRST
poAUTO_INCREMENT
, co oznacza, żeid
będzie to pierwsza kolumna istniejącej już tabeli. W przeciwnym razie zostanie on umieszczony na końcu tabeli, tak jak jest teraz napisane, co może być trochę zagmatwane, gdy robimy prosteSELECT * ...
Istniejąca kolumna
Jeśli chcesz dodać ograniczenie klucza podstawowego do istniejącej kolumny, wszystkie poprzednio wymienione składnie zawiodą.
Aby dodać ograniczenie klucza podstawowego do istniejącej kolumny, użyj formularza:
źródło
Jeśli twój stół jest dość duży, lepiej nie używaj stwierdzenia:
ponieważ tworzy kopię wszystkich danych w tabeli tymczasowej, zmienia tabelę, a następnie kopiuje ją z powrotem. Lepiej zrób to ręcznie. Zmień nazwę stołu:
utwórz nową tabelę z kluczem podstawowym i wszystkimi niezbędnymi indeksami:
przenieś wszystkie dane ze starej tabeli do nowej, wyłączając klucze i indeksy, aby przyspieszyć kopiowanie:
- UŻYJ TEGO DO TABEL MyISAM :
LUB
- UŻYJ TEGO DO STOŁÓW InnoDB :
Dodanie PK do tabeli zawierającej ~ 200 mln wierszy zajmuje 2000 sekund.
źródło
Nie jestem pewien, czy to ma znaczenie dla kogokolwiek innego, ale wolę tabelę identyfikatorów od pierwszej kolumny w bazie danych. Składnia tego jest następująca:
To tylko niewielka poprawa w stosunku do pierwszej odpowiedzi. Gdybyś chciał, żeby był w innej pozycji, to
HTH, -ft
źródło
Użyj tego zapytania,
źródło
Ten kod działa w mojej bazie danych mysql:
źródło
źródło
Spróbuj tego,
źródło
Dla mnie żadna z sugestii nie zadziałała, dając mi błędy składni, więc po prostu spróbowałem użyć phpmyadmin (wersja 4.9.2), (10.4.10-MariaDB) i dodałem
id
kolumnę z kluczem podstawowym z automatycznym zwiększaniem wartości.Id
kolumna została ładnie dodana od pierwszego elementu.Wynik zapytania:
ALTER TABLE
table_name
ADDid
INT NOT NULL AUTO_INCREMENT FIRST, ADD PRIMARY KEY (id
);źródło
Usuń cudzysłowy, aby działały poprawnie ...
źródło