일괄 처리는 mysql 프로그램을 실행하는 비대화형 방식이며 mysql에서와 동일한 명령을 계속 사용하게 됩니다. 일괄 처리는 mysql 프로그램을 실행하는 비대화형 방식이며 mysql에서와 동일한 명령을 계속 사용하게 됩니다.
일괄 처리를 구현하려면 파일을 mysql 프로그램으로 리디렉션합니다. 먼저 텍스트 파일이 필요합니다. 이 텍스트 파일에는 mysql에 입력한 명령과 동일한 텍스트가 포함되어 있습니다.
예를 들어 일부 데이터를 삽입하려면 다음 텍스트가 포함된 파일을 사용합니다(파일 이름은 New_Data.sql입니다. 물론 New_Data.txt 또는 다른 법적 이름으로 이름을 지정할 수도 있으며 끝날 필요는 없습니다). 접미사 sql 포함):
Meet_A_Geek를 사용하세요.
INSERT INTO 고객(Customer_ID, Last_Name) VALUES(NULL, "Block");
INSERT INTO 고객(Customer_ID, Last_Name) VALUES(NULL, "Newton");
INSERT INTO 고객(Customer_ID, Last_Name) VALUES(NULL, "Simmons");
위 문장은 문법적으로 정확해야 하며 각 문장은 세미콜론으로 끝나야 합니다. 위의 USE 명령은 데이터베이스를 선택하고, INSERT 명령은 데이터를 삽입합니다.
다음으로 위 파일을 데이터베이스로 가져와야 합니다. 가져오기 전에 데이터베이스가 이미 실행 중인지 확인해야 합니다. 즉, mysqld 프로세스(또는 Windows NT에서는 "service"라고 하는 서비스, Unix에서는 "process"라고 함)가 실행 중인지 확인해야 합니다. 이미 실행 중입니다.
그런 다음 다음 명령을 실행하십시오.
bin/mysql –p < /home/mark/New_Data.sql
그런 다음 프롬프트에 따라 비밀번호를 입력하십시오. 위 파일의 명령문에 오류가 없으면 데이터를 데이터베이스로 가져옵니다.
파일의 데이터를 데이터베이스로 가져오려면 명령줄에서 LOAD DATA INFILE을 사용합니다.
이제 여러분은 "대체 왜 이 모든 SQL 문을 파일에 입력한 다음 프로그램을 통해 실행해야 하는가?"라고 자문할 수 있습니다.
이것은 많은 작업처럼 보일 수 있습니다. 글쎄, 당신이 그렇게 생각한다면 아마도 맞을 것입니다. 하지만 이 모든 명령에 대한 로그 기록이 있다면 어떨까요? 이제 이것은 훌륭합니다. 대부분의 데이터베이스는 데이터베이스에 기록된 이벤트 로그를 자동으로 생성합니다. 대부분의 로그에는 사용된 원본 SQL 명령이 포함되어 있습니다. 따라서 현재 데이터베이스에서 새로운 mysql 데이터베이스로 데이터를 내보낼 수 없는 경우 로그 및 mysql의 일괄 처리 기능을 사용하여 데이터를 빠르고 쉽게 가져올 수 있습니다. 물론 이렇게 하면 입력하는 수고를 덜 수 있습니다.
데이터 입력 파일 로드
이것이 MySQL 데이터베이스로 데이터를 가져오기 위해 소개할 마지막 방법입니다. 이 명령은 mysqlimport와 매우 유사하지만 이 방법은 mysql 명령줄에서 사용할 수 있습니다. 이는 API를 사용하는 모든 프로그램에서 이 명령을 사용할 수 있음을 의미합니다. 이 방법을 사용하면 가져오려는 데이터를 애플리케이션으로 가져올 수 있습니다.
이 명령을 사용하기 전에 mysqld 프로세스(서비스)가 실행 중이어야 합니다.
mysql 명령줄을 시작합니다.
빈/mysql –p
프롬프트에 따라 비밀번호를 입력하십시오. mysql 명령줄을 성공적으로 입력한 후 다음 명령을 입력하십시오.
Meet_A_Geek를 사용하세요.
LOAD DATA INFILE "/home/mark/data.sql" INTO TABLE 주문;
간단히 말해서, 이것은 data.sql 파일의 내용을 Orders 테이블로 가져옵니다. mysqlimport 도구와 마찬가지로 이 명령에도 몇 가지 선택적 매개변수가 있습니다. 예를 들어, 자신의 컴퓨터에서 원격 데이터베이스 서버로 데이터를 가져와야 하는 경우 다음 명령을 사용할 수 있습니다.
데이터 로컬 INFILE "C:MyDocsSQL.txt"를 테이블 주문에 로드합니다.
위의 LOCAL 매개변수는 파일이 로컬 파일이고 서버가 로그인한 서버임을 나타냅니다. 이렇게 하면 파일을 서버에 업로드하기 위해 ftp를 사용할 필요가 없으며 MySQL이 이를 수행합니다.
삽입 문의 우선순위를 낮은 우선순위(LOW_PRIORITY)로 표시하려는 경우 MySQL은 데이터를 삽입하기 전에 다른 사람이 테이블을 읽을 때까지 기다립니다. 다음 명령을 사용할 수 있습니다.
LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" INTO TABLE 주문;
데이터 삽입 시 파일과 테이블의 중복 키 값을 대체할지, 무시할지 지정할 수도 있습니다. 중복 키 값을 바꾸는 구문:
LOAD DATA LOW_PRIORITY INFILE "/home/mark/data.sql" REPLACE INTO TABLE 주문;
위 문장은 다소 투박해 보일 수 있지만 프로파일러가 이해할 수 있는 위치에 키워드를 배치합니다.
다음 옵션 쌍은 파일 기록 형식을 설명합니다. 이러한 옵션은 mysqlimport 도구에서도 사용할 수 있습니다. 여기서는 조금 다르게 보입니다. 먼저 FIELDS 키워드를 사용해야 합니다. 이 키워드를 사용하면 MySQL 프로파일러는 다음 옵션 중 하나 이상을 확인하기를 바랍니다.
문자로 종료됨
문자로 묶음
문자로 이스케이프됨
이러한 키워드와 해당 매개변수는 mysqlimport와 동일하게 사용됩니다.
TERMINATED BY는 기본적으로 탭 문자(t)인 필드의 구분 문자를 설명합니다.
ENCLOSED BY는 필드의 괄호 문자를 설명합니다. 예를 들어 각 필드를 따옴표로 묶습니다.
ESCAPED BY로 설명되는 이스케이프 문자입니다. 기본값은 백슬래시()입니다.
다음은 여전히 이전 mysqlimport 명령 예제를 사용하고 LOAD DATA INFILE 문을 사용하여 동일한 파일을 데이터베이스로 가져옵니다.
LOAD DATA INFILE "/home/mark/Orders.txt" REPLACE INTO TABLE 주문 필드 TERMINATED BY ',' ENCLOSED BY '"';
LOAD DATA INFILE 문에는 mysqlimport 도구에서 사용할 수 없는 기능이 있습니다.
LOAD DATA INFILE은 지정된 열을 기준으로 파일을 데이터베이스로 가져올 수 있습니다.
이 기능은 데이터의 일부를 가져올 때 매우 중요합니다. 예를 들어, Access 데이터베이스에서 MySQL 데이터베이스로 업그레이드할 때 몇 가지 추가 요구 사항을 충족하려면 MySQL 데이터베이스에 일부 열(열/필드/필드)을 추가해야 합니다.
현재 Access 데이터베이스의 데이터는 계속 사용할 수 있지만 이러한 데이터의 필드가 더 이상 MySQL의 필드와 일치하지 않기 때문에 mysqlimport 도구를 더 이상 사용할 수 없습니다. 그럼에도 불구하고 LOAD DATA INFILE을 사용할 수 있습니다. 다음 예에서는 지정된 필드로 데이터를 가져오는 방법을 보여줍니다.
LOAD DATA INFILE "/home/Order.txt" INTO TABLE Orders(주문_번호, 주문_날짜, 고객_ID);
보시다시피 필수 필드를 지정할 수 있습니다. 지정된 필드는 여전히 괄호로 묶여 있으며, 누락된 필드가 있으면 MySQL에서 알려줍니다.