Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu
Load Data Infile "File_name.txt" do tabeli TBL_name [dołączony przez ""]] [(nazwa Col_name, ...)]

Polecenie Informacyjne Dane Load odczytuje linie z pliku tekstowego i wstawia je do stołu z bardzo dużą prędkością. Jeśli określono słowo kluczowe, plik jest odczytywany z hosta klienta. Jeśli lokalny nie jest określony, plik musi znajdować się na serwerze. (Lokalna opcja jest dostępna w wersji MySQL 3.22.6 i nowszej później.)

Jeśli pliki tekstowe, które chcesz odczytać, znajdują się na serwerze, a następnie ze względów bezpieczeństwa, pliki te muszą być umieszczone w katalogu bazy danych lub przeczytaj wszystkim użytkownikom. Ponadto, aby zastosować dowództwo danych o ładunku do plików serwera, należy mieć uprawnienia do plików dla hosta serwera. Patrz rozdział 4.2.7 Przywileje dostarczone przez MySQL.

W wersjach MySQL 3.23.49 i MySQL 4.0.2, polecenie lokalne nie będzie działać w przypadkach, jeśli demon MySQLD jest uruchomiony z parametrem MySQLD lub jeśli klient nie umożliwia obsługę lokalnego. Patrz rozdział 4.2.4 Problemy bezpieczeństwa związane z poleceniem LOAD LOCK LOCK.

Jeśli określono słowo kluczowe Low_priority, wykonanie tego polecenia danych obciążenia zostanie zatrzymany do momentu zatrzymania innych klientów odczytując tę \u200b\u200btabelę.

Jeśli podano współbieżne słowo kluczowe podczas pracy z tabelami Myisam, inne wątki mogą pobierać dane z tabeli podczas polecenia Data Load. Wykorzystanie tej funkcji jest oczywiście nieznacznie pod wpływem wydajności danych obciążenia, nawet jeśli żaden inny wątek używa tej tabeli w tym samym czasie.

Podczas korzystania z lokalnej opcji wykonanie może wystąpić nieznacznie wolniej w porównaniu z bezpośrednio dostarczaniem serwera dostępu do plików, ponieważ zawartość pliku powinna przejść od hosta klienta na serwerze. Z drugiej strony w tym przypadku nie ma potrzeby przywilejów plików do pobrania plików lokalnych.

Podczas korzystania z wersji MySQL do 3.23.24 Korzystanie z dowodu Data Infi Command nie można odczytać z FIFO. Jeśli musisz odczytać z FIFO (na przykład standardową wyjście gunzip), należy użyć lokalnych danych ładunkowych.

Możesz także przesłać pliki danych za pomocą narzędzia MySQlimport. To narzędzie pobieranie plików wysyłając do serwera poleceń Data Load Data. Opcja --Lokalna sprawia, że \u200b\u200bMySQlimport odczytuje pliki danych firmy klienta. Możesz określić - ProCompress Parametr, aby uzyskać lepszą wydajność podczas pracy poprzez wolne sieci, jeśli klient i serwer obsługują protokół kompresji danych.

W przypadkach, gdy pliki znajdują się na serwerze, drugi działa zgodnie z następującymi zasadami:

  • Jeśli określono ścieżkę absolutnej (pełnej) do pliku, serwer wykorzystuje tę ścieżkę niezmienioną.
  • Jeśli względna ścieżka do pliku jest określona za pomocą jednego lub więcej początkowych katalogów, w którym wyszukiwanie plików zostanie zaimplementowane w stosunku do określonych katalogów w katalogu danych Datadir.
  • Jeśli ścieżka jest podawana do pliku bez określania początkowego katalogów, serwer wyszukuje tego pliku w katalogu używanym bazy danych.

Wynika z tego, że plik określony jako `./myfile.txt" jest odczytywany z katalogu serwera, podczas gdy plik określony jako `myFile.txt," jest odczytywany z katalogu używanego bazy danych. Na przykład, następujące dane dowodu polecenia odczytuje plik Data.txt w katalogu bazy danych dla DB1, ponieważ DB1 jest bieżącą bazą danych, nawet jeśli ten polecenie wyraźnie zawiera notatkę do pobrania pliku do tabeli bazy danych DB2:

MySQL\u003e Używaj DB1; MySQL\u003e Załaduj dane "Data.txt" do tabeli DB2.MY_Table;

Słowa kluczowe Wymień i ignoruj \u200b\u200bkontrolę Przetwarzanie zapisów wejściowych, które duplikuje istniejące rekordy o tych samych wartościach unikalnych kluczy. Jeśli określisz wymień, nowe linie zastąpi istniejące z tym samym unikalnym kluczem. Jeśli określisz ignoruj, linie wejściowe mające ten sam unikalny klucz, co istnieje, zostanie pomijane. Jeśli żaden z parametrów nie zostanie określony, wtedy, gdy zostanie wykryta zduplikowaną wartość klucza, wystąpi błąd i pozostała część pliku tekstowego jest ignorowana.

Jeśli dane są ładowane z lokalnego pliku za pomocą słowa kluczowego lokalnego, serwer nie będzie w stanie przerwać transferu danych w środku tej operacji, więc domyślnie wykonywanie polecenia występuje tak samo jak w przypadku jest oznaczony ignorowany.

Podczas korzystania z niepełnosprawnych danych Load Data na puste tabele Myisam, wszystkie nie-unikalne indeksy są tworzone w oddzielnym pakiecie (jak w naprawie). Zwykle znacznie przyspiesza pracę danych ładunkowych w przypadku dużej liczby indeksów.

Polecenie Infile Data Load jest opcjonalne, aby wybrać ... do Outfile. Patrz rozdział 6.4.1 Wybierz składnię operatora. Aby nagrywać dane z bazy danych do pliku, wybierz ... Do outfile jest używany. Aby odczytać dane z powrotem do bazy danych, używany jest zainfekowany Dane ładunkowe. Pola składniowe i linie są takie same w obu drużynach. Obie części są opcjonalne, ale jeśli oba są określone, pola powinny poprzedzać linie.

Jeśli określone są pola, każda z jego subjoints (zakończona przez zamknięta przez i uciekła) jest również opcjonalna, ale konieczne jest określenie co najmniej jednego z nich.

Jeśli instrukcja pól nie zostanie zdefiniowana, domyślnie jego parametry otrzymają następujące wartości:

Pola zakończone przez "T" dołączony przez "" uciekł przez "\\\\"

Jeśli instrukcja linii nie jest zdefiniowana, domyślnie ma następującą strukturę:

Linie zakończone przez "n"

Innymi słowy, gdy instalacje domyślne, Dane ładunkowe Postępowanie przyczynione podczas odczytu danych wejściowych będą działać w następujący sposób:

  • Wyszukaj końce wierszy w formie symboli `n"
  • Przesuń wiersze do pól za pomocą symboli zakładek.
  • Nie oczekuj, że pola można dołączać w symbolach cytowania.
  • Interpretuj napotkane karty, nowy ciąg lub `", przedstawiony ", jako literały, które są częścią wartości pola.

A, wręcz przeciwnie, jeśli ustawienia domyślne są poprawne podczas nagrywania wyjścia, polecenie SELECT ... na zewnątrz będzie działać w następujący sposób:

  • Włóż karty między polami.
  • Nie wchodź do pól w symbolach cytowania. Użyj symboli `", aby osłonić instancje zakładek, nowego ciągu lub `", który pojawia się wśród pola pola.
  • Włóż symbole nowego ciągu na końcu każdego rekordu.

Należy pamiętać, że w wejściu pola uciekły przede wszystkim, trzeba określić dwa przerwy odwrotne dla wartości, która powinna być odczytywana jako jeden bandlash.

Opcja Linie Numer Ignoruj \u200b\u200bmożna użyć do ignorowania nagłówka nazwy kolumny na początku pliku:

MySQL\u003e Załaduj Dane Infile "/ TMP / File_name" w teście tabeli Ignoruj \u200b\u200b1 linie;

Podczas korzystania z wybranego ... do outFile razem z Dane ładunkowe Pieplepnie się, aby dane z bazy danych jest odczytane do pliku, a następnie z powrotem z pliku do bazy danych, opcje, które przetwarzają pola i linie muszą być zbiegłe dla obu poleceń. W przeciwnym razie załaduj dane niepełnosprawne, nie będą mogli interpretować zawartości tego pliku poprawnie. Załóżmy, że polecenie Wybierz ... Ino Outfile jest używane do zapisu do pliku z polami oddzielonymi przecinkami:

MySQL\u003e Wybierz * W OutFile "Data.txt" Pola zakończone przez "," z ...;

MySQL\u003e Dane ładowania Infile "Data.txt" w tabeli Tabela2 Pola zakończone przez ",";

