Avatar billede tvilling53 Seniormester
09. november 2015 - 18:35 Der er 9 kommentarer og
1 løsning

Opret arbejdskopier af tabeller

Hej eksperter.
Jeg har brug for at oprette en arbejdskopi af databasetabel. Det kan gøres ved at bruge SELECT * FROM tabel1 WHERE id =X og så INSERT INTO tabel2.
Min søgen efter en mere simpel måde at gøre det på fandt jeg på W3Schools følgende metode:

SELECT * INTO CustomersBackup2013 FROM Customers;

Jeg har prøvet alt fra () og [] til punktummer, apostroffer men kan ikke få det til at oprette og kopiere tabellen.

Hvad har jeg overset og/eller gjort forkert???

Thomas V
Avatar billede arne_v Ekspert
09. november 2015 - 18:56 #1
Den mest gaengse syntax for det er mig bekendt:

INSERT INTO nytabel SELECT * FROM gltabel
Avatar billede j4k0b Nybegynder
09. november 2015 - 20:35 #2
Er det ikke noget der kan løses med en transaktion? Hvis to processor skal redigere i tabellen på samme tid kan du komme til at stå med nogle realtidsproblematikker, som databaseserveren ellers kunne håndtere for dig.
Avatar billede arne_v Ekspert
09. november 2015 - 20:44 #3
det vil nok vaere smart at lave den kopi mens der ingen brugere er hvis man vil have garanteret konsistente data
Avatar billede j4k0b Nybegynder
09. november 2015 - 21:13 #4
Ja det er nødvendigt. Men uden at kende hans system kan jeg ikke se hvorfor en transaktion ikke skulle være tilstrækkeligt :)
Avatar billede arne_v Ekspert
09. november 2015 - 21:26 #5
Det er det. Men hvis han bruger MySQL med MyISAM tabeller saa kan han ikke bruge transaktion. Og hvis han bruger transaktion til saa stor en operation mens der er brugere paa systemet, saa vil det kunne genere de brugere. For mig lyder det mest som en goer under maanedlig vedligeholdelses nedlukning ting.
Avatar billede arne_v Ekspert
09. november 2015 - 21:26 #6
Det er det *med* et passende isolation level.
Avatar billede tvilling53 Seniormester
10. november 2015 - 11:20 #7
Hej arne_v

$mysqli = mysqli_connect($server, $brugernavn, $kode, $data1);
    /* Tjek, om der opstod en fejl */
if (!$mysqli){die("connektion failed:". mysqli_connect_error());}
  else { echo '<br>Forbindelsen er oprettet : <br/>';}

INSERT INTO nytabel SELECT * FROM gltabel

giver denne medelelse


Syntax error
unexpected:    identifier 'INTO'
after:    identifier 'INSERT'

Det er ligesom om at der mangler noget "indpakning" af en eller anden slags

Thomas V
Avatar billede arne_v Ekspert
10. november 2015 - 14:40 #8
Ja - det er jo en SQL saetning og skal udfoeres som en saadan.
Avatar billede tvilling53 Seniormester
10. november 2015 - 15:46 #9
Hej arne_v

if($stmt=$mysqli->prepare('INSERT INTO workdb SELECT * FROM budget'))
        { if($stmt->execute())
              {
                $stmt->close();     
              }
            else
              {
                die($stmt->error);
              }
        }
        else
        {
        die($mysqli->error);
        }
Dette blev løsningen så smid et svar så du kan få dine point.

Thomas V
Avatar billede arne_v Ekspert
10. november 2015 - 16:44 #10
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester