dokumentáció mysql
LOAD DATA INFILE parancs beolvassa sorokat egy szöveges fájlt, és beilleszti a táblázatban egy nagyon nagy sebességgel. Ha megadja a local kulcsszóval. A fájl olvasható a kliens gépen. Ha a helyi nincs megadva, a fájl kell elhelyezni a szerveren. (Ez a lehetőség a helyi MySQL verzió 3.22.6 vagy újabb).
Ha a szöveges fájlt szeretne olvasni, a szerveren, biztonsági okokból, ezek a fájlok vagy meg kell tartózkodni az adatbázis könyvtárban, vagy olvasható legyen minden felhasználó. Ezen túlmenően, az alkalmazási parancs LOAD DATA INFILE a szerver fájlokat, meg kell adnunk a FILE jogosultsággal a szerver host. Lásd 4.2.7 kiváltságairól Szolgáltató MySQL.
A változat a MySQL 3.23.49 és MySQL 4.0.2 HELYI parancs nem fog működni, amennyiben a mysqld daemon indítása paraméterrel --local-infile = 0, vagy ha nem a képesség, hogy támogassa a helyi az ügyfél számára. Lásd 4.2.4 Biztonsági kérdések kapcsolatos parancs LOAD DATA LOCAL.
Ha meg a kulcsszót LOW_PRIORITY. a végrehajtás a LOAD DATA nyilatkozat késik, amíg nincs más ügyfelek olvasni a táblázatban.
Ha meg a kulcsszót CONCURRENT asztalokkal MyISAM. akkor más szálak letölteni az adatokat a táblázatba, LOAD DATA fut. Ezzel a szolgáltatással, természetesen lesz egy kis hatással futási betölteni az adatokat. akkor is, ha nincs más szál a táblázat segítségével egyidejűleg.
Meghatározott lehetőség HELYI lesz egy kicsit lassabb, mint hagyni, hogy a szerver hozzáférési fájlokat közvetlenül, mert a fájl tartalmát kell utazni a kliens gépen a szerver. Másrészt, ebben az esetben nincs szükség a FILE kiváltság betölteni helyi fájlokat.
Azokban az esetekben, ahol a fájlok a szerveren tárolódnak, az utóbbi működik a következő szabályok szerint:
- Ha egy abszolút (teljes) fájl elérési útvonalát, a kiszolgáló az elérési út, ahogy van.
- Ha relatív elérési utat, annak megjelölésével, egy vagy több, a kezdeti könyvtárat, a fájl kereső végzik tekintetében ezek a könyvtárak a szerver adatok jegyzéke (datadir).
- Ha a fájlnév megadása nélkül az eredeti könyvtárat, a szerver megkeresi a fájlt az adatbázist használják.
Ebből következik, hogy a fájl megadott „./myfile.txt”. olvasható a szerver adatait könyvtár, mivel a fájl megadott „myfile.txt”. olvasható a katalógusban adatbázist használják. Például a következő LOAD DATA nyilatkozat beolvassa a fájlt data.txt az adatbázis könyvtárat db1. mert db1 a jelenlegi adatbázis, bár a kijelentés kifejezetten betölti a fájlt egy adatbázis tábla DB2.
Kulcsszavak CSERE és IGNORE vezérlő kezelését bemeneti rekordok, amelyek megismétlik a meglévő nyilvántartást egyedi kulcs értékeket. Ha megadod CSERE. Az új vonal a régi helyére kerül az azonos egyedi kulcsot. Ha megad figyelmen kívül hagyni. A bemeneti vonalak, amelyek az azonos egyedi kulcsot, létező, kimarad. Ha nem adja meg az paraméterek kimutatására duplikált kulcs értékek, hiba történik, és a többi szöveges fájl figyelmen kívül hagyja.
Ha betölti az adatokat a helyi file local kulcsszóval. a szerver nem lesz képes megszakítani az adatok továbbítása a közepén a művelet, így az alapértelmezett viselkedés ugyanaz, mint abban az esetben, meghatározott figyelmen kívül hagyni.
Ha LOAD DATA INFILE üres MyISAM minden nem egyedi indexek jönnek létre egy külön tétel (mint a javítás). Általában jelentősen felgyorsítja LOAD DATA INFILE esetében nagyszámú indexek.
LOAD DATA INFILE nyilatkozat kiegészíti a kiválasztáshoz. INTO OUTFILE. Lásd 6.4.1 SELECT szintaxis. Írni az adatokat egy adatbázisból egy fájlba, a SELECT. INTO OUTFILE. Olvasni az adatokat vissza az adatbázisba, akkor LOAD DATA INFILE. Syntax mezők és vonalak azonos a két csapat. Mindkét rész opcionális, de ha mindkettő megadva, a mezők meg kell előznie vonalak.
Ha megad egy mezőt. Ezután minden egyes részkifejezésekre (leállítottuk. [adott] által bezárt. megszökött BY) is választható, de meg kell adnia legalább egy közülük.
Ha a mezők kikötés nincs megadva, az alapértelmezett értékek a következő értékeket:
Ha csíkok nyilatkozat nincs megadva, akkor alapértelmezés szerint az alábbi szerkezetet:
Más szóval, ha az alapértelmezett beállítások parancs LOAD DATA INFILE olvasásakor bemenet fog működni a következő:
- Keresés a sorok végén formájában karakterek „\ n”
- Szünet sort mezők lapok.
- Ne várják mezőket zárhatjuk bármilyen idézve karakter.
- Értelmezze előfordulásával lapon új sor, vagy „\”. előzi „\”. mint literálok, amelyek egy részét a terület értékeit.
Ezzel szemben, ha az alapértelmezett beállítások kimenetén adatrögzítés SELECT parancs. INTO OUTFILE a következőképpen jár el:
- Írja fülek közötti területen.
- Ne zárja területeken belül bármely idézve karakter. Használja a „\” menekülni példányait lapon új sor, vagy „\”. előfordult mező értékeket.
- Helyezze be az új sor karakterek végén minden rekord.
IGNORE számegyenesek opció lehet használni, hogy figyelmen kívül hagyja a fejléc oszlopneveknek elején a fájlt:
Ha a SELECT. INTO OUTFILE együtt LOAD DATA INFILE az adatokat az adatbázisból, hogy olvassa el a fájlt, majd - vissza a fájlt az adatbázisba, a lehetőségek terén és a vonal kezelése, mindkét csapat számára meg kell egyezniük. Ellenkező esetben, LOAD DATA INFILE nem fogja értelmezni a tartalmát a fájlt. Tegyük fel, hogy a SELECT utasításban. INTO OUTFILE használják írni egy fájlt mezőket vesszővel elválasztva:
Ahhoz, hogy olvassa el a fájlt vissza az adatbázisba vesszővel elválasztva, a helyes állítást a következő lenne:
Ha ehelyett megpróbálta olvasni a fájlt a nyilatkozatot alább látható, akkor nem fog működni, mert utasítja LOAD DATA INFILE parancsot kell keresni fülek közötti területeken:
Hasonló eredmény lenne, ha minden egyes bemeneti vonal értelmezni, mint egy külön mezőben.
Command LOAD DATA INFILE lehet használni a fájlok olvasásához külső forrásokból nyert. Például a mezőket dBASE formátumú fájl lesz vesszővel elválasztva és idézőjelek. Ha ez a fájl vonal megszűnik egy új sort, a rekord fájlt, akkor használja a következő parancsot, amely szemlélteti a feladat lehetőségek terén és a vonal kezelése:
Bármelyik lehetőséget, a feldolgozás területén és a sorok is meghatározhatnak egy üres string ( „”). Ha a string nem üres, akkor az érték a lehetőségek TERÜLETEK [adott] által körülzárt és mezők megmenekült tartalmaznia kell egy karaktert. Az opciók értéke TERÜLETEK leállítottuk és vonalak leállítottuk tartalmazhat több karaktert. Például, hogy írjon a sorokat, amelyek megszűnik pár „kocsi vissza - soremelés” (ahogyan a szövegben MS DOS vagy Windows fájlok), meg kell adnia a következő kifejezést: VONALAK leállítottuk „\ r \ n”.
Például, hogy olvassa el a „viccek” fájlt. amelyben az elkülönített sorok %%. egy SQL tábla, akkor a következőket kell tennie:
Kiválasztási mezők [adott esetben] által bezárt területeken használják, hogy szabályozza zárt előre meghatározott szimbólumokat. Ha elhagyjuk adott esetben a kimenet (SELECT. INTO OUTFILE) minden területen vannak zárva a megadott karaktereket a körülzárt. Egy példa az ilyen kimenettel (vesszővel határolójelként mező) az alábbiak szerint:
Ha megad adott. majd adja meg a körülzárt szimbólum kiosztott csak terén CHAR és VARCHAR.
Megjegyezzük, hogy a megjelenés által bezárt képességgel mezőértékként árnyékolt előtaggal őket megmenekült. Szintén fontos megjegyezni, hogy ha meg egy üres szökött érték szerint, lehetőség van a kimenetet generál, hogy a nyilatkozat LOAD DATA INFILE nem tud megfelelően olvasni. Például, ha az escape karakter üres, a kimenet fent látható lenne, mint alább látható. Megjegyezzük, hogy a második mezőben a negyedik sorban egy vesszőt követően az idézet, amely (tévesen) úgy tűnik, hogy megszünteti a területen:
Egy karakter beviteléhez körülvéve. ha jelen van, akkor lehúzzuk a végei a terület értékeit. (Ez igaz, függetlenül attól, hogy a megadott paramétert adott. Ha működik bemeneti adatok paraméter adott nem tartalmazza.) Események a körülzárt. előzi meg a karakter megmenekült. azt a rendszer nagysága a jelenlegi területen. Ezen túlmenően, a kettős jellegű körülvéve. belül előforduló mezők értelmezni, mint egy karakter által bezárt. Ha ezen a területen kezdődik, hogy a karakter. . Például, ha az Ön által megadott körbezárt „„”idézetek kezeli az alábbiak szerint:
Opció megadása megmenekült szabályozza, hogyan kell írni vagy olvasni a különleges karaktereket. Ha a mezők megszökött BY karakter nem üres, akkor előtagot a következő karaktereket kimenet:
- TERÜLET megmenekült karakter
- Symbol TERÜLETEK [adott] által közrezárt
- Az első karakter értékek TERÜLETEK leállítottuk és vonalak leállítottuk
- Symbol ASCII 0 (valóban írt követő escape karakter ASCII „0”. Ahelyett, hogy a nulla értékű byte)
Ha a mezők megszökött BY karakter üres, nincs karakterek megszökött. Tény, hogy egy üres escape karakter nincs értelme, különösen, ha a mező értéke az adatai tartalmaz karakter szerepel a fenti listán.
Ha a mezők megszökött BY karakter nem üres, ha a bemenő adatok megadása, hogy a karakter megfosztották, és a következő előfordulása, mint egy szimbólum szó szerint vett részeként egy mező értékét. Kivételek árnyékolt „0” vagy „N” (például \ 0 vagy \ N. Ha a escape karakter a „\”). Ezeket a szekvenciákat értelmezni ASCII 0 (nulla értékű byte) és NULL. Cm. Az alábbiakban a szabályokat NULL kezeléshez.
Ahhoz, hogy minél több információt a szintaxis az escape karaktert „\”, lásd 6.1.1 Literálok :. Szövegek és számok.
Bizonyos esetekben, a mező és a vonal kezelési lehetőségek kölcsönhatásba:
- Ha csíkok leállítottuk üres karakterláncot és mezők leállítottuk nem üres, sorok is megszűnik mezőkkel felmondhatja.
- Ha mindkét érték TERÜLETEK leállítottuk és mezők által közrezárt egyaránt üres ( „”), alkalmazzák a határozott sorban méret (nincs elválasztó). A formátum egy vezetékes, nincs határoló közötti területeken. Ehelyett, amikor az olvasás és írás értékeit használt oszlopok szélessége „” O „” oszlopok. Például, ha az oszlop nyilvánították INT (7). oszlop értékei vannak írva mező használatával, szélessége 7 szimbólumok. A bemeneti értékeket az oszlop olvasásával kapott 7 karakter. Rögzített sor formátum is befolyásolja kezelése NULL értékeket (cm. Alább). Figyeljük meg, hogy fix méretű méret nem fog működni, ha egy multi-karakterkészlet.
NULL értékeket a mezők és LINES lehetőségek kezelik eltérő módon:
- Az alapértelmezett értékek mezők és LINES NULL van írva, mint \ N kimeneti és \ N olvasható NULL bemeneti (feltételezve, hogy a jel megmenekült „\”).
- Ha a mezők által közrezárt nem üres, a mező, amelynek értéke a szó szó NULL. olvasni, mint egy NULL érték (ellentétben a szó NULL. között megkötött karakter TERÜLET körülzárt. leolvassuk a húr "NULL).
- Ha a mezők megmenekült üres, NULL van írva, mint a szó NULL.
- A formátum egy vezetékes (ami igaz, ha mindkét specifikátor - TERÜLETEK leállítottuk és mezők által közrezárt - üres), NULL van írva, mint az üres string. Vegye figyelembe, hogy mivel ez az érték NULL, és üres sort a táblázatban, hogy megkülönböztethetetlen lesz, ha a fájl írása, mivel azok mind felvett üres húrok. Ha azt szeretnénk, hogy elmondja a két egymástól, ha a fájl olvasása vissza, akkor ne használja a fix sor formátumban.
Egyes esetekben nem támogatja LOAD DATA INFILE.
- String egy fix méretű (mind opciók mezőkbe leállítottuk és mezők által közrezárt üres) oszlopok és típusa BLOB vagy TEXT.
- Ha megad egy elválasztó, azonos vagy egy másiknak előtagja, LOAD DATA INFILE nem lesz képes értelmezni a bemenetet. Például az alábbi területeken kikötés problémát okozna:
- Ha ez az opció TERÜLETEK megmenekült üres, a mezők szereplő szimbólum előfordulása értékmezők által körülzárt vagy vonalak felmondhatja. majd a karakter TERÜLET leállítottuk. vezet abba az olvasást egy mezőt vagy sort LOAD DATA INFILE parancsot. Ez akkor fordul elő, mert a LOAD DATA INFILE nem tud megfelelően határozzák meg, ahol a helyszínen vagy a sor vége.
Az alábbi példa betölti az összes oszlop persondata asztalra.
Nem mezőlista van megadva, így a parancs LOAD DATA INFILE elvárja bemeneti sort kitölteni minden oszlop a táblázatban. Ez használ a mezők és LINES értékek alapértelmezés szerint.
Ha szeretné letölteni csak néhány oszlop a táblázatban, akkor meg kell adni egy listát oszlopok:
A lista a mezőket kell adni abban az esetben, ha a mezők sorrendje eltér a oszlopok sorrendjének a bemeneti fájl a táblázatban. Ellenkező esetben, a MySQL nem tudja megmondani, hogy hogyan egyeztethetők beviteli mezők táblaoszlopok.
Ha egy sor túl kevés területen, az oszlopokat, amelyek nem beviteli mező van jelen vannak beállítva az alapértelmezett értékeket. Az alapértelmezett hozzárendelés változók szakaszban leírt szakaszban 6.5.3 CREATE TABLE szintaxis.
Egy üres mező értéke eltérően értelmezik, mint a hiánya egy értéket:
- Karaktersorozat típusú oszlop van beállítva, hogy az üres karakterlánc.
- Numerikus típusok, az oszlop beállítása 0.
- Dátumot és az időt, a típusú oszlop van beállítva, hogy a megfelelő ár-érték típusú „nulla”. Lásd 6.2.2 A típusú dátum és idő adatokat.
Megjegyzendő, hogy ezek ugyanazok értékek jelennek meg az oszlop eredményeként explicit hozzárendelése egy üres string string, numerikus vagy dátum és idő típusú INSERT vagy UPDATE.
Időbélyeg oszlopok csak beállítja az aktuális dátum és idő olyan esetekben, amikor az oszlop van rendelve egy NULL értéket, vagy (az első időbélyeg oszlopot esetén), ha az időbélyeg oszlop területén kívül listába, ha egy ilyen lista van megadva.
Ha egy bemeneti sor túl sok területen, az extra mezők figyelmen kívül hagyja, és a figyelmeztetések száma növekszik.
LOAD DATA INFILE parancsot értelmezi a bemenetet mint egy húr, így nem adja számértékek ENUM vagy SET oszlopok, valamint az INSERT parancs. Minden ENUM és SET értéket meg kell adni a húrok!
Ha a C API, akkor kap információt a lekérdezés hívja az API mysql_info () függvény végén LOAD DATA INFILE lekérdezés. Az alábbiakban azt az információt formátum string ebben az esetben:
Figyelmeztetés is ugyanolyan körülmények között, mint amikor értékek INSERT parancs (lásd 6.4.3 INSERT szintaxis), kivéve, hogy a parancs LOAD DATA INFILE további generál figyelmeztet, ha a bemeneti karakterlánc túl kevés vagy túl sok területen. A figyelmeztetések nem tárolja sehol; figyelmeztetések számát csak akkor lehet használni, hogy ellenőrizze, hogy az alkalmazás általában előírt intézkedéseket. Ha szeretné tudni, hogy pontosan miért figyelmeztetéseket, akkor végre egy SELECT parancs. INTO OUTFILE egy másik fájlba, és hasonlítsa össze ezt az eredeti bemeneti fájl - ez az egyetlen módja annak, hogy ezt az információt.
Ha szüksége van a terhelési adatokat olvasni egy cső, akkor a következő trükköt:
Amikor egy MySQL verzió régebbi, mint 3.23.25, a fenti lehet tenni csak a LOAD DATA LOCAL INFILE.
Ha részletesebb információra hatékonyságát INSERT versus LOAD DATA INFILE és felgyorsítja LOAD DATA INFILE. cm. partíciót részén 5.2.9 Speed INSERT lekérdezések.