MySQL\u003e Dane ładowania Infile "Data.txt" w tabeli tabeli2 końcówki zakończone przez "T";

Podobny wynik wystąpiłby, jeśli każda linia wejściowa była interpretowana jako osobna pole.

Ładowanie Data Inspidenci można również użyć do odczytywania plików uzyskanych z źródeł zewnętrznych. Na przykład pola w pliku formatu bazy danych DBASE zostaną oddzielone przecinkami i zamkniętymi w podwójnych cytatach. Jeśli linie w tym pliku kończą się symbolami nowej linii, a następnie nagrać plik, można użyć następującego polecenia, w którym ustawienie opcji, pola przetwarzania i linii ilustrują:

MySQL\u003e Load Data Infile "Data.txt" w tabeli TBL_name pola zakończone przez "," Zamknięte przez "" "linie zakończone przez" n ";

Każda z pól przetwarzania opcji i ciągów może ustawić pusty ciąg (""). Jeśli ciąg nie jest pusty, opcje pola zamknięte przez i pola uciekły przez muszą zawierać jeden znak. Wartości pola zakończonych opcjami i liniami zakończonymi przez mogą zawierać więcej niż jeden znak. Na przykład, aby nagrywać rzędy kończące się parami `` powrotu wagonu - tłumaczenie linii "" (jak w plikach MS DOS lub pliki tekstowe systemu Windows), należy określić następującą ekspresję: linie zakończone przez "r n".

Utwórz dowcipy stołowe (klucz podstawowy Int null auto_increment, tekst żartu nie jest null); Załaduj Dane Infile "/tmp/jokes.txt" w polach Dowciwy stołu zakończone przez ""; Linie zakończone przez "n %% n" (żart);

Opcja zamknięta Bula Bulasa jest używana do sterowania polami dołączonymi w określonych znakach. Jeśli opcjonalnie zostanie pominięty, a następnie w wyjściu (wybierz ... do outfile) Wszystkie pola zostaną zamknięte w znakach określonych w załączonym przez. Przykład takiego wyjścia (w którym przecinek jest używany jako separator pola) przedstawiono poniżej:

"1", "łańcuch", "100.20" "2", "ciąg zawierający a, przecinek", "102.20" "3", "ciąg zawierający" cytat "," 102.20 "" 4 "," Ciąg zawierający "cytat i przecinek", "102.20"

Jeśli określony parametr zostanie określony, tylko pola Char i Varchar są podświetlone w zamkniętym symbolem:

1, "ciąg", 100,20 2 ", ciąg zawierający, przecinek", 102.20 3 ", ciąg zawierający" cytat ", 102.20 4", ciąg zawierający ", cytat i przecinek", 102.20

Należy pamiętać, że pojawienie się znaków zamkniętych wewnątrz rozmiaru pola jest ekranowany, stosując prefiks z ucieczki. Należy również przypomnieć, że jeśli pusta wartość zostanie określona w ucieczce, to możliwe jest utworzenie wyjścia, które nie można prawidłowo przeczytać operacyjnego danych obciążenia. Na przykład, jeśli symbol ekranowania jest pustym sznurkiem, powyższe wyjście pojawi się, aby być jak pokazano poniżej. Uwaga: Drugie pole w czwartej linii zawiera przecinek po cytowaniu, który (błędnie) wydaje się ograniczyć to pole:

1, "ciąg", 100.20 2 ", ciąg zawierający, przecinek", 102.20 3 ", ciąg zawierający" cytat ", 102.20 4", ciąg zawierający ", cytat i przecinek", 102.20

Aby wejść do załączonego znaku, jeśli jest, jest usuwany z obu końców pól. (To prawda, niezależnie od tego, czy parametr opcjonalnie: Podczas pracy z danymi wejściowymi, opcjonalnie opcja nie jest uwzględniana.) Jeśli załączony znak zostanie uznany, który uciekający symbolem jest poprzedzony, to jest interpretowany jako część bieżącej wartości pola. Ponadto podwójne znaki zamknięte przez pola wewnątrz pola są interpretowane jako pojedyncze znaki dołączone przez, jeśli to pole rozpocznie się od tego samego symbolu. Na przykład, jeśli jest określony przez zamknięty przez "", to cytaty są przetwarzane, jak pokazano poniżej:

"" Duży "szef" -\u003e "Big" szef "Big" Boss -\u003e "Duży" szef "" Big "" Boss -\u003e "Big" "szef

Pola uciekły przez opcję służy do sterowania nagrywaniem lub odczytaniem znaków specjalnych. Jeśli pola uciekły według znaku nie jest pusty, jest używany jako prefiks dla następujących znaków na wyjściu:

  • Pola symbolu uciekły przez
  • Pola zamknięte symbolem
  • Pierwszy symbol pola zakończonych przez i linie zakończone przez
  • Symbol ASCII 0 (w rzeczywistości po symbolu ekranującego jest pisemny ASCII `0, a nie bajtowy z zerowym rozmiarem)

Jeśli symbol pola uniknął pusty, nie są ekranowane znaków. W rzeczywistości nie ma sensu określić pusty symbol ekranujący, zwłaszcza jeśli pola pola w przetworzonych danych zawierają dowolną liczbę znaków określonych na liście powyżej.

Jeśli pola uciekły według znaku nie jest puste, w przypadku wpisania danych wejściowych takiej postaci, symbol jest dosłownie jako część wartości pola. Wyjątki są ekranowane "0" lub `N" (na przykład, 0 lub n, jeśli symbol ekranujący jest "). Sekwencje te są interpretowane jako ASCII 0 (bajty z wartościami zerowej) i null. Patrz poniżej przetwarzania zerowego Zasady.

Aby uzyskać więcej kompletnych informacji na temat symbolu symbolu tarczy `, patrz rozdział 6.1.1 Literałów: prezentacja wierszy i liczb.

W niektórych przypadkach opcje przetwarzania pola i struny interakcji:

  • Jeśli linie zakończone przez jest pustym ciągiem i polami zakończonymi przez nie jest pustym łańcuchem, linie kończą się także polami znaków zakończonych przez.
  • Jeśli oba pola zakończone przez i pól dołączony przez są puste ("), stosuje się stosowany format linii stałej (bez separatorów). W formacie stacjonarnym nie ma separatorów między pól. Zamiast tego, czytając i zapisując wartości kolumn, używany jest kolumny o szerokości `` Wyjście ". Na przykład, jeśli kolumna jest zadeklarowana jako INT (7), wartości dla tej kolumny są zapisywane przy użyciu pól o szerokości 7 znaków. Wartości wejściowe dla tej kolumny uzyskuje się przez czytanie 7 znaków. Format ze stałym łańcuchem wpływa również na przetwarzanie ilości NULL (patrz poniżej). Należy pamiętać, że format o stałym rozmiarze nie będzie działać podczas korzystania z wielokrotnego zestawu znaków.

Wartości zerowe w zależności od zastosowanych pól i linii opcji zostaną przetworzone inaczej:

  • Dla domyślnych ilości pól i linii Null są zapisywane jako dla wyjścia, a n są odczytywane jako null do wejścia (w oparciu o założenie, że uciekający symbolem jest `").
  • Jeśli pola zamknięte przez nie jest puste, to pole, którego wartość jest słowem z liter , czyta jako wartość zerową (w przeciwieństwie do słowa Null zawarte między polami, które są odczytywane jako "Null" String).
  • Jeśli pola uciekły przez pusty, Null jest zapisywany jako słowo NULL.
  • W formacie stacjonarnym (który ma miejsce, jeśli oba specyfikatory są zakończone i pola zostały zamknięte przez - są puste), NULL jest zapisywany jako pusty ciąg. Należy zauważyć, że w wyniku wartości NULL i pusty ciąg w tej tabeli będą nie do odróżnienia podczas zapisywania do pliku, ponieważ obie są rejestrowane jako puste struny. Jeśli konieczne jest, aby te wartości są różne podczas odczytu czytania pliku, nie należy używać formatu ze stałym ciągiem.

Niektóre przypadki nie są obsługiwane przez Operator Dane Load:

  • Wiersze ze stałym rozmiarem (obie opcje są zakończone przez i pola dołączone przez puste) i kolumny z kroplami lub tekstami.
  • Jeśli określono separator, który pokrywa się z innym lub będącym drugim prefiksem, niepełne dane obciążenia nie będzie w stanie poprawnie interpretować wejścia. Na przykład zatwierdzenie następujących pól powoduje problemy: pola zakończone przez "" "Załączone przez" "
  • Jeśli pola Escapad według pustej opcji, wówczas pola zamknięte symbol zawarty w polu jest przypadkiem pól dołączonych przez lub linie zakończone przez, a następnie pola zakończone symbolem, doprowadzi do przedwczesnego zakończenia odczytu lub łańcucha Polecenie Infile Data Data. Wynika to z faktu, że inspirujące dane ładowania nie można poprawnie określić, gdzie kończy się pole lub ciąg.

