2015-07-13 12 views
8

Doskonałym sposobem na powielenie wiersza w MySQL jest użycie składni INSERT INTO ... SELECT FROM.Czy możesz duplikować wiersz bez znajomości schematu w MySQL?

Na przykład:

INSERT INTO tblExample (col1, col2, col3) 
SELECT col1, col2, col3 FROM tblExample WHERE pkey = 1234; 

Jest to łatwe i proste, ale z punktu widzenia technicznego Kod ten jest jeszcze jedna wypowiedź, aby śledzić, czy są jakieś zmiany schematu. Załóżmy, że dodaję dodatkową kolumnę do tabeli tblExample, col4; teraz muszę pamiętać, aby wrócić i zaktualizować tę instrukcję SQL w moim kodzie. Jeśli tego nie zrobię, właśnie wprowadziłem błąd.

Czy istnieje prosty sposób kopiowania całego wiersza, niezależnie od schematu, z wyjątkiem klucza podstawowego?

+0

Prawdopodobnie można wydać zapytanie najpierw uzyskać schematu, a następnie dynamicznie budować wkładkę . –

+0

P.S. Zakładam, że zamierzałeś napisać 'INSERT INTO tblExample (col1, col2, col3)'? –

+0

Dzięki za wskazanie literówki. Naprawiony. – DOOManiac

Odpowiedz

0

nieco nieeleganckiego sposób:

CREATE TEMPORARY TABLE tmpTable ENGINE=MEMORY SELECT * FROM realTable WHERE pk = 'something'; 
UPDATE tmpTable SET pk = 'something else' ; 
INSERT INTO realTable SELECT * FROM tmpTable; 
+1

To dość dziwny wymóg. Powielanie wiersza jest ostatnią rzeczą, którą chciałbym zrobić w bazie danych. Relacja 1-n może być lepszą opcją. – RandomSeed

1

Bardzo przeciwko najlepszych praktyk można wykonać następujące czynności:

INSERT INTO myTable 
SELECT * FROM myTable WHERE thisField = "abcd" 
+0

działa tylko wtedy, gdy obie tabela ma ten sam schemat: –

+2

OP chce duplikować wiersz z tej samej tabeli - ale nie duplikuje klucza podstawowego. Twoja odpowiedź nie spełni twoich oczekiwań - to się nie powiedzie z powodu powielonego PK. – PaulF

+2

@PaulF, masz rację, nie widziałem ostatniej części o nie duplikowaniu klucza podstawowego. – Tingo

Powiązane problemy