MySQL :: MySQL 8.0 -käyttöopas :: 13.2.10.1 SELECT … INTO-lause

13.2.10.1 SELECT .. . INTO-lause

SELECT ... INTO -muoto SELECT sallii kyselytulos, joka tallennetaan muuttujiin tai kirjoitetaan tiedostoon:

  • SELECT ... INTO var_list valitsee sarakearvot ja tallentaa ne muuttujiin.

  • iv SELECT ... INTO OUTFILE kirjoittaa valitut rivit tiedostoon. Sarake- ja viivaterminaalit voidaan määrittää tuottamaan tietty lähtöformaatti.

  • iv SELECT ... INTO DUMPFILE kirjoittaa tiedostoon yhden rivin ilman muotoilua.

Annettu SELECT -lauseke voi sisältää korkeintaan yhden lausekkeen INTO, vaikka syntaksikuvaus (katso osio 13.2.10,” SELECT-lause ”), INTO voi näkyä eri paikoissa:

  • Ennen FROM. Esimerkki:

  • Ennen viimeistä lukituslauseketta. Esimerkki:

  • SELECT. Esimerkki:

INTO -kohtaa lausekkeen lopussa tuetaan MySQL 8.0.20 -versiosta lähtien, ja se on ensisijainen sijainti. Lukituslausekkeen edellinen sijainti poistetaan käytöstä MySQL 8.0.20 -versiosta lähtien; odota, että tuki poistetaan af MySQL: n uture-versio. Toisin sanoen INTO FROM jälkeen, mutta ei SELECT -kohdan lopussa tuottaa Varoitus.

INTO -lauseketta ei tule käyttää sisäkkäisissä SELECT -lausekkeissa, koska tällainen SELECT on palautettava tulos ulkoiseen kontekstiin. INTO: n käyttöä UNION -lausekkeissa on myös rajoituksia; katso kohta 13.2.10.3, ”UNION-lauseke”.

INTO var_list -vaihtoehdolle:

  • iv var_list nimeää luettelon yhdestä tai useammasta muuttujasta, joista kukin voi olla käyttäjän määrittelemä muuttuja, tallennettu toiminto tai toimintoparametri tai tallennettu ohjelman paikallinen muuttuja. (Valmistellussa SELECT ... INTO var_list -käskyssä vain käyttäjän määrittämät muuttujat ovat sallittuja; katso kohta 13.6.4.2, ”Paikallisen muuttujan laajuus ja tarkkuus” .)

  • Valitut arvot määritetään muuttujille. Muuttujien lukumäärän on vastattava sarakkeiden määrää. Kyselyn pitäisi palauttaa yksi rivi. Jos kysely ei palauta rivejä, tapahtuu varoitus virhekoodilla 1329 (No data), ja muuttujan arvot pysyvät muuttumattomina. Jos kysely palauttaa useita rivejä, tapahtuu virhe 1172 (Result consisted of more than one row). Jos käsky voi noutaa useita rivejä, voit rajoittaa tulosjoukon yhdelle riville LIMIT 1 -toiminnolla.

INTO var_list voidaan myös käytetään TABLE -lausekkeen kanssa seuraavien rajoitusten mukaisesti:

  • muuttujien on vastattava taulukon sarakkeiden määrää.

  • Jos taulukossa on enemmän kuin yksi rivi, sinun on käytettävä LIMIT 1 -toimintoa rajoittaaksesi tulosjoukkoa yhdelle riville. LIMIT 1 on edeltävä avainsana INTO.

Esimerkki Tällaisen lauseen lause näkyy tässä:

Voit myös valita arvoja lausekkeesta VALUES yksi rivi käyttäjän muuttujien joukkoon. Tässä tapauksessa sinun on käytettävä taulukon aliasta ja määritettävä kukin arvo arvoluettelosta muuttujalle. Kukin tässä näytetyistä lauseista vastaa SET @x=2, @y=4, @z=8:

Käyttäjämuuttujien nimissä ei erotella isoja ja pieniä kirjaimia. . Katso kohta 9.4, ”Käyttäjän määrittelemät muuttujat”.

SELECT SELECT ... INTO OUTFILE "file_name " -lomake kirjoittaa valitut rivit tiedostoon. Tiedosto luodaan palvelimen isännässä, joten sinulla on oltava FILE -oikeus tämän syntaksin käyttämiseen. file_name ei voi olla olemassa oleva tiedosto, mikä muun muassa estää tiedostojen, kuten /etc/passwd, ja tietokantataulukoiden muokkaamisen. Järjestelmämuuttuja character_set_filesystem ohjaa tiedostonimen tulkintaa.

SELECT ... INTO OUTFILE -lausekkeen tarkoituksena on sallia taulukon kaataminen palvelintiedoston tekstitiedostoon.Tuloksena olevan tiedoston luominen jollekin muulle isännälle SELECT ... INTO OUTFILE ei yleensä sovellu, koska tiedostoon ei voida kirjoittaa polkua palvelimen isäntätiedostojärjestelmään nähden, paitsi jos etäkoneen tiedostoon pääsee käyttämällä palvelimen isäntätiedostojärjestelmän verkkokartoitettua polkua.

Jos MySQL-asiakasohjelma on asennettu etäisäntään, voit vaihtoehtoisesti käyttää asiakaskomentoa, kuten mysql -e "SELECT ..." > file_name tiedoston luomiseksi kyseiselle isännälle.

