3.2 쿼리 입력
이전 섹션에서 설명한대로 서버에 연결되어 있는지 확인합니다. 그것만으로는 조작 데이터베이스는 선택되어 있지 않지만, 그것은 괜찮습니다. 이 시점에서 테이블 만들기 테이블에 데이터를로드 테이블에서 데이터를 추출하는데 지금 진행하는 것이 아니라 쿼리 실행 방법을 배우는 것이 중요합니다. 이 섹션에서는 mysql 동작에 익숙하기 위해 여러 쿼리를 사용하여 명령 입력의 기본 원칙에 대해 설명합니다.
서버에 버전 번호 및 현재 날짜를 조회하는 간단한 명령을 보여줍니다. mysql>
프롬프트에 계속하여 다음과 같이 입력하고 Enter를 누르십시오.
mysql> SELECT VERSION(), CURRENT_DATE;
+--------------+--------------+
| VERSION() | CURRENT_DATE |
+--------------+--------------+
| 5.6.1-m4-log | 2010-08-06 |
+--------------+--------------+
1 row in set (0.01 sec)
mysql>
이 쿼리는 mysql에 대한 몇 가지 사항이 표시되어 있습니다.
일반적으로 명령은 SQL 문과 연속 세미콜론으로 구성됩니다. (세미콜론을 생략 할 수있는 몇 가지 예외가 있습니다. 위의
QUIT
도 그 중 하나입니다. 다른 것에 대해서는 나중에 설명합니다.)명령을 실행하면 mysql 그것을 서버로 전송하여 실행 결과를 확인하고 또 다른
mysql>
프롬프트를 출력하고 다음 명령을 준비했음을 나타냅니다.mysql은 쿼리의 출력을 테이블 형식 (행과 열)로 표시합니다. 첫 번째 행에는 열 레이블이 표시됩니다. 이후 행은 쿼리의 결과입니다. 일반적으로 열 레이블은 데이터베이스 테이블에서 페치 될 컬럼의 이름입니다. 다음의 예와 같이 테이블 컬럼이 아닌 표현식의 값을 취득하는 경우, mysql에서 열 레이블로 표현 자체가 사용됩니다.
mysql에서 반환 된 행의 수와 쿼리 실행에 걸린 시간이 표시되기 때문에 서버의 거친 성능을 알 수 있습니다. 이 값은 CPU 시간과 컴퓨터 시간이 아니라 시계의 시간으로 표시되기 때문에 또한 서버 부하 및 네트워크 대기 시간 등의 요인에 영향을 받기 때문에 정확하지 않습니다. (단순화를 위해이 장의 다른 예에서는 "rows in set"행이 생략되는 경우도 있습니다.)
키워드는 대문자 나 소문자로 입력 할 수 있습니다. 다음 쿼리는 동일합니다.
mysql>SELECT VERSION(), CURRENT_DATE;
mysql>select version(), current_date;
mysql>SeLeCt vErSiOn(), current_DATE;
그런 다음 다른 쿼리를 나타냅니다. 이것은 mysql을 간단한 계산기로 사용할 수 있음을 보여줍니다.
mysql> SELECT SIN(PI()/4), (4+1)*5;
+------------------+---------+
| SIN(PI()/4) | (4+1)*5 |
+------------------+---------+
| 0.70710678118655 | 25 |
+------------------+---------+
1 row in set (0.02 sec)
지금까지 보여준 쿼리는 비교적 짧은 한 줄의 문이었습니다. 한 줄에 여러 개의 명령문을 입력 할 수 있습니다. 각 문 끝에 세미콜론을 추가하십시오.
mysql>SELECT VERSION(); SELECT NOW();
mysql>SELECT VERSION(); SELECT NOW();
+--------------+ | VERSION() | +--------------+ | 5.6.1-m4-log | +--------------+ 1 row in set (0.00 sec) +---------------------+ | NOW() | +---------------------+ | 2010-08-06 12:17:13 | +---------------------+ 1 row in set (0.00 sec)
하나의 전체 명령을 한 줄에 입력 할 필요가 없기 때문에 여러 행을 필요로하는 긴 명령도 문제 없습니다. mysql은 입력 행의 끝을 찾는 것이 아니라 종단의 세미콜론을 찾을 명령문의 끝을 판정합니다. (즉, mysql은 자유 형식의 입력을 받아들입니다. 입력 행을 수집하지만 세미콜론 찾을 때까지 실행되지 않습니다.)
그런 단순한 복 문을 나타냅니다.
mysql>SELECT
->USER()
->,
->CURRENT_DATE;
+---------------+--------------+ | USER() | CURRENT_DATE | +---------------+--------------+ | jon@localhost | 2010-08-06 | +---------------+--------------+
이 예제에서는 여러 줄에 걸쳐 쿼리의 첫 번째 행을 입력 한 후 프롬프트가 mysql>
에서 ->
변화하는 것에주의하십시오. 이것은 mysql이 아직 완전한 성명을 감지 않고, 나머지 입력을 대기하고있는 것을 보여줍니다. 프롬프트는 귀중한 피드백을 제공 해주는 편입니다. 그 피드백을 사용하면 mysql이 무엇을 기다리고 있는지를 항상 인식 할 수 있습니다.
입력 도중에 명령의 실행을 취소하려면 \c
를 입력합니다.
mysql>SELECT
->USER()
->\c
mysql>
여기에서도 프롬프트에 주목하십시오. \c
를 입력 한 후 mysql>
로 돌아가서 mysql가 새로운 명령에 준비 할 수 있는지를 나타내는 피드백이 주어집니다.
다음 표에 표시된 각 프롬프트와 그것들이 나타내는 mysql의 상태를 정리합니다.
프롬프트 | 의미 |
---|---|
mysql> | 새로운 명령을 입력 할 수 있습니다. |
-> | 다중 명령의 다음 줄을 대기하고 있습니다. |
'> | 작은 따옴표 ( ' ' ')로 시작된 문자열이 완료 될 때까지 다음 줄을 대기하고 있습니다. |
"> | 큰 따옴표 ( " " ")로 시작된 문자열이 완료 될 때까지 다음 줄을 대기하고 있습니다. |
`> | 역 인용 부호 ( " ` ")에서 시작된 식별자가 완료 될 때까지 다음 줄을 대기하고 있습니다. |
/*> | /* 로 시작된 코멘트가 완료 될 때까지 다음 줄을 대기하고 있습니다. |
일반적으로 한 줄의 명령을 실행하려고 종단의 세미콜론을 잊지 여러 줄 문이 발생합니다. 이 경우 mysql은 추가 입력을 기다립니다.
mysql> SELECT USER()
->
이것이 발생하면 (문을 입력 할 때 ->
프롬프트 응답이 표시됨)은 mysql이 세미콜론을 대기하고있을 가능성이 높습니다. 메시지의 의미를 깨닫지 않으면 무엇을해야하는지 이해하는 데 시간이 걸릴 수도 있습니다. 세미콜론을 입력하고 문을 완료하면 mysql에서 실행됩니다.
mysql>SELECT USER()
->;
+---------------+ | USER() | +---------------+ | jon@localhost | +---------------+
'>
과 ">
프롬프트 문자열의 수집 중에 발생합니다 (MySQL이 문자열의 완료를 대기하고 있다는 의미입니다) .MySQL은 " '
"문자 나" "
"문자로 둘러싸 문자 열을 작성할 수 (예를 들어, 'hello'
또는 "goodbye"
등), mysql에서는 여러 줄에 걸쳐 문자열을 입력 할 수 있습니다. '>
또는 ">
프롬프트가 나타나면, 그것은 " '
'또는' "
'따옴표로 시작하는 문자열을 포함하는 행을 입력했지만, 그 문자열을 종료시키는 대응하는 따옴표를 아직 입력하지 않은 것을 의미합니다. 이러한 경우 따옴표를 입력 잊는 경우가 종종 있습니다. 예 :
mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>
이 SELECT
문을 입력하고 Enter를 눌러 결과를 기다리고 아무것도 일어나지 않습니다. 이 쿼리가 왜 그렇게 시간이 걸릴 냐고 궁금해 것이 아니라 '>
프롬프트에서 나타나는 단서에 주목하십시오. 이 프롬프트는 mysql이 완료되지 않은 문자열의 나머지를 대기하고있는 것을 보여줍니다. (이 문장의 실수를 깨달았 는가? 문자열 'Smith
는 두 번째 작은 따옴표가 없습니다.)
그럼 어떻게합니까? 가장 쉬운 방법은 명령을 취소 할 수 있습니다. 그러나이 경우는 단순히 \c
를 입력 할 수 없습니다. 왜냐하면 mysql에서 수집중인 문자열의 일부로 간주되기 때문입니다. 대신 닫는 따옴표를 입력하고 (즉, 문자열이 완료되었는지를 mysql에 인식시켜) 다음 \c
를 입력합니다.
mysql>SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
'>'\c
mysql>
프롬프트가 mysql>
로 돌아가서 mysql가 새로운 명령에 준비 할 수있는 것으로 나타납니다.
`>
프롬프트는 '>
과 ">
프롬프트와 비슷하지만, 반대로 따옴표를 시작했지만 아직 완료되지 않았 음을 보여줍니다.
'>
" ">
및 `>
의 각 메시지가 무엇을 의미 하는지를 이해하는 것이 중요합니다. 왜냐하면 잘못 종결되지 않은 문자열을 입력 한 경우, 그 이후의 입력 행은 QUIT
를 포함한 행 포함하여 mysql 무시 될 것으로 보인다 때문입니다. 특히 현재 명령을 취소하려면 우선 종단 따옴표를 입력해야 함을 이해하지 않으면 이것은 꽤 곤혹 가능 성이 있습니다.