Poniższy przykład pobiera wszystkie kolumny tabeli Persontay:

MySQL\u003e Dane ładowania Infile "persondata.txt" w tabeli Persondata;

Lista pól nie jest określona, \u200b\u200bdlatego komenda Data Load Data może oczekiwać ciągów wejściowych do wypełnienia każdej kolumny tabeli. Wykorzystuje domyślne pola i wartości linii.

Jeśli chcesz pobrać tylko niektóre z kolumn tabeli, musisz określić listę kolumn:

MySQL\u003e Dane ładowania Infile "Persondata.txt" w tabeli Persondata (Col1, Col2, ...);

Lista pól musi być określona w przypadkach, jeśli kolejność pól w pliku wejściowym różni się od kolejności kolumn w tej tabeli. W przeciwnym razie MySQL nie będzie w stanie ustawić korespondencji wstrzykiwanych pól i kolumn tabeli.

Jeśli ciąg ma zbyt mało pola, a następnie kolumny, dla których nie ma pola w pliku wejściowym, są ustawione na ich wartości domyślne. Domyślne przypisanie opisano w sekcji 6.5.3 Sekcja Utwórz składnię operatora tabeli.

Wartość pustego pola jest interpretowana inaczej niż brak wartości:

  • W przypadku typów ciągów kolumna jest instalowana w pustym ciągu.
  • W przypadku typów numerycznych kolumna jest ustawiona na 0.
  • W przypadku typów daty i godziny kolumnę jest ustawiony na odpowiedni typ `` zero ". Patrz rozdział 6.2.2 Typy danych i czasów.

Należy zauważyć, że są to te same ilości, które będą w kolumnie w wyniku wyraźnego przykładu wykonania pustego ciągu przez kolumny ciągu, typów liczbowych lub dat lub typów czasowych w poleceniu Wstaw lub aktualizacji.

Kolumny czasowe są instalowane tylko w bieżącej dacie lub godzinie w przypadkach, w których wartość NULL jest przypisana do kolumny lub (tylko dla pierwszej kolumny timestamp), jeśli kolumna timestamp jest poza listą pól, jeśli taka lista zostanie określona.

Jeśli linia wejściowa ma zbyt wiele pól, to niepotrzebne pola są ignorowane, a liczba ostrzeżeń wzrośnie.

Polecenie Informacyjne Dane ładujące interpretuje wszystkie wprowadzanie linii, dzięki czemu nie można określić wartości numerycznych dla wyliczeń ani ustawionych kolumn, a także do wkładania poleceń. Wszystkie wartości enum i ustawione muszą być określone jako wiersze!

Korzystając z interfejsu API, możesz uzyskać informacje o żądaniu, wywołując funkcję API MySQL_Info () na końcu zapytań do danych o obciążeniu. Poniżej znajduje się format łańcucha informacyjnego dla tego przypadku:

Rekordy: 1 Usunięte: 0 Pomijane: 0 Ostrzeżenia: 0

UWAGI są wydawane w tych samych okolicznościach, jak przy rejestrowaniu wartości w wkładce (patrz rozdział 6.4.3, składnia operatora Wstaw), z wyjątkiem tego, że Dane o ładowaniu Dane dodatkowo generuje ostrzeżenia, gdy zbyt mało lub zbyt wiele pól w wejściu rząd. Ostrzeżenie nie jest przechowywane w dowolnym miejscu; Liczba ostrzeżeń może być używana tylko do sprawdzenia, czy określone działania zostały wykonane normalnie. Jeśli trzeba dokładnie znać przyczyny ostrzeżeń, musisz wykonać polecenie SELECT ... ino outfile do innego pliku i porównaj wynik z oryginalnym plikiem wejściowym, jest jedynym sposobem, aby uzyskać takie informacje.

Jeśli chcesz wykonać dane ładowania, aby odczytać z kanału, możesz zastosować następującą sztuczkę:

Mkfifo / mysql / db / x / x chmod 666 / mysql / db / x / x cat / nt / mysql / db / x / x mysql -e "obciążenie Dane Infile" X "do tabeli x" x

Podczas korzystania z wersji MySQL starszej niż 3,23,25 powyższe można wykonać tylko za pomocą lokalnego danych obciążenia.

Aby uzyskać więcej informacji na temat efektywności wstawienia w porównaniu z informacjami o obciążeniu Infile i zwiększyć szybkość załadowanego danych, patrz sekcja sekcji

Opisuję raczej częstą sytuację. Podczas penzetu dostęp do Phpmyadmin został odebrany na zdalnym hoście, ale nie przejdzie go do plików. Notorious file_priv \u003d żadna flaga ma winić wszystko w ustawieniach demonów MySQL. Wiele w tej sytuacji poddaje się i wierzmy, że pliki na hoście w ten sposób nie czytają. Ale tak nie zawsze jest.

Ostrzeżenie

Wszystkie informacje są dostarczane wyłącznie do celów informacyjnych. Ani redaktorzy, ani autor nie są odpowiedzialni za wszelkie możliwe szkody spowodowane przez materiały tego artykułu.

Preludium

Jeśli chodzi o interakcję MySQL COFD z systemem plików, a następnie przypomnij sobie, jako regułę:

  • funkcja LOAD_FILE, która umożliwia odczytanie plików na serwerze;
  • wybierz ... W Outfile, z którym można utworzyć nowe pliki.

Odpowiednio, jeśli uzyskano dostęp do PHPMYADMIN lub dowolnego innego klienta na urządzeniu zdalnym, a następnie o dużej prawdopodobieństwie za pośrednictwem MySQL można dostać się do systemu plików. Ale pod warunkiem, że File_priv \u003d tak flaga jest zainstalowana w ustawieniach demonów, co się dzieje nie zawsze. W tym przypadku musimy pamiętać innego operatora, znacznie mniej znany, ale z dość potężną funkcjonalnością. Mówię o operatorowi inspirujących Dane ładunkowe, o których funkcjach zostanie również powiedziane w tym artykule.

Interakcja PHP i MySQL

PHP jest najczęstszym językiem do tworzenia aplikacji internetowych, dlatego warto rozważyć bardziej szczegółowo, w jaki sposób współdziała z bazą danych.

W pHP4 biblioteki klientów MySQL były domyślnie włączone i zawarte w dostawie PHP, dzięki czemu można było użyć użycia MySQL podczas instalacji, określając opcję

Bez MySQL.

PHP5 przychodzi bez biblioteki klienta. Na * Systemy NIX zazwyczaj zbierają PHP5 za pomocą biblioteki libmysqlclient zainstalowaną na serwerze, po prostu określając opcję

Z MySQL \u003d / USR

podczas montażu. Jednocześnie, do wersji 5.3 do interakcji z serwerem MySQL, używany jest biblioteka biblioteki klienta MySQL na niskim poziomie (libmysql), interfejs, który nie jest zoptymalizowany do komunikacji z aplikacjami PHP.

W przypadku PHP 5.3 i więcej, opracowano natywny sterownik MySQL (MySQLND), aw nowo pojawił się wersji PHP 5.4 Ten sterownik jest używany domyślnie. Chociaż wbudowany sterownik MySQL jest napisany jako rozszerzenie PHP, ważne jest, aby zrozumieć, że nie zapewnia nowego programatora API. API do bazy danych MySQL dla programisty zapewnia rozszerzenia MySQL, MySQLI i PDO_MYSQL. Rozszerzenia te mogą korzystać z możliwości wbudowanego sterownika MySQL, aby komunikować się z dememonem MySQL.

Korzystanie z wbudowanego sterownika MySQL daje pewne zalety w stosunku do biblioteki klienta MySQL: na przykład nie musisz instalować MySQL, aby zbierać plik PHP lub używać skryptów za pomocą bazy danych. Więcej informacji na temat natywnego kierowcy MySQL i jego różnice z libmysql można znaleźć w dokumentacji.

Ekspansja MySQL, MySQLI i PDO_Mysql można indywidualnie skonfigurować do użycia libmysql lub mysqlnd. Na przykład, aby skonfigurować rozszerzenie MySQL, aby użyć biblioteki klienta MySQL, a rozszerzenia MySQLI do pracy z natywnym sterownikiem MySQL należy określić następujące opcje:

`./configure --with-mysql \u003d / usr / bin / mysql_config --with-mysqli \u003d mysqlnd`

Dane obciążenia składniowego.

