Próbuję przenieść stare dane z:
this_table >> this_table_archive
kopiowanie wszystkich kolumn. Próbowałem tego, ale to nie działa:
INSERT INTO this_table_archive (*) VALUES (SELECT * FROM this_table WHERE entry_date < '2011-01-01 00:00:00');
Uwaga: tabele są identyczne i mają id
ustawiony klucz podstawowy.
mysql
select
insert-into
Kyle
źródło
źródło
Odpowiedzi:
Prawidłowa składnia jest opisana w instrukcji . Spróbuj tego:
Jeśli kolumny id są kolumną z automatyczną inkrementacją i masz już jakieś dane w obu tabelach, to w niektórych przypadkach możesz chcieć pominąć identyfikator z listy kolumn i zamiast tego wygenerować nowe identyfikatory, aby uniknąć wstawienia identyfikatora, który już istnieje w oryginale stół. Jeśli twoja tabela docelowa jest pusta, nie będzie to problemem.
źródło
W przypadku składni wygląda to tak (pomiń listę kolumn, aby niejawnie oznaczać „wszystko”)
Aby uniknąć błędów klucza podstawowego, jeśli masz już dane w tabeli archiwum
źródło
Dodatek do odpowiedzi Mark Byers:
Czasami chcesz również wstawić zakodowane na stałe szczegóły, w przeciwnym razie może się zdarzyć, że ograniczenie Unique nie powiedzie się itp. Dlatego użyj następujących w sytuacji, gdy nadpisujesz niektóre wartości kolumn.
Tutaj wartość domeny jest dodawana przeze mnie w zakodowany sposób, aby pozbyć się ograniczenia Unique.
źródło
czy nie potrzebujesz double () dla wartości bit? jeśli nie, spróbuj tego (chociaż musi być lepszy sposób
źródło
INSERT INTO .. SELECT FROM
, nieINSERT INTO .. VALUES
. Inna funkcja.Więcej przykładów i szczegółów
źródło