SELECT ... INTO OUTFILE on komennon LOAD DATA täydennysosa. Sarake-arvot kirjoitetaan muunnettuna CHARACTER SET -lausekkeessa määritettyyn merkistöön. Jos tällaista lauseketta ei ole, arvot tyhjennetään käyttämällä merkistöä binary. Itse asiassa merkistöjoukon muunnosta ei ole. Jos tulosjoukko sisältää sarakkeita useissa merkistöissä, niin on myös lähtötiedosto, eikä tiedostoa voi olla mahdollista ladata uudelleen oikein.

Lausekkeen export_options osan syntaksi koostuu samoista FIELDS ja LINES lausekkeita, joita käytetään LOAD DATA -lausekkeen kanssa. Lisätietoja lausekkeista FIELDS ja LINES, mukaan lukien niiden oletusarvot ja sallitut arvot, on kohdassa 13.2.7, ”LATAA TIEDOT -lauseke” .

FIELDS ESCAPED BY ohjaa erikoismerkkien kirjoittamista. Jos FIELDS ESCAPED BY -merkki ei ole tyhjä, sitä käytetään, kun välttää epäselvyys etuliitteenä, joka edeltää seuraavia merkkejä tulostuksessa:

  • FIELDS ESCAPED BY merkki

  • FIELDS ENCLOSED BY -merkki

  • Merkin ensimmäinen merkki FIELDS TERMINATED BY ja LINES TERMINATED BY arvot

  • ASCII NUL (nollanarvoinen tavu; pakomerkin jälkeen kirjoitettu on ASCII 0, ei nolla-arvoinen tavu)

FIELDS TERMINATED BY, ENCLOSED BY, ESCAPED BY tai LINES TERMINATED BY -merkkejä on vältettävä, jotta voit lukea tiedoston takaisin luotettavasti. ASCII NUL vältetään helpottamaan katselua joillakin hakulaitteilla.

Tuloksena olevan tiedoston ei tarvitse olla SQL-syntaksin mukaista, joten mitään muuta ei tarvitse välttää.

Jos FIELDS ESCAPED BY -merkki on tyhjä, mitään merkkejä ei poisteta ja NULL tulostetaan muodossa NULL, ei \N. Tyhjän pakomerkin määrittäminen ei todennäköisesti ole hyvä asia, varsinkin jos tietojesi kenttäarvot sisältävät mitä tahansa juuri annetun luettelon merkkejä.

INTO OUTFILE voidaan käyttää myös TABLE -lausekkeen kanssa, kun haluat kaataa kaikki taulukon sarakkeet tekstitiedosto. Tällöin rivien järjestystä ja määrää voidaan hallita käyttämällä ORDER BY ja LIMIT; näiden lausekkeiden on edeltävä INTO OUTFILE. TABLE ... INTO OUTFILE tukee samaa export_options kuin SELECT ... INTO OUTFILE, ja siihen sovelletaan samoja rajoituksia kirjoitettaessa tiedostojärjestelmään. Tässä on esimerkki tällaisesta lausekkeesta:

Voit myös kirjoittaa SELECT ... INTO OUTFILE kirjoittamalla VALUES -lausekkeen arvot suoraan tiedostoon. Tässä on esimerkki:

Sinun on käytettävä taulukon aliasta; Sarake-aliakset ovat myös tuettuja, ja niitä voidaan valinnaisesti käyttää arvojen kirjoittamiseen vain haluttuista sarakkeista. Voit myös muotoilla lähdön tiedostoon mitä tahansa tai kaikkia SELECT ... INTO OUTFILE: n tukemia vientiasetuksia.

Tässä on esimerkki, joka tuottaa tiedoston pilkuilla erotettujen arvojen (CSV) muodossa, jota monet ohjelmat käyttävät:

Jos käytät INTO DUMPFILE INTO OUTFILE -kohdan sijaan, MySQL kirjoittaa tiedostoon vain yhden rivin ilman saraketta tai rivin lopettamista ja suorittamatta poistumisprosessia. Tästä on hyötyä BLOB -arvon valitsemiseen ja tallentamiseen tiedostoon.

Huomautus

Kaikki INTO OUTFILE tai INTO DUMPFILE omistaa käyttöjärjestelmän käyttäjä, jonka tilillä mysqld toimii. (Älä koskaan käytä mysqldiä nimellä root tästä ja muista syistä.) MySQL 8.0.17: stä lähtien tiedoston luomisen umask on 0640; Sinulla on oltava riittävät käyttöoikeudet tiedoston sisällön käsittelyyn. Ennen MySQL 8.0.17: ää umask on 0666 ja tiedosto on kaikkien palvelimen isännän käyttäjien kirjoittama.

Jos secure_file_priv -järjestelmämuuttuja on asetettu hakemiston nimeksi, joka ei ole tyhjä, kirjoitettavan tiedoston on sijaittava kyseisessä hakemistossa.

Tapahtumasuunnittelijan suorittamien tapahtumien yhteydessä esiintyvien SELECT ... INTO -lausekkeiden yhteydessä diagnostiikkaviestit (paitsi virheet, myös varoitukset) kirjoitetaan virhelokiin ja Windowsissa sovelluksen tapahtumalokiin. Lisätietoja on kohdassa Kohta 25.4.5, ”Tapahtumien ajoitustila”.

MySQL 8.0.22: sta alkaen tuki on SELECT INTO OUTFILE ja SELECT INTO DUMPFILE, otetaan käyttöön asettamalla kyseisessä versiossa käyttöön otettu palvelinjärjestelmän muuttuja select_into_disk_sync. Lähtöpuskurin koko ja valinnainen viive voidaan määrittää aseta vastaavasti select_into_buffer_size ja select_into_disk_sync_delay. Katso lisätietoja näiden järjestelmämuuttujien kuvauksista.

Write a Comment

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *