MySQL :: MySQL 8.0 kézikönyv :: 13.2.10.1 SELECT … INTO utasítás

13.2.10.1 SELECT .. . INTO utasítás

A SELECT ... INTO SELECT forma engedélyezi a változókban tárolandó vagy fájlba írt lekérdezés eredménye:

  • SELECT ... INTO var_list kiválasztja az oszlopértékeket és változókba tárolja őket.

  • iv SELECT ... INTO OUTFILE a kiválasztott sorokat fájlba írja. Az oszlop- és sorterminálók megadhatók egy adott kimeneti formátum előállításához.

  • SELECT ... INTO DUMPFILE egyetlen sort ír egy fájlba formázás nélkül.

Egy adott SELECT utasítás legfeljebb egy INTO záradékot tartalmazhat, bár ezt a szintaxis leírása (lásd: 13.2.10. Szakasz,” SELECT utasítás “), a INTO különböző pozíciókban jelenhet meg:

  • A FROM előtt. Példa:

  • A záró záradék előtt. Példa:

  • A SELECT. Példa:

A pozíció a MySQL 8.0.20-tól kezdve támogatott, és ez az előnyben részesített pozíció. A zárolási záradék előtti pozíció a MySQL 8.0.20-tól kezdődően megszűnik; elvárható, hogy a támogatás eltávolításra kerüljön af a MySQL uture verziója. Más szóval, INTO a FROM után, de a SELECT végén nem Figyelem.

A INTO záradékot nem szabad beágyazott SELECT beilleszteni, mert egy ilyen SELECT -nek vissza kell adnia eredményét a külső kontextusba. A INTO használatára is vannak korlátozások a UNION utasításokban; lásd: 13.2.10.3. szakasz, “UNION klauzula”.

A INTO var_list variánshoz:

  • var_list megnevez egy vagy több változó listáját, amelyek mindegyike lehet egy felhasználó által definiált változó, tárolt eljárás vagy függvényparaméter , vagy tárolt program helyi változója. (Az előkészített SELECT ... INTO var_list utasításon belül csak a felhasználó által definiált változók engedélyezettek; lásd: 13.6.4.2. szakasz – “Helyi változó hatóköre és felbontása” .)

  • A kiválasztott értékeket a változókhoz rendeljük. A változók számának meg kell egyeznie az oszlopok számával. A lekérdezésnek egyetlen sort kell visszaadnia. Ha a lekérdezés nem ad sorokat, akkor egy figyelmeztetés jelenik meg az 1329 hibakóddal (No data), és a változó értékei változatlanok maradnak. Ha a lekérdezés több sort ad vissza, akkor az 1172 hiba lép fel (Result consisted of more than one row). Ha lehetséges, hogy az utasítás több sort is lekérhet, akkor a LIMIT 1 paranccsal korlátozhatja a beállított eredményt egyetlen sorra.

INTO var_list is lehet TABLE utasítással használható, a következő korlátozásoktól függően:

  • A a változóknak meg kell egyezniük a táblázat oszlopainak számával.

  • Ha a táblázat egynél több sort tartalmaz, akkor a LIMIT 1 paranccsal korlátozhatja az eredményeket egyetlen sorra. A LIMIT 1 -nek meg kell előznie a INTO kulcsszót.

Példa egy ilyen állítás itt látható:

Értékeket is kiválaszthat egy VALUES utasításból, amely egy egyetlen sor a felhasználói változók halmazába. Ebben az esetben egy tábla álnevet kell alkalmaznia, és az értéklista minden értékét hozzá kell rendelnie egy változóhoz. Az itt bemutatott két állítás mindegyike egyenértékű a következővel: SET @x=2, @y=4, @z=8:

A felhasználói változók neve nem különbözteti meg a kis- és nagybetűket . Lásd: 9.4. Szakasz – “Felhasználó által definiált változók”.

A SELECT SELECT ... INTO OUTFILE "file_name " forma fájlba írja a kijelölt sorokat. A fájl a kiszolgálón található, így a szintaxis használatához FILE jogosultsággal kell rendelkeznie. A file_name nem lehet létező fájl, ami többek között megakadályozza az olyan fájlok módosítását, mint az /etc/passwd és az adatbázis-táblák. A character_set_filesystem rendszerváltozó vezérli a fájlnév értelmezését.

A SELECT ... INTO OUTFILE utasítás célja, hogy lehetővé tegye a tábla szöveges fájlba történő átvetését a szerver gazdagépén.A kapott fájl más gazdagépen történő létrehozásához a SELECT ... INTO OUTFILE általában alkalmatlan, mert a kiszolgáló gazdagép fájlrendszeréhez képest nem lehet útvonalat írni a fájlhoz, kivéve, ha a fájl helye a távoli állomáson található fájlhoz a kiszolgáló gazdagép fájlrendszerének hálózaton feltérképezett elérési útján lehet hozzáférni.

Alternatív megoldásként, ha a MySQL kliens szoftver telepítve van a távoli gazdagépre, használhat egy kliens parancsot, például mysql -e "SELECT ..." > file_name fájl létrehozásához az adott gazdagépen.