Załaduj operator danych, ponieważ dokumentacja brzmi, odczytuje wiersze z pliku i ładuje je do stołu z bardzo dużą prędkością. Może być używany ze słowami kluczowymi lokalnymi (dostępnymi w MySQL 3.22.6 i nowszych wersjach), co wskazuje, gdzie zostaną pobrane dane. Jeśli brakuje słowa, serwer ładuje określony plik z lokalnej maszyny do tabeli, a nie z maszyny klienckiej. Oznacza to, że plik zostanie odczytany przez klienta MySQL, ale serwer MySQL. Ale dla tej operacji jest potrzebny przywilej plik (File_priv \u003d tak flaga). Wykonanie operatora W tym przypadku można porównać za pomocą funkcji Load_file - z jedyną różnicą, że dane są ładowane do tabeli, a nie wyjście. Tak więc, przy użyciu uszkodzonych danych do odczytu plików ma sens, gdy funkcja LOAD_FILE nie jest dostępna, czyli w bardzo starych wersjach serwera MySQL.

Jeśli operator jest używany w tym formularzu: Załaduj dane lokalne, to znaczy, używając słowa lokalnego, plik jest już odczytywany przez program klienta (na maszynie klienta) i przechodzi do serwera, w którym znajduje się baza danych. Jednocześnie, aby uzyskać dostęp do plików, przywilej pliku, naturalnie nie jest potrzebny (jak wszystko dzieje się na maszynie klienta).

Rozszerzenia MySQL / MySQLI / PDO_MYSQL i operator ładuj dane lokalne

W rozszerzeniu MySQL możliwość korzystania z lokalnego jest regulowana przez dyrektywę PHP_INI_System mySQL.Allow_Local_infil. Domyślnie ta dyrektywa wynosi 1, dlatego potrzebujesz operatora, jest zazwyczaj dostępny. Ponadto funkcja MySQL_Connect umożliwia uwzględnienie możliwości korzystania z danych obciążenia lokalnych, jeśli stała 128 stoi w piątym argumencie.

Gdy rozszerzenie PDO_MYSQL służy do podłączenia do bazy danych, możemy również włączyć lokalne wsparcie za pomocą PDO :: MySQL_ATTR_LOCAL_INFILE (integer)

$ PDO \u003d Nowy PDO ("MySQL: Host \u003d LocalHost; dbname \u003d mydb", "Użytkownik", "Pass", Array (PDO :: MySQL_ATTR_Local_infil \u003d\u003e 1));

Ale największym możliwością pracy z operatorem danych ładowania zapewnia rozszerzenie MySQLI. Niniejsza ekspansja jest również dostarczana przez dyrektywę PHP_INI_System mySQLI.ALLOW_LOCAL_INFILE, która reguluje stosowanie lokalnego.

Jeśli połączenie jest wykonywane za pomocą MySQLI_REAL_Connect, a następnie za pomocą MySQLI_OPTions, możemy włączyć i wyłączyć lokalne wsparcie. Ponadto dostępna jest ta funkcja rozszerzenia MySQLI_SET_LOCAL_INFILE_HANDLER, która umożliwia zarejestrowanie funkcji wywołania wywołującego, aby przetworzyć zawartość plików odczytywanych przez LOAD Data Local Operator.

Czytanie plików

Uważny czytelnik prawdopodobnie już odgadł, że jeśli będziemy mieli konto w Phpmyadmin, będziemy mogli czytać dowolne pliki bez przywileju plików, a nawet omijają ograniczenia open_basedira. W końcu jest to bardzo często klient (w tym przypadku Phpmyadmin), a demon MySQL znajduje się na tej samej maszynie. Pomimo ograniczeń ograniczeń bezpieczeństwa serwera MySQL, możemy wykorzystać fakt, że ta polityka nie działa dla klienta i nadal czytać pliki z systemu, zamykając je w bazie danych.

Algorytm prosty. Wystarczy wykonać następujące zapytania SQL:

  1. Utwórz tabelę, w której nagrywamy zawartość plików: Utwórz Tabela Temp (Tekst treści);
  2. Wysyłamy zawartość pliku do utworzonej tabeli: ładować dane lokalne "/ etc / hosts" w polach TEMP TABLE zakończone przez "EOF" uciekł przez "" linie zakończone przez "EOF";

Voila. Zawartość pliku / etc / hosts jest teraz w tabeli temp. Czy musisz przeczytać pliki binarne? Bez problemów. Jeśli w pierwszym kroku stworzymy taką tabelę:

