13.2.10.1 SELECT .. . INTO-lause
SELECT ... INTO
-muoto SELECT
sallii kyselytulos, joka tallennetaan muuttujiin tai kirjoitetaan tiedostoon:
-
SELECT ... INTO
valitsee sarakearvot ja tallentaa ne muuttujiin.var_list
-
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
-vaihtoehdolle: var_list
-
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. (ValmistellussaSELECT ... INTO
-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” .)var_list
-
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 rivilleLIMIT 1
-toiminnolla.
INTO
voidaan myös käytetään var_list
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ä avainsanaINTO
.
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 "
-lomake kirjoittaa valitut rivit tiedostoon. Tiedosto luodaan palvelimen isännässä, joten sinulla on oltava file_name
"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 ..." >
tiedoston luomiseksi kyseiselle isännälle. file_name
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
jaLINES TERMINATED BY
arvot -
ASCII
NUL
(nollanarvoinen tavu; pakomerkin jälkeen kirjoitettu on ASCII0
, 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.
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.