SELECT ... INTO OUTFILE a LOAD DATA kiegészítése. Az oszlopértékeket a CHARACTER SET záradékban megadott karakterkészletre konvertálva írjuk. Ha nincs ilyen záradék, akkor az értékeket a binary karakterkészlet segítségével vesszük ki. Valójában nincs karakterkészlet-átalakítás. Ha egy eredménykészlet több karakterkészletben tartalmaz oszlopokat, akkor a kimeneti adatfájl is, és előfordulhat, hogy a fájl újratöltése nem lehetséges.

A utasítás export_options részének szintaxisa ugyanabból a FIELDS és LINES záradékok, amelyeket a LOAD DATA utasítással együtt használnak. A FIELDS és a LINES záradékokról, beleértve az alapértelmezett és megengedett értékeket is, lásd a 13.2.7. Szakaszt: “TÖLTÉSI ADATOK Nyilatkozat” .

FIELDS ESCAPED BY vezérli a speciális karakterek írását. Ha az FIELDS ESCAPED BY karakter nem üres, akkor szükséges a kétértelműség elkerüléséhez, amely a kimeneten a következő karaktereket megelőzi:

  • A FIELDS ESCAPED BY karakter

  • A FIELDS ENCLOSED BY karakter

  • A karakter első karaktere FIELDS TERMINATED BY és LINES TERMINATED BY értékek

  • ASCII NUL (a nulla értékű bájt; amit a escape karakter után írunk, az ASCII 0, nem nulla értékű bájt)

A FIELDS TERMINATED BY, ENCLOSED BY, ESCAPED BY , vagy a LINES TERMINATED BY karaktereket el kell kerülni, hogy megbízhatóan olvashassa vissza a fájlt. Az ASCII NUL elkerülve van, hogy megkönnyítse néhány lapozóval való megtekintést.

A kapott fájlnak nem kell megfelelnie az SQL szintaxisának, ezért semmi mást nem kell elkerülni.

Ha a FIELDS ESCAPED BY karakter üres, akkor egyetlen karakter sem kerül elhagyásra, és a NULL , nem \N. Valószínűleg nem jó egy üres menekülési karakter megadása, különösen, ha az adatok mezőértékei az imént megadott listában szereplő bármelyik karaktert tartalmazzák.

INTO OUTFILE egy TABLE utasítással is használható, ha egy tábla összes oszlopát egy szöveges fájl. Ebben az esetben a sorok sorrendjét és számát a ORDER BY és a LIMIT segítségével szabályozhatjuk; ezeknek a záradékoknak meg kell előzniük a INTO OUTFILE -et. A TABLE ... INTO OUTFILE ugyanazt a export_options -t támogatja, mint a SELECT ... INTO OUTFILE -t, és ugyanazok a korlátozások vonatkoznak rá az iratrendszerbe történő írásról. Itt látható egy példa egy ilyen állításra:

Használhatja a SELECT ... INTO OUTFILE -t is egy VALUES utasítással az íráshoz. értékeket közvetlenül egy fájlba. Itt látható egy példa:

Táblázat aliast kell használnia; Az oszlopnevek szintén támogatottak, és opcionálisan csak a kívánt oszlopokból írhatnak értékeket. Használhatja a SELECT ... INTO OUTFILE által támogatott exportálási lehetőségek bármelyikét vagy mindegyikét a kimenet fájlba formázásához.

Íme egy példa, amely vesszővel elválasztott értékek (CSV) formátumban állítja elő a fájlt, amelyet sok program használ:

Ha INTO DUMPFILE a INTO OUTFILE helyett a MySQL csak egy sort ír be a fájlba, oszlopok vagy sorok lezárása nélkül, és semmilyen menekülési folyamat végrehajtása nélkül. Ez hasznos egy BLOB érték kiválasztásához és fájlba történő tárolásához.

Megjegyzés

Bármely fájl, amelyet INTO OUTFILE vagy INTO DUMPFILE annak az operációs rendszernek a tulajdonosa, akinek a fiókja alatt a mysqld fut. (Soha ne futtassa a mysqld fájlt root néven emiatt és egyéb okokból.) A MySQL 8.0.17 verziójától kezdve a fájl létrehozásának umaskja 0640; elegendő hozzáférési jogosultsággal kell rendelkeznie a fájl tartalmának kezeléséhez. A MySQL 8.0.17 előtt az umask 0666, és a fájlt a szerver gazdagépének minden felhasználója írhatja.

Ha a secure_file_priv rendszerváltozó nem üres könyvtárnévre van állítva, akkor az írandó fájlnak abban a könyvtárban kell lennie.

Az Eseményütemező által végrehajtott események részeként előforduló SELECT ... INTO utasítások összefüggésében diagnosztikai üzeneteket (nemcsak hibákat, hanem figyelmeztetéseket is) írnak a hibanaplóba , Windows rendszeren pedig az alkalmazás eseménynaplójába. További információkért lásd: 25.4.5. Szakasz, “Eseményütemező állapota”.

A MySQL 8.0.22 verziótól kezdve támogatást nyújt a SELECT INTO OUTFILE és SELECT INTO DUMPFILE, engedélyezve az adott verzióban bevezetett select_into_disk_sync kiszolgáló rendszerváltozó beállításával. A kimeneti puffer mérete és opcionális késleltetése beállítása select_into_buffer_size és select_into_disk_sync_delay használatával. További információért tekintse meg ezen rendszerváltozók leírását.

Write a Comment

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük