Próbuję zmienić tabelę, która nie ma klucza podstawowego ani kolumny auto_increment. Wiem, jak dodać kolumnę klucza podstawowego, ale zastanawiałem się, czy możliwe jest automatyczne wstawianie danych do kolumny klucza podstawowego (mam już 500 wierszy w DB i chcę im nadać identyfikator, ale nie chcę tego robić ręcznie) . jakieś pomysły? Wielkie dzięki.
mysql
primary-key
FlyingCat
źródło
źródło
alter table
dodać klucz, ale MySQL nie wygeneruje identyfikatorów pól, które jeszcze ich nie mają. Będziesz musiał ręcznie zaktualizować istniejące pola, a następnie upewnić się, że nowy element auto_increment zaczyna się od właściwego przesunięcia - domyślnie wynosi „1”, a mimo to i tak skończysz z powielonymi błędami klucza.Odpowiedzi:
ALTER TABLE
Wypowiedź dodającPRIMARY KEY
kolumnę działa poprawnie w moich testów:W tabeli tymczasowej utworzonej do celów testowych powyższa instrukcja utworzyła plik
AUTO_INCREMENT
id
kolumnę i wstawiła wartości autoinkrementacji dla każdego istniejącego wiersza w tabeli, zaczynając od 1.źródło
FIRST
np.ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
LAST_INSERT_ID()
tę wartość,SELECT * FROM table_name WHERE id = LAST_INSERT_ID()
a większość interfejsów API języka programowania oferuje pewne funkcje / metody zwracania tej wartości w kodzie aplikacji.załóżmy, że nie masz kolumny do automatycznego zwiększania wartości, takiej jak id, nie, możesz dodać za pomocą następującego zapytania:
Jeśli masz kolumnę, zmień na automatyczne zwiększanie za pomocą następującego zapytania:
źródło
FIRST
na końcu?id
kolumna będzie pierwszą w tabeli, a nie ostatnią, co jest zachowaniem domyślnym.tak, coś takiego by to zrobiło, chociaż może nie być najlepsze, możesz zrobić kopię zapasową
Zwróć uwagę,
any_field
że wybrana opcja musi być taka sama podczas aktualizacji.źródło
Dla takich, jak ja, pojawia się
Multiple primary key defined
błąd:W MySQL w wersji 5.5.31 ustawiło to
id
kolumnę jako klucz podstawowy i zapełniło każdy wiersz wartością rosnącą .źródło
Najłatwiejszy i najszybszy, jaki znajdę, to to
źródło
Udało mi się dostosować te instrukcje, wziąć tabelę z istniejącym nieinkrementalnym kluczem podstawowym i dodać do tabeli zwiększający się klucz podstawowy i utworzyć nowy złożony klucz podstawowy ze starym i nowym kluczem jako złożonym kluczem podstawowym, używając następującego kod:
Po wykonaniu tej czynności pole _USER_ID istnieje i zawiera wszystkie wartości liczbowe klucza podstawowego dokładnie tak, jak można się spodziewać. Dzięki „DROP TABLE” u góry możesz to wielokrotnie powtarzać, aby eksperymentować z odmianami.
To, czego nie udało mi się uzyskać, to sytuacja, w której przychodzące KLUCZE OBCE, które już wskazują na pole USER_ID. Otrzymuję ten komunikat, gdy próbuję wykonać bardziej złożony przykład z przychodzącym kluczem obcym z innej tabeli.
Zgaduję, że muszę zerwać wszystkie klucze obce przed wykonaniem tabeli ALTER, a następnie odbudować je później. Ale na razie chciałem podzielić się tym rozwiązaniem z trudniejszą wersją pierwotnego pytania na wypadek, gdyby inni napotkali taką sytuację.
źródło
Wyeksportuj tabelę, opróżnij tabelę, dodaj pole jako unikalne INT, a następnie zmień je na AUTO_INCREMENT, a następnie zaimportuj ponownie tabelę, którą wyeksportowałeś wcześniej.
źródło
Możesz dodać nową kolumnę klucza podstawowego do istniejącej tabeli, która może mieć kolejne numery, używając polecenia:
źródło
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTITY' at line 1
Miałem ten sam problem, więc porzuciłem pole klucza podstawowego, a następnie utworzyłem go ponownie i upewniłem się, że jest automatycznie przyrostowy. To zadziałało dla mnie. Mam nadzieję, że pomaga innym
źródło
ALTER TABLE tableName AKTUALIZACJA tableNameID MEDIUMINT NOT NULL AUTO_INCREMENT ;
Tutaj tableName to nazwa twojego stołu,
nazwa_tabeli to nazwa kolumny, która jest podstawowa, którą należy zmodyfikować
ŚREDNI to typ danych istniejącego klucza podstawowego
AUTO_INCREMENT musisz dodać tylko auto_increment po nie null
Spowoduje to, że klucz podstawowy będzie automatycznie_increment ......
Mam nadzieję, że to jest pomocne :)
źródło
Jak napisać PHP, aby ZMIENIĆ już istniejące pole (w tym przykładzie nazwę), aby stało się kluczem podstawowym? Oczywiście bez dodawania dodatkowych pól „id” do tabeli.
To jest aktualnie utworzona tabela - Liczba znalezionych rekordów: 4 nazwa VARCHAR (20) TAK rasa VARCHAR (30) TAK kolor VARCHAR (20) TAK waga SMALLINT (7) TAK
To jest oczekiwany rezultat końcowy (OPIS TABELI) -
Liczba znalezionych rekordów: 4 nazwa VARCHAR (20) NIE PRI rasa VARCHAR (30) TAK kolor VARCHAR (20) TAK waga SMALLINT (7) TAK
Zamiast tego -
Liczba znalezionych rekordów: 5 id int (11) NIE nazwa PRI VARCHAR (20) TAK rasa VARCHAR (30) TAK kolor VARCHAR (20) TAK waga SMALLINT (7) TAK
po wypróbowaniu ...
$ query = "ZMIEŃ TABELĘ konie wyścigowe DODAJ ID INT NIE NULL PIERWSZY AUTO_INCREMENT, DODAJ PODSTAWOWY KLUCZ (id)";
jak to zdobyć? -
Liczba znalezionych rekordów: 4 nazwa VARCHAR (20) NIE PRI rasa VARCHAR (30) TAK kolor VARCHAR (20) TAK waga SMALLINT (7) TAK
tj. WSTAW / DODAJ ... itd. klucz podstawowy DO pierwszego rekordu pola (bez dodawania dodatkowego pola „id”, jak wspomniano wcześniej.
źródło