Utwórz tabelę "BIN" (BIN "BLOB NOT NULL) Silnik \u003d Myisam;

Że możliwe będzie pobranie obu plików binarnych. Prawdziwe, niepotrzebne bity zostaną dodane do końca plików, ale można je usunąć w dowolnym edytorze sześciokątnym. W ten sposób można pobrać skrypty z serwera chroniony przez IonCube / Zend / TrueCrypt / Nusphere i dekodować je.

Innym przykładem sposobu korzystania z załadunkowych danych lokalnych jest znalezienie sposobu na konfigurację Apache. Odbywa się to w następujący sposób:

  1. Najpierw poznaj ścieżkę do binarnego, czytamy / proc / self / cmdline opisano powyżej.
  2. Następnie przeczytaj bezpośrednio binarny, gdzie szukamy httpd_root / server_config_file.


Jasne jest, że w tej sytuacji skrypty phpmyadmin odgrywają rolę klienta, aby połączyć się z bazą danych. A zamiast phpmyadmin, możesz użyć innego interfejsu internetowego do pracy z MySQL.

Na przykład można użyć skryptów do tworzenia kopii zapasowych i przywrócić podstawę. W 2007 r. W 2007 r. Francuski haker pod Nick Acidroot ustanowił publicznie Exploit na podstawie tej uwagi i możliwości czytania plików z panelu Admin PHPBB<= 2.0.22.

Tunel jest wygodny. Tunel niebezpieczny

Podczas instalowania złożonych aplikacji internetowych, bezpośredni dostęp do bazy danych jest często wymagany, na przykład, dla początkowej konfiguracji i regulacji skryptów. Dlatego w niektórych przypadkach wskazane jest zainstalowanie prostego skryptu na serwerze - tak zwany tunel MySQL, który umożliwia wykonywanie żądań z bazą danych za pomocą wygodnego klienta zamiast ciężkiego phpmyadmin.

Istnieje wiele tuneli do pracy z bazą danych, ale wszystkie nie są zbyt powszechne. Być może jednym z najbardziej znanych skryptów serwerów Macromedia Dream Weaver. Wyświetl kod źródłowy tego skryptu może być.

Główna różnica między tunelem MySQL z Phpmyadmin jest konieczność wprowadzenia nie tylko loginu i hasła z bazy danych, ale także gospodarza, z którym trzeba się połączyć. Jednocześnie tunele są często zarezerwowane aktywne, cóż, po prostu na wszelki wypadek, nigdy nie wiesz, co jeszcze będzie musiał wspierać. Wydaje się, że jest on używany tylko wtedy, gdy w bazie danych jest konto - to co się boi? Krótko mówiąc, wydaje się, że tunel specjalnego zagrożenia bezpieczeństwa dla serwera WWW nie nosi. Ale w rzeczywistości nie wszystko jest takie dobre, jak się wydaje na pierwszy rzut oka.

Rozważ następującą sytuację. Niech witryna witryna.com z zainstalowanym tunelem http://site.com/_mmmservscripts/mmhttpdb.php zainstalowany onser. Przypuśćmy, że na serwerze, ale istnieje okazja do korzystania z lokalnych danych obciążenia (jak omówiono powyżej, jest to na przykład w przypadku ustawień domyślnych). W takim przypadku możemy zrobić zdalny serwer MySQL, w podstawie którego są dozwolone od wszędzie i umożliwia również korzystanie z lokalnego i łączenia z tym serwerem za pomocą tunelu. Podłącz dane ze zdalnym serwerem MySQL:

DB Host: xx.xx.xx.xxx DB Nazwa: Nazwa_remote_db DB User: Our_user DB Pass: Ur_pass

W tej sytuacji serwer A odgrywa rolę klienta, dlatego możemy wysyłać pliki z hosta do zdalnej bazy danych lub, innymi słowy, przeczytaj pliki. Kolejna prośba bez opieki:

Type \u003d MySQL & Timeout \u003d 100 & Host \u003d xx.xx.xx.xxx & bazy danych \u003d Nazwa_Remote_db & Username \u003d Our_user & Password \u003d Our_pass & OPCode \u003d Executesql & SQL \u003d Load Data Local Infile /Path/to/script/setup_options.php "W polach TMP_TBL Fields zakończony przez" __EOF__ "Escaped by" "linie zakończone przez" __EOF__ "

W rzeczywistości ta luka jest bardziej niebezpieczna niż zwykłe czytanie plików: W końcu pozwala odczytać pliki konfiguracyjne instalowanych skryptów na serwerze A. Przez ten sam tunel, możesz uzyskać bezpośredni dostęp do bazy danych kontrolnej te skrypty. Technika opisana powyżej na stosowaniu tuneli mięśni może być nieco uogólniona i stosuje podczas pracy bezbrzeżności.


Serwer klient.

Aby lepiej zrozumieć możliwości danych obciążenia, konieczne jest, aby pamiętać, że SUGD MySQL korzysta z tradycyjnej architektury serwera klienta. Praca z MySQL, faktycznie pracujemy z dwoma programami:

  • program serwera bazy danych znajdujący się na komputerze, w którym przechowywana jest baza danych. Daemon MySQLD "Słuchaj" żądania klientów przychodzą przez sieć i dostęp do zawartości bazy danych, zapewniając informacje, których prośba klientów. Jeśli MySQLD działa z opcją --Local-inspile \u003d 0, a następnie lokalne nie będzie działać;
  • program klienta łączy się z serwerem i przesyła żądania do serwera. Dystrybucja CubD MySQL zawiera kilka programów klientów: klient MySQL Console (najczęściej używany), a także MySQLSHow, MySQlimport, MySQLSHow, MySQlimport i tak dalej. A jeśli jest to konieczne, możesz nawet utworzyć swój program kliencki na podstawie standardowej biblioteki klienta libmysql, która pochodzi z cięcia MySQL.

Jeśli korzystanie z standardowego klienta MySQL nie użyje lokalnego operatora Load Data Local, konieczne jest użycie klawisza --lokalowego:

MySQL --Local-inspile Sampdb MySQL\u003e Załaduj dane lokalne "Member.txt" do członka tabeli;

Specyfikuj w opcji pliku / SMY.CNF dla klienta:

Local-Inpile \u003d 1

Ważne jest, aby pamiętać, że domyślnie wszyscy klienci MySQL i biblioteki są skompilowane z opcją -Nable-lokalną opcję, aby zapewnić kompatybilność z MySQL 3.23.48 i starszymi wersjami, więc dane Lokalne są zazwyczaj dostępne dla standardowych klientów. Jednak polecenia serwera MySQL nie są wysyłane głównie z konsoli, ale ze skryptów, dlatego języki do tworzenia stron internetowych mają również klientów do pracy z bazą danych, który może się różnić w funkcjonalności ze standardowego klienta MySQL.

Oczywiście ta cecha operatora danych obciążenia może być zagrożeniem dla bezpieczeństwa systemu, a zatem, począwszy od wersji MySQL 3.23.49 i MySQL 4.0.2 (4.0.13 dla Win), lokalna opcja będzie działać tylko wtedy, gdy Oba są klientem, jak i serwer - pozwolić na to.

Omijając ograniczenia Open_Basedir.

Korzystanie z danych obciążenia dość często pozwala obejść ograniczenia open_basedira. Może to być przydatne, jeśli na przykład mamy dostęp do katalogu jednego użytkownika na wspólnym hostingu, ale chcemy przeczytać skrypty z katalogu domowego innego użytkownika. Następnie ustawienie takiego skryptu

jeden)); $ E \u003d $ PDO-\u003e EXEC ("Ładuj dane lokalne" Infile "./path/to/file" w polach testowych tabeli zakończonych przez "__EOF__" uciekł przez "" linie zakończone przez "__EOF__" "); $ PDO \u003d NULL; ?\u003e.

Wniosek

Jest ciekawy, że opisana możliwość danych obciążenia operatora jest znana co najmniej dziesięć lat. Wzmianka, na przykład, na przykład znaleźć bilet [# 15408] (Tryb bezpieczny / MySQL Vight 2002-02-06), a następnie podobne pytania wielokrotnie zalane przez Bugs.php.net [# 21356] [# 23779 ] [# 28632] [# 31261] [# 31711]. Do którego deweloperzy odpowiedzieli dosłownie następujące:

[Chroniony e-mail] To nie jest błąd, to jest funkcja :)

Lub przypisany bilet "Status: nie naprawiaj". Lub były ograniczone do poprawek, które nie rozwiązały prawie nic. Bilety na tym temacie pojawiły się ponownie. Dlatego określony sposób na obejście open_basedir i nadal działa na dość dużej liczbie serwerów. Jednak wraz z pojawieniem się nowego kierowcy MySQLND wydaje się, że postanowiono podjąć znaczące zmiany: podczas domyślnych instalacji, operator nie zostanie teraz wykonany w ogóle [# 54158] [# 55737] Mam nadzieję, że w najbliższej przyszłości deweloperzy przynoszą porządek w tej sprawie.

Load Data Infile "File_name.txt" do tabeli TBL_name [dołączony przez ""]] [(nazwa Col_name, ...)]

Polecenie Informacyjne Dane Load odczytuje linie z pliku tekstowego i wstawia je do stołu z bardzo dużą prędkością. Jeśli określono słowo kluczowe, plik jest odczytywany z hosta klienta. Jeśli lokalny nie jest określony, plik musi znajdować się na serwerze. (Lokalna opcja jest dostępna w wersji MySQL 3.22.6 i nowszej później.)

Jeśli pliki tekstowe, które chcesz odczytać, znajdują się na serwerze, a następnie ze względów bezpieczeństwa, pliki te muszą być umieszczone w katalogu bazy danych lub przeczytaj wszystkim użytkownikom. Ponadto, aby zastosować dowództwo danych o ładunku do plików serwera, należy mieć uprawnienia do plików dla hosta serwera. Patrz rozdział 4.2.7 Przywileje dostarczone przez MySQL.

W wersjach MySQL 3.23.49 i MySQL 4.0.2, polecenie lokalne nie będzie działać w przypadkach, jeśli demon MySQLD jest uruchomiony z parametrem MySQLD lub jeśli klient nie umożliwia obsługę lokalnego. Patrz rozdział 4.2.4 Problemy bezpieczeństwa związane z poleceniem LOAD LOCK LOCK.

Jeśli określono słowo kluczowe Low_priority, wykonanie tego polecenia danych obciążenia zostanie zatrzymany do momentu zatrzymania innych klientów odczytując tę \u200b\u200btabelę.

Jeśli podano współbieżne słowo kluczowe podczas pracy z tabelami Myisam, inne wątki mogą pobierać dane z tabeli podczas polecenia Data Load. Wykorzystanie tej funkcji jest oczywiście nieznacznie pod wpływem wydajności danych obciążenia, nawet jeśli żaden inny wątek używa tej tabeli w tym samym czasie.

Podczas korzystania z lokalnej opcji wykonanie może wystąpić nieznacznie wolniej w porównaniu z bezpośrednio dostarczaniem serwera dostępu do plików, ponieważ zawartość pliku powinna przejść od hosta klienta na serwerze. Z drugiej strony w tym przypadku nie ma potrzeby przywilejów plików do pobrania plików lokalnych.

Podczas korzystania z wersji MySQL do 3.23.24 Korzystanie z dowodu Data Infi Command nie można odczytać z FIFO. Jeśli musisz odczytać z FIFO (na przykład standardową wyjście gunzip), należy użyć lokalnych danych ładunkowych.

Możesz także przesłać pliki danych za pomocą narzędzia MySQlimport. To narzędzie pobieranie plików wysyłając do serwera poleceń Data Load Data. Opcja --Lokalna sprawia, że \u200b\u200bMySQlimport odczytuje pliki danych firmy klienta. Możesz określić - ProCompress Parametr, aby uzyskać lepszą wydajność podczas pracy poprzez wolne sieci, jeśli klient i serwer obsługują protokół kompresji danych.

W przypadkach, gdy pliki znajdują się na serwerze, drugi działa zgodnie z następującymi zasadami:

  • Jeśli określono ścieżkę absolutnej (pełnej) do pliku, serwer wykorzystuje tę ścieżkę niezmienioną.
  • Jeśli względna ścieżka do pliku jest określona za pomocą jednego lub więcej początkowych katalogów, w którym wyszukiwanie plików zostanie zaimplementowane w stosunku do określonych katalogów w katalogu danych Datadir.
  • Jeśli ścieżka jest podawana do pliku bez określania początkowego katalogów, serwer wyszukuje tego pliku w katalogu używanym bazy danych.

Wynika z tego, że plik określony jako `./myfile.txt" jest odczytywany z katalogu serwera, podczas gdy plik określony jako `myFile.txt," jest odczytywany z katalogu używanego bazy danych. Na przykład, następujące dane dowodu polecenia odczytuje plik Data.txt w katalogu bazy danych dla DB1, ponieważ DB1 jest bieżącą bazą danych, nawet jeśli ten polecenie wyraźnie zawiera notatkę do pobrania pliku do tabeli bazy danych DB2:

MySQL\u003e Używaj DB1; MySQL\u003e Załaduj dane "Data.txt" do tabeli DB2.MY_Table;

Słowa kluczowe Wymień i ignoruj \u200b\u200bkontrolę Przetwarzanie zapisów wejściowych, które duplikuje istniejące rekordy o tych samych wartościach unikalnych kluczy. Jeśli określisz wymień, nowe linie zastąpi istniejące z tym samym unikalnym kluczem. Jeśli określisz ignoruj, linie wejściowe mające ten sam unikalny klucz, co istnieje, zostanie pomijane. Jeśli żaden z parametrów nie zostanie określony, wtedy, gdy zostanie wykryta zduplikowaną wartość klucza, wystąpi błąd i pozostała część pliku tekstowego jest ignorowana.

Jeśli dane są ładowane z lokalnego pliku za pomocą słowa kluczowego lokalnego, serwer nie będzie w stanie przerwać transferu danych w środku tej operacji, więc domyślnie wykonywanie polecenia występuje tak samo jak w przypadku jest oznaczony ignorowany.

Podczas korzystania z niepełnosprawnych danych Load Data na puste tabele Myisam, wszystkie nie-unikalne indeksy są tworzone w oddzielnym pakiecie (jak w naprawie). Zwykle znacznie przyspiesza pracę danych ładunkowych w przypadku dużej liczby indeksów.

Polecenie Infile Data Load jest opcjonalne, aby wybrać ... do Outfile. Patrz rozdział 6.4.1 Wybierz składnię operatora. Aby nagrywać dane z bazy danych do pliku, wybierz ... Do outfile jest używany. Aby odczytać dane z powrotem do bazy danych, używany jest zainfekowany Dane ładunkowe. Pola składniowe i linie są takie same w obu drużynach. Obie części są opcjonalne, ale jeśli oba są określone, pola powinny poprzedzać linie.

Jeśli określone są pola, każda z jego subjoints (zakończona przez zamknięta przez i uciekła) jest również opcjonalna, ale konieczne jest określenie co najmniej jednego z nich.

Jeśli instrukcja pól nie zostanie zdefiniowana, domyślnie jego parametry otrzymają następujące wartości:

Pola zakończone przez "T" dołączony przez "" uciekł przez "\\\\"

Jeśli instrukcja linii nie jest zdefiniowana, domyślnie ma następującą strukturę:

Linie zakończone przez "n"

Innymi słowy, gdy instalacje domyślne, Dane ładunkowe Postępowanie przyczynione podczas odczytu danych wejściowych będą działać w następujący sposób:

  • Wyszukaj końce wierszy w formie symboli `n"
  • Przesuń wiersze do pól za pomocą symboli zakładek.
  • Nie oczekuj, że pola można dołączać w symbolach cytowania.
  • Interpretuj napotkane karty, nowy ciąg lub `", przedstawiony ", jako literały, które są częścią wartości pola.

A, wręcz przeciwnie, jeśli ustawienia domyślne są poprawne podczas nagrywania wyjścia, polecenie SELECT ... na zewnątrz będzie działać w następujący sposób:

  • Włóż karty między polami.
  • Nie wchodź do pól w symbolach cytowania. Użyj symboli `", aby osłonić instancje zakładek, nowego ciągu lub `", który pojawia się wśród pola pola.
  • Włóż symbole nowego ciągu na końcu każdego rekordu.

Należy pamiętać, że w wejściu pola uciekły przede wszystkim, trzeba określić dwa przerwy odwrotne dla wartości, która powinna być odczytywana jako jeden bandlash.

Opcja Linie Numer Ignoruj \u200b\u200bmożna użyć do ignorowania nagłówka nazwy kolumny na początku pliku:

MySQL\u003e Załaduj Dane Infile "/ TMP / File_name" w teście tabeli Ignoruj \u200b\u200b1 linie;

Podczas korzystania z wybranego ... do outFile razem z Dane ładunkowe Pieplepnie się, aby dane z bazy danych jest odczytane do pliku, a następnie z powrotem z pliku do bazy danych, opcje, które przetwarzają pola i linie muszą być zbiegłe dla obu poleceń. W przeciwnym razie załaduj dane niepełnosprawne, nie będą mogli interpretować zawartości tego pliku poprawnie. Załóżmy, że polecenie Wybierz ... Ino Outfile jest używane do zapisu do pliku z polami oddzielonymi przecinkami:

MySQL\u003e Wybierz * W OutFile "Data.txt" Pola zakończone przez "," z ...;

MySQL\u003e Dane ładowania Infile "Data.txt" w tabeli Tabela2 Pola zakończone przez ",";

MySQL\u003e Dane ładowania Infile "Data.txt" w tabeli tabeli2 końcówki zakończone przez "T";

Podobny wynik wystąpiłby, jeśli każda linia wejściowa była interpretowana jako osobna pole.

Ładowanie Data Inspidenci można również użyć do odczytywania plików uzyskanych z źródeł zewnętrznych. Na przykład pola w pliku formatu bazy danych DBASE zostaną oddzielone przecinkami i zamkniętymi w podwójnych cytatach. Jeśli linie w tym pliku kończą się symbolami nowej linii, a następnie nagrać plik, można użyć następującego polecenia, w którym ustawienie opcji, pola przetwarzania i linii ilustrują:

MySQL\u003e Load Data Infile "Data.txt" w tabeli TBL_name pola zakończone przez "," Zamknięte przez "" "linie zakończone przez" n ";

Każda z pól przetwarzania opcji i ciągów może ustawić pusty ciąg (""). Jeśli ciąg nie jest pusty, opcje pola zamknięte przez i pola uciekły przez muszą zawierać jeden znak. Wartości pola zakończonych opcjami i liniami zakończonymi przez mogą zawierać więcej niż jeden znak. Na przykład, aby nagrywać rzędy kończące się parami `` powrotu wagonu - tłumaczenie linii "" (jak w plikach MS DOS lub pliki tekstowe systemu Windows), należy określić następującą ekspresję: linie zakończone przez "r n".

Utwórz dowcipy stołowe (klucz podstawowy Int null auto_increment, tekst żartu nie jest null); Załaduj Dane Infile "/tmp/jokes.txt" w polach Dowciwy stołu zakończone przez ""; Linie zakończone przez "n %% n" (żart);

Opcja zamknięta Bula Bulasa jest używana do sterowania polami dołączonymi w określonych znakach. Jeśli opcjonalnie zostanie pominięty, a następnie w wyjściu (wybierz ... do outfile) Wszystkie pola zostaną zamknięte w znakach określonych w załączonym przez. Przykład takiego wyjścia (w którym przecinek jest używany jako separator pola) przedstawiono poniżej:

"1", "łańcuch", "100.20" "2", "ciąg zawierający a, przecinek", "102.20" "3", "ciąg zawierający" cytat "," 102.20 "" 4 "," Ciąg zawierający "cytat i przecinek", "102.20"

Jeśli określony parametr zostanie określony, tylko pola Char i Varchar są podświetlone w zamkniętym symbolem:

1, "ciąg", 100,20 2 ", ciąg zawierający, przecinek", 102.20 3 ", ciąg zawierający" cytat ", 102.20 4", ciąg zawierający ", cytat i przecinek", 102.20

Należy pamiętać, że pojawienie się znaków zamkniętych wewnątrz rozmiaru pola jest ekranowany, stosując prefiks z ucieczki. Należy również przypomnieć, że jeśli pusta wartość zostanie określona w ucieczce, to możliwe jest utworzenie wyjścia, które nie można prawidłowo przeczytać operacyjnego danych obciążenia. Na przykład, jeśli symbol ekranowania jest pustym sznurkiem, powyższe wyjście pojawi się, aby być jak pokazano poniżej. Uwaga: Drugie pole w czwartej linii zawiera przecinek po cytowaniu, który (błędnie) wydaje się ograniczyć to pole:

1, "ciąg", 100.20 2 ", ciąg zawierający, przecinek", 102.20 3 ", ciąg zawierający" cytat ", 102.20 4", ciąg zawierający ", cytat i przecinek", 102.20

Aby wejść do załączonego znaku, jeśli jest, jest usuwany z obu końców pól. (To prawda, niezależnie od tego, czy parametr opcjonalnie: Podczas pracy z danymi wejściowymi, opcjonalnie opcja nie jest uwzględniana.) Jeśli załączony znak zostanie uznany, który uciekający symbolem jest poprzedzony, to jest interpretowany jako część bieżącej wartości pola. Ponadto podwójne znaki zamknięte przez pola wewnątrz pola są interpretowane jako pojedyncze znaki dołączone przez, jeśli to pole rozpocznie się od tego samego symbolu. Na przykład, jeśli jest określony przez zamknięty przez "", to cytaty są przetwarzane, jak pokazano poniżej:

"" Duży "szef" -\u003e "Big" szef "Big" Boss -\u003e "Duży" szef "" Big "" Boss -\u003e "Big" "szef

Pola uciekły przez opcję służy do sterowania nagrywaniem lub odczytaniem znaków specjalnych. Jeśli pola uciekły według znaku nie jest pusty, jest używany jako prefiks dla następujących znaków na wyjściu:

  • Pola symbolu uciekły przez
  • Pola zamknięte symbolem
  • Pierwszy symbol pola zakończonych przez i linie zakończone przez
  • Symbol ASCII 0 (w rzeczywistości po symbolu ekranującego jest pisemny ASCII `0, a nie bajtowy z zerowym rozmiarem)

Jeśli symbol pola uniknął pusty, nie są ekranowane znaków. W rzeczywistości nie ma sensu określić pusty symbol ekranujący, zwłaszcza jeśli pola pola w przetworzonych danych zawierają dowolną liczbę znaków określonych na liście powyżej.

Jeśli pola uciekły według znaku nie jest puste, w przypadku wpisania danych wejściowych takiej postaci, symbol jest dosłownie jako część wartości pola. Wyjątki są ekranowane "0" lub `N" (na przykład, 0 lub n, jeśli symbol ekranujący jest "). Sekwencje te są interpretowane jako ASCII 0 (bajty z wartościami zerowej) i null. Patrz poniżej przetwarzania zerowego Zasady.

Aby uzyskać więcej kompletnych informacji na temat symbolu symbolu tarczy `, patrz rozdział 6.1.1 Literałów: prezentacja wierszy i liczb.

W niektórych przypadkach opcje przetwarzania pola i struny interakcji:

  • Jeśli linie zakończone przez jest pustym ciągiem i polami zakończonymi przez nie jest pustym łańcuchem, linie kończą się także polami znaków zakończonych przez.
  • Jeśli oba pola zakończone przez i pól dołączony przez są puste ("), stosuje się stosowany format linii stałej (bez separatorów). W formacie stacjonarnym nie ma separatorów między pól. Zamiast tego, czytając i zapisując wartości kolumn, używany jest kolumny o szerokości `` Wyjście ". Na przykład, jeśli kolumna jest zadeklarowana jako INT (7), wartości dla tej kolumny są zapisywane przy użyciu pól o szerokości 7 znaków. Wartości wejściowe dla tej kolumny uzyskuje się przez czytanie 7 znaków. Format ze stałym łańcuchem wpływa również na przetwarzanie ilości NULL (patrz poniżej). Należy pamiętać, że format o stałym rozmiarze nie będzie działać podczas korzystania z wielokrotnego zestawu znaków.

Wartości zerowe w zależności od zastosowanych pól i linii opcji zostaną przetworzone inaczej:

  • Dla domyślnych ilości pól i linii Null są zapisywane jako dla wyjścia, a n są odczytywane jako null do wejścia (w oparciu o założenie, że uciekający symbolem jest `").
  • Jeśli pola zamknięte przez nie jest puste, to pole, którego wartość jest słowem z liter , czyta jako wartość zerową (w przeciwieństwie do słowa Null zawarte między polami, które są odczytywane jako "Null" String).
  • Jeśli pola uciekły przez pusty, Null jest zapisywany jako słowo NULL.
  • W formacie stacjonarnym (który ma miejsce, jeśli oba specyfikatory są zakończone i pola zostały zamknięte przez - są puste), NULL jest zapisywany jako pusty ciąg. Należy zauważyć, że w wyniku wartości NULL i pusty ciąg w tej tabeli będą nie do odróżnienia podczas zapisywania do pliku, ponieważ obie są rejestrowane jako puste struny. Jeśli konieczne jest, aby te wartości są różne podczas odczytu czytania pliku, nie należy używać formatu ze stałym ciągiem.

Niektóre przypadki nie są obsługiwane przez Operator Dane Load:

  • Wiersze ze stałym rozmiarem (obie opcje są zakończone przez i pola dołączone przez puste) i kolumny z kroplami lub tekstami.
  • Jeśli określono separator, który pokrywa się z innym lub będącym drugim prefiksem, niepełne dane obciążenia nie będzie w stanie poprawnie interpretować wejścia. Na przykład zatwierdzenie następujących pól powoduje problemy: pola zakończone przez "" "Załączone przez" "
  • Jeśli pola Escapad według pustej opcji, wówczas pola zamknięte symbol zawarty w polu jest przypadkiem pól dołączonych przez lub linie zakończone przez, a następnie pola zakończone symbolem, doprowadzi do przedwczesnego zakończenia odczytu lub łańcucha Polecenie Infile Data Data. Wynika to z faktu, że inspirujące dane ładowania nie można poprawnie określić, gdzie kończy się pole lub ciąg.

Poniższy przykład pobiera wszystkie kolumny tabeli Persontay:

MySQL\u003e Dane ładowania Infile "persondata.txt" w tabeli Persondata;

Lista pól nie jest określona, \u200b\u200bdlatego komenda Data Load Data może oczekiwać ciągów wejściowych do wypełnienia każdej kolumny tabeli. Wykorzystuje domyślne pola i wartości linii.

Jeśli chcesz pobrać tylko niektóre z kolumn tabeli, musisz określić listę kolumn:

MySQL\u003e Dane ładowania Infile "Persondata.txt" w tabeli Persondata (Col1, Col2, ...);

Lista pól musi być określona w przypadkach, jeśli kolejność pól w pliku wejściowym różni się od kolejności kolumn w tej tabeli. W przeciwnym razie MySQL nie będzie w stanie ustawić korespondencji wstrzykiwanych pól i kolumn tabeli.

Jeśli ciąg ma zbyt mało pola, a następnie kolumny, dla których nie ma pola w pliku wejściowym, są ustawione na ich wartości domyślne. Domyślne przypisanie opisano w sekcji 6.5.3 Sekcja Utwórz składnię operatora tabeli.

Wartość pustego pola jest interpretowana inaczej niż brak wartości:

  • W przypadku typów ciągów kolumna jest instalowana w pustym ciągu.
  • W przypadku typów numerycznych kolumna jest ustawiona na 0.
  • W przypadku typów daty i godziny kolumnę jest ustawiony na odpowiedni typ `` zero ". Patrz rozdział 6.2.2 Typy danych i czasów.

Należy zauważyć, że są to te same ilości, które będą w kolumnie w wyniku wyraźnego przykładu wykonania pustego ciągu przez kolumny ciągu, typów liczbowych lub dat lub typów czasowych w poleceniu Wstaw lub aktualizacji.

Kolumny czasowe są instalowane tylko w bieżącej dacie lub godzinie w przypadkach, w których wartość NULL jest przypisana do kolumny lub (tylko dla pierwszej kolumny timestamp), jeśli kolumna timestamp jest poza listą pól, jeśli taka lista zostanie określona.

Jeśli linia wejściowa ma zbyt wiele pól, to niepotrzebne pola są ignorowane, a liczba ostrzeżeń wzrośnie.

Polecenie Informacyjne Dane ładujące interpretuje wszystkie wprowadzanie linii, dzięki czemu nie można określić wartości numerycznych dla wyliczeń ani ustawionych kolumn, a także do wkładania poleceń. Wszystkie wartości enum i ustawione muszą być określone jako wiersze!

Korzystając z interfejsu API, możesz uzyskać informacje o żądaniu, wywołując funkcję API MySQL_Info () na końcu zapytań do danych o obciążeniu. Poniżej znajduje się format łańcucha informacyjnego dla tego przypadku:

Rekordy: 1 Usunięte: 0 Pomijane: 0 Ostrzeżenia: 0

UWAGI są wydawane w tych samych okolicznościach, jak przy rejestrowaniu wartości w wkładce (patrz rozdział 6.4.3, składnia operatora Wstaw), z wyjątkiem tego, że Dane o ładowaniu Dane dodatkowo generuje ostrzeżenia, gdy zbyt mało lub zbyt wiele pól w wejściu rząd. Ostrzeżenie nie jest przechowywane w dowolnym miejscu; Liczba ostrzeżeń może być używana tylko do sprawdzenia, czy określone działania zostały wykonane normalnie. Jeśli trzeba dokładnie znać przyczyny ostrzeżeń, musisz wykonać polecenie SELECT ... ino outfile do innego pliku i porównaj wynik z oryginalnym plikiem wejściowym, jest jedynym sposobem, aby uzyskać takie informacje.

Jeśli chcesz wykonać dane ładowania, aby odczytać z kanału, możesz zastosować następującą sztuczkę:

Mkfifo / mysql / db / x / x chmod 666 / mysql / db / x / x cat / nt / mysql / db / x / x mysql -e "obciążenie Dane Infile" X "do tabeli x" x

Podczas korzystania z wersji MySQL starszej niż 3,23,25 powyższe można wykonać tylko za pomocą lokalnego danych obciążenia.

Aby uzyskać bardziej szczegółowe informacje na temat efektywności wstawienia w porównaniu z inspileką Dane obciążenia i zwiększając szybkość uszkodzonych danych, patrz Rozdział 5.2.9 Prędkość zapytań Wstaw.

Komentarze użytkownika

Wysłany przez Jasona Tytusa[Usuń] [Edytuj]

"Ostrzeżenia nie są wszędzie przechowywane; liczba ostrzeżeń może być używana tylko jako
Wskazanie, jeśli wszystko poszło dobrze

Chyba żartujesz. Czy to zrobione jako jakąś karę DBA? TO ZNACZY. - My.
Wiem, jakie były problemy, ale musisz tylko zbudować plik wyjściowy i przejrzeć
Twoje miliony rekordów, aby je znaleźć. "DIDN" T MySQL używany do umieszczenia ich w Erlllog,
Gdzie należą? Idź dalej i udaj się na opcję, ale to wystarczy kłopoty
Włączam z powrotem do Oracle (i to trwa wiele).

Wysłany przez Campbell w piątek 17 maja 2002 r., @ 6: 24 rano[Usuń] [Edytuj]

Druga. (!) Nie rozumiem, jak ty
Napisz tę santance z prostą twarzą.

Wysłany przez Jonathon Padfield w piątek 17 maja 2002 r., @ 6: 24 rano[Usuń] [Edytuj]

Również brak informacji o tym, które wiersze są pomijane
Jest podawany.

Wysłany do piątkowy 17 maja 2002 r., @ 6: 24 rano[Usuń] [Edytuj]

Ta funkcja jest bardzo przydatna podczas przesyłania
Wstaw ze strony internetowej. Jeśli użytkownik trafi
Odśwież i reposty tworzą dane, które powodują
Kolejna wstawianie tych samych kluczowych danych kluczowych,
Boom, przerywa aplikację. W ten sposób użytkownik mógłby
Uderz f5, aż ich twarz zmieni kolor na niebieski i
Wygrał oświadczenie zastępowania.

[Usuń] [Edytuj]

Mam folder MYDB w C: MySQL
Umieść tam dane.txt i kiedy wykonuję
Załaduj dane lokalne "Data.txt" w tabeli
MyTable Mówi: Polecenie pomyślnie wykonane
Ale żadne wartości nie są dodawane do MyTable.
Jestem pod W2K

Wysłany przez Van Hoof Philip w piątek 17 maja 2002 r., @ 6: 24 rano[Usuń] [Edytuj]

Chcę synchronizować moją bazę danych z innym
Baza danych od czasu do czasu. Oznacza to, że ja
Będzie musiał użyć rzeczy zastępczej. Ale co z
Rekordy, które nie wygrywają w nowszym
Baza danych. Czy zostaną usunięte w One MySQL?
Czy jest jakiś sposób, aby automatycznie usunąć? Lub jest
Tylko rozwiązanie, aby upuścić mój stół MySQL i odtworzyć
Zanim zacznę ładować "ing. Używam Crontab
Skrypty do tej operacji, więc bez interakcji ludzkiej
Jest możliwe podczas tych operacji.

Wysłany do piątkowy 17 maja 2002 r., @ 6: 24 rano[Usuń] [Edytuj]

Dokumentacja jest niejasna o tym, co
Stanowi "unikalny" klucz / indeks w tym obszarze. TO.
Backreferences do "wstawienia", ale wkładka nie oznacza
Mieć takie ograniczenie. Znalazłem to podstawowe
Klucze są wystarczająco unikalne, ale musiałem dodać
Primarze, gdzie ich nie chcę. Być może ja
Brak czegoś ....

Wysłany do piątkowy 17 maja 2002 r., @ 6: 24 rano[Usuń] [Edytuj]

Jest bardzo frustrujące, aby uzyskać ostrzeżenia, gdy jest
Importowanie danych w bazie danych MySQL i nie być
W stanie uzyskać dostęp do wszelkich informacji o ostrzeżeń.
MySQL naprawdę musi dodać funkcję, która będzie
Zgłosić to, o czym polega ostrzeżenie, a nie tylko
Zgłoś ostrzeżenie. Idealnie informacje o
Ostrzeżenie należy natychmiast dostarczyć. W.
THE: Najmniej pewnego rodzaju dziennika błędów
Utworzony niż użytkownik może uzyskać dostęp.

Wysłany do piątkowy 17 maja 2002 r., @ 6: 24 rano[Usuń] [Edytuj]

Na "F5, aż ich twarz zmienia niebieski" Temat ...

Ten Shald będzie obsługiwany w aplikacji. TO.
Z pewnością nie boli, aby powiedzieć użytkownikowi, "ty" ve
Już to wszedł. Proszę zatrzymać orzeźwiające. "

Właściwie, ze względu na liczbę hyperimpatient
Lusers tam, to poszukiwane są szczególnie
Dobry pomysł.

Wysłany przez Larry Irwin we wtorek 20 sierpnia 2002 r., @ 11: 50 rano[Usuń] [Edytuj]

Byłoby bardzo pomocne, aby mieć dodatkową opcję
"Ignoruj \u200b\u200bograniczenia" podczas załadunku
Proces.

Opublikowany w czwartek 5 września 2002 r., @ 1: 34[Usuń] [Edytuj]

Jest złapanie "na pustym stole Myisam, wszystkie
Nieźczne indeksy są tworzone w oddzielnej partii
Ponieważ używany mechanizm jest "naprawa
KeyCache ", który może być bardzo powolny, jeśli masz wiele
indeksy. Jeden naprawdę musi używać mechanizmu
Powstrzymać klucze do tworzenia, a następnie napraw
Myisamchk za pomocą "Napraw z sortowaniem", jak opisano
Rozdział 5.2.9 (Jeśli możesz go uruchomić :-()

Wysłany do środy 9 października 2002 r., @ 12: 43pm[

Czy kiedykolwiek musiałeś pobierać dane z pliku do tabeli z pliku? Jeśli nie, spróbuję krótko opowiedzieć ci o jeden sposób.

Pobierz dane do tabeli z pliku

Załaduj dane Infile "Data.csv" w tabeli My_Table Ten projekt pomoże Ci pobrać dane z pliku do stołu.

Jeśli chcesz pobrać sformatowane dane, powiedz oddzielone średniki, a następnie następny projekt pomoże Ci:

Załaduj dane "Data.csv" w tabeli pola My_table zakończone.Przez "," zamknięty przez "" "Uciekł "\\" Linie zakończone przez "r n"
Co to znaczy?

  • Wyszukaj końce wierszy w postaci znaków "r n"
  • Linie do szycia na symbolach średników ().
  • Spodziewaj się, że pola można dołączyć w symbolach cytowania.
  • Interpretuj napotkane karty, nowy wiersz lub "" przedstawiony ", jako literały, które są częścią wartości pola.

Załaduj Dane Pieniądze Projekt

Wszystko, co opisaliśmy powyżej, jest słynnym zaprojektowanym danymi ładunkowymi.

Odmowa dostępu do błędu użytkownika

Jeśli nagle masz błąd Odmowa dostępu dla użytkownikaNastępnie musisz dodać atrybut Lokalnyprzed W pliku.Na przykład:

Załaduj dane lokalne "Data.csv" do tabeli my_table

Pobierz dane do tabeli z pliku dla określonych pól

Załaduj dane lokalne "Data.csv" w tabeli T1 pola zakończone przez "," linie zakończone przez "n" (@ col1, @ col2, @ col3, @ col4) nazwa zestawu [Chroniony e-mail] Col4, id. [Chroniony e-mail] col2;

Tutaj określamy nazwę pliku (dane.csv), z którego zostaną załadowane dane. W projekcie (@ col1, @ col2, @ col3, @ col4) Nawilamy wszystkie kolumny pliku do dalszego wykorzystania. A następnie za pomocą znanej metody ustawiamy wartości tych kolumn dla określonych pól polowych.

Załaduj dane złączem

Jeśli chcesz wypełnić tabelę z pliku za pomocą istniejącej, prawdopodobnie natychmiast wystąpić przystąp.Kod dla takiej wstawiania danych wygląda tak:

Załaduj dane lokalne inspile "Data.csv" do tabeli Table_1 Fields zakończone liniami "T" zakończone przez "\\ r [Chroniony e-mail], Nazwa użytkownika \u003d (Wybierz nazwę użytkownika z użytkowników, w których user_id \u003d @ col1);

Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu