Loading...
MySQL 9.5 Reference Manual 9.5의 5.2 Entering Queries의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
이전 섹션에서 설명한 대로 서버에 연결되어 있는지 확인하십시오. 연결했다고 해서 작업할 데이터베이스가 자동으로 선택되는 것은 아니지만, 지금은 괜찮습니다. 이 시점에서는 테이블을 만들고, 그 안에 데이터를 적재하고, 데이터를 조회하는 작업에 바로 뛰어드는 것보다 쿼리를 어떻게 실행하는지에 대해 조금 알아보는 것이 더 중요합니다. 이 섹션에서는 몇 가지 쿼리를 사용하여, mysql이 어떻게 동작하는지 익숙해질 수 있도록 쿼리 입력의 기본 원리를 설명합니다.
다음은 서버에 버전 번호와 현재 날짜를 알려 달라고 요청하는 간단한 쿼리입니다. mysql> 프롬프트 뒤에 아래와 같이 입력한 후 Enter를 누르십시오:
1mysql> SELECT VERSION(), CURRENT_DATE; 2+-----------+--------------+ 3| VERSION() | CURRENT_DATE | 4+-----------+--------------+ 5| 8.4.0-tr | 2024-01-25 | 6+-----------+--------------+ 71 row in set (0.00 sec) 8 9mysql>
이 쿼리는 mysql에 대해 다음과 같은 여러 가지를 보여 줍니다:
쿼리는 일반적으로 세미콜론이 뒤따르는 SQL 문으로 구성됩니다. (세미콜론을 생략할 수 있는 예외도 일부 있습니다. 앞에서 언급한 QUIT이 그 중 하나입니다. 다른 예외들은 나중에 설명합니다.)
쿼리를 실행하면, mysql은 쿼리를 서버로 보내 실행시키고, 결과를 표시한 다음, 또 다른 mysql> 프롬프트를 출력하여 다음 쿼리를 받을 준비가 되었음을 나타냅니다.
mysql은 쿼리 출력 결과를 표 형식(행과 열)으로 표시합니다. 첫 번째 행은 열에 대한 레이블을 포함합니다. 그 뒤의 행들은 쿼리 결과입니다. 일반적으로 열 레이블은 데이터베이스 테이블에서 가져오는 열의 이름입니다. (앞의 예제에서처럼) 테이블 컬럼이 아니라 표현식의 값을 가져오는 경우, mysql은 표현식 자체를 사용하여 컬럼에 레이블을 붙입니다.
mysql은 반환된 행 수와 쿼리 실행에 걸린 시간을 표시하여, 서버 성능에 대한 대략적인 감을 제공합니다. 이 값들은 실제 경과 시간(CPU나 머신 시간 아님)을 나타내며, 서버 부하나 네트워크 지연과 같은 요인의 영향을 받기 때문에 정확하지는 않습니다. (간결함을 위해, 이 장의 나머지 예제들에서는 “rows in set” 줄을 생략하기도 합니다.)
Keyword는 어떤 대소문자로든 입력할 수 있습니다. 다음 쿼리는 모두 동일합니다:
1mysql> SELECT VERSION(), CURRENT_DATE; 2mysql> select version(), current_date; 3mysql> SeLeCt vErSiOn(), current_DATE;
다음은 또 다른 쿼리입니다. 이 예제는 mysql을 간단한 계산기로 사용할 수 있음을 보여 줍니다:
1mysql> SELECT SIN(PI()/4), (4+1)*5; 2+------------------+---------+ 3| SIN(PI()/4) | (4+1)*5 | 4+------------------+---------+ 5| 0.70710678118655 | 25 | 6+------------------+---------+ 71 row in set (0.02 sec)
지금까지 보여 준 쿼리는 비교적 짧은 한 줄짜리 문이었습니다. 여러 문을 한 줄에 입력할 수도 있습니다. 단, 각 문을 세미콜론으로 끝내기만 하면 됩니다:
1mysql> SELECT VERSION(); SELECT NOW(); 2+-----------+ 3| VERSION() | 4+-----------+ 5| 8.4.0-tr | 6+-----------+ 71 row in set (0.00 sec) 8 9+---------------------+ 10| NOW() | 11+---------------------+ 12| 2024-01-25 18:33:04 | 13+---------------------+ 141 row in set (0.00 sec)
쿼리는 반드시 한 줄로만 작성해야 하는 것은 아니므로, 여러 줄이 필요한 긴 쿼리도 문제되지 않습니다. mysql은 입력 줄의 끝을 보고 문의 끝을 판단하는 것이 아니라, 종료 세미콜론을 찾아 문이 끝났는지 판단합니다. (다시 말해, mysql은 자유 형식 입력을 허용합니다. 입력 줄을 모아 두었다가 세미콜론을 보면 비로소 실행합니다.)
다음은 간단한 다중 줄 문입니다:
1mysql> SELECT 2 -> USER() 3 -> , 4 -> CURRENT_DATE; 5+---------------+--------------+ 6| USER() | CURRENT_DATE | 7+---------------+--------------+ 8| jon@localhost | 2018-08-24 | 9+---------------+--------------+
이 예제에서, 여러 줄로 된 쿼리의 첫 번째 줄을 입력한 후 프롬프트가 mysql>에서 ->로 바뀌는 것에 주목하십시오. 이는 아직 완전한 문을 보지 못했기 때문에 나머지를 기다리고 있다는 것을 mysql이 알려 주는 방식입니다. 프롬프트는 유용한 정보를 제공해 주는 친구와 같습니다. 이 피드백을 활용하면, mysql이 무엇을 기다리고 있는지 항상 인지할 수 있습니다.
입력 중인 쿼리를 더 이상 실행하고 싶지 않다고 판단되면, \c를 입력하여 취소하십시오:
1mysql> SELECT 2 -> USER() 3 -> \c 4mysql>
여기서도 프롬프트에 주의하십시오. \c를 입력한 후 프롬프트가 다시 mysql>로 바뀌면서, mysql이 새 쿼리를 받을 준비가 되었음을 알려 줍니다.
다음 표는 볼 수 있는 각 프롬프트와 그것이 의미하는, mysql의 상태를 요약한 것입니다.
| Prompt | Meaning |
|---|---|
mysql> | 새 쿼리를 받을 준비가 됨 |
-> | 여러 줄 쿼리의 다음 줄을 기다리는 중 |
'> | 다음 줄을 기다리는 중이며, 작은따옴표(')로 시작한 문자열이<br> 완료되기를 기다리는 중 |
"> | 다음 줄을 기다리는 중이며, 큰따옴표(")로 시작한 문자열이<br> 완료되기를 기다리는 중 |
> | 다음 줄을 기다리는 중이며, 백틱(``` ` ``)으로 시작한 식별자가<br> 완료되기를 기다리는 중 |
/*> | 다음 줄을 기다리는 중이며, /*로 시작한 주석이<br> 완료되기를 기다리는 중 |
여러 줄 문은 일반적으로 한 줄로 쿼리를 실행하려다가 세미콜론을 빠뜨리는 바람에 우연히 발생합니다. 이런 경우, mysql은 추가 입력을 기다립니다:
1mysql> SELECT USER() 2 ->
이런 일이 생겼을 때(문장을 다 입력했다고 생각했는데 -> 프롬프트만 나타나는 경우), 대부분은 mysql이 세미콜론을 기다리고 있는 것입니다. 프롬프트가 말해 주는 내용을 눈치채지 못하면, 무엇을 해야 할지 깨닫기 전에 한동안 그냥 기다리게 될 수도 있습니다. 세미콜론을 입력해 문을 완성하면, mysql이 이를 실행합니다:
1mysql> SELECT USER() 2 -> ; 3+---------------+ 4| USER() | 5+---------------+ 6| jon@localhost | 7+---------------+
'>와 "> 프롬프트는 문자열 수집 중에 발생합니다(이는 MySQL이 문자열의 완료를 기다리고 있다는 말입니다). MySQL에서는 '이나 " 문자로 둘러싸인 문자열('hello' 또는 "goodbye" 같은)을 사용할 수 있고, 여러 줄에 걸친 문자열을 입력할 수 있습니다. '> 또는 "> 프롬프트가 보인다는 것은 ' 또는 " 따옴표 문자로 시작하는 문자열이 포함된 줄을 입력했지만, 아직 문자열을 끝맺는 대응되는 따옴표를 입력하지 않았음을 의미합니다. 이는 종종 따옴표 문자를 실수로 빠뜨렸다는 것을 의미합니다. 예를 들면:
1mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30; 2 '>
이 SELECT 문을 입력한 뒤 Enter 키를 눌러 결과를 기다려도, 아무 일도 일어나지 않습니다. 이 쿼리가 왜 이렇게 오래 걸리는지 궁금해하기보다는, '> 프롬프트가 제공하는 단서를 확인해야 합니다. 이 프롬프트는 mysql이 종료되지 않은 문자열의 나머지를 기대하고 있음을 알려 줍니다. (문에서 오류가 어디에 있는지 보이십니까? 문자열 'Smith에 두 번째 작은따옴표가 빠져 있습니다.)
이 시점에서 어떻게 해야 할까요? 가장 간단한 방법은 쿼리를 취소하는 것입니다. 그러나 이 경우에는 \c를 그냥 입력할 수 없습니다. mysql은 \c를 현재 수집 중인 문자열의 일부로 해석하기 때문입니다. 대신, 우선 닫는 따옴표 문자를 입력하여(그래서 mysql이 문자열이 끝났음을 알 수 있게 한 후), 그 다음에 \c를 입력하십시오:
1mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30; 2 '> '\c 3mysql>
프롬프트가 다시 mysql>로 바뀌면서, mysql이 새 쿼리를 받을 준비가 되었음을 나타냅니다.
> 프롬프트는 '> 및 "> 프롬프트와 비슷하지만, 백틱으로 둘러싼 식별자를 시작했지만 완료하지 않았음을 의미합니다.
'>, ">, 그리고 > 프롬프트가 무엇을 의미하는지 아는 것은 중요합니다. 종료되지 않은 문자열을 실수로 입력하면, 이후에 입력하는 줄(그 안에 QUIT이 포함된 줄도)은 모두 mysql이 무시하는 것처럼 보일 수 있기 때문입니다. 이는 특히, 현재 쿼리를 취소하기 전에 종료 따옴표를 제공해야 한다는 사실을 모를 때 상당히 혼란스러울 수 있습니다.
참고
이 시점 이후의 여러 줄 문은, 여러분이 직접 복사해서 붙여넣기 쉽게 하기 위해 보조 프롬프트(-> 또는 기타)를 생략한 형태로 작성됩니다.
5.1 Connecting to and Disconnecting from the Server
5.3 Creating and Using a Database