MySQL 5.6 手冊 第三章3.2 查詢

3.2 Entering Queries

3.2輸入查詢

Make sure that you are connected to the server, as discussed in the previous section. Doing so does not in itself select any database to work with, but that is okay. At this point, it is more important to find out a little about how to issue queries than to jump right in creating tables, loading data into them, and retrieving data from them. This section describes the basic principles of entering queries, using several queries you can try out to familiarize yourself with how mysql works.

確保您已連接到服務器,如上一節所述。這樣做本身並不會選擇任何數據庫(選擇數據庫需要use database 命令)來處理,但是沒關係。這一節,更重要的是如何進行查詢,而不是創建表,插入數據,檢索數據。本節介紹輸入查詢的基本原理,使用多個查詢可以讓您熟悉mysql的 工作原理。

Here is a simple query that asks the server to tell you its version number and the current date. Type it in as shown here following the mysql> prompt and press Enter:

這是一個簡單的查詢,要求服務器告訴您其版本號和當前日期。在mysql> 提示符後輸入並按回車鍵。

mysql> SELECT VERSION(), CURRENT_DATE;
+--------------+--------------+
| VERSION()    | CURRENT_DATE |
+--------------+--------------+
| 5.6.1-m4-log | 2010-08-06   |
+--------------+--------------+
1 row in set (0.01 sec)
mysql>

This query illustrates several things about mysql:

這個查詢說明了幾個關於mysql的事情 

  • A query normally consists of an SQL statement followed by a semicolon. (There are some exceptions where a semicolon may be omitted. QUIT, mentioned earlier, is one of them. We'll get to others later.)

    一個查詢之後通常跟隨一個分號(有一些例外,可以省略一個分號。QUIT是其中之一,稍後我們會接觸到其他可以忽略分號的語句)

  • When you issue a query, mysql sends it to the server for execution and displays the results, then prints another mysql> prompt to indicate that it is ready for another query.

    當您發出查詢時,mysql將其發送到服務器執行並顯示結果,然後打印另一個mysql>提示,指示它已準備好進行另一個查詢。

  • mysql displays query output in tabular form (rows and columns). The first row contains labels for the columns. The rows following are the query results. Normally, column labels are the names of the columns you fetch from database tables. If you're retrieving the value of an expression rather than a table column (as in the example just shown), mysqllabels the column using the expression itself.

    mysql以表格形式(行和列)顯示查詢輸出。第一行是列名,下面的行是查詢結果。通常,列名是從數據庫表中獲取的列的名稱,如果您使用表達式的值而不是表列(如示例),則 mysql將使用表達式本身對該列進行標記。

  • mysql shows how many rows were returned and how long the query took to execute, which gives you a rough idea of server performance. These values are imprecise because they represent wall clock time (not CPU or machine time), and because they are affected by factors such as server load and network latency. (For brevity, the rows in set line is sometimes not shown in the remaining examples in this chapter.)

    mysql顯示了返回的行數以及查詢執行了多長時間,這讓您粗略的瞭解服務器的性能。這些值不精確,因爲它們代表系統時間(不是CPU或機器時間),並且因爲它們受到諸如服務器負載和網絡延遲等因素的影響。(爲了簡便起見,“row in set ” 行 有時不在本章剩餘的案例中展現)。

Keywords may be entered in any lettercase. The following queries are equivalent:

關鍵字不區分大小寫。以下查詢是等效的:

mysql> SELECT VERSION(), CURRENT_DATE;
mysql> select version(), current_date;
mysql> SeLeCt vErSiOn(), current_DATE;

Here is another query. It demonstrates that you can use mysql as a simple calculator:

這是另一個查詢。這表明你可以使用 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)

The queries shown thus far have been relatively short, single-line statements. You can even enter multiple statements on a single line. Just end each one with a semicolon:

迄今爲止所顯示的查詢是相對較短的單行語句。您甚至可以在一行中輸入多個語句。只需用分號結束每一個:

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)

A query need not be given all on a single line, so lengthy queries that require several lines are not a problem. mysqldetermines where your statement ends by looking for the terminating semicolon, not by looking for the end of the input line. (In other words, mysql accepts free-format input: it collects input lines but does not execute them until it sees the semicolon.)

Here is a simple multiple-line statement:

mysql> SELECT    -> USER()    -> ,    -> CURRENT_DATE;+---------------+--------------+| USER()        | CURRENT_DATE |+---------------+--------------+| jon@localhost | 2010-08-06   |+---------------+--------------+

In this example, notice how the prompt changes from mysql> to -> after you enter the first line of a multiple-line query. This is how mysql indicates that it has not yet seen a complete statement and is waiting for the rest. The prompt is your friend, because it provides valuable feedback. If you use that feedback, you can always be aware of what mysql is waiting for.

If you decide you do not want to execute a query that you are in the process of entering, cancel it by typing \c:

mysql> SELECT    -> USER()    -> \cmysql>

Here, too, notice the prompt. It switches back to mysql> after you type \c, providing feedback to indicate that mysql is ready for a new query.

The following table shows each of the prompts you may see and summarizes what they mean about the state that mysql is in.



PromptMeaning
mysql>Ready for new query
->Waiting for next line of multiple-line query
'>Waiting for next line, waiting for completion of a string that began with a single quote (')
">Waiting for next line, waiting for completion of a string that began with a double quote (")
`>Waiting for next line, waiting for completion of an identifier that began with a backtick (`)
/*>Waiting for next line, waiting for completion of a comment that began with /*

Multiple-line statements commonly occur by accident when you intend to issue a query on a single line, but forget the terminating semicolon. In this case, mysql waits for more input:

mysql> SELECT USER()    ->

If this happens to you (you think you've entered a statement but the only response is a -> prompt), most likely mysql is waiting for the semicolon. If you don't notice what the prompt is telling you, you might sit there for a while before realizing what you need to do. Enter a semicolon to complete the statement, and mysql executes it:

mysql> SELECT USER()    -> ;+---------------+| USER()        |+---------------+| jon@localhost |+---------------+

The '> and "> prompts occur during string collection (another way of saying that MySQL is waiting for completion of a string). In MySQL, you can write strings surrounded by either ' or " characters (for example, 'hello' or "goodbye"), andmysql lets you enter strings that span multiple lines. When you see a '> or "> prompt, it means that you have entered a line containing a string that begins with a ' or " quote character, but have not yet entered the matching quote that terminates the string. This often indicates that you have inadvertently left out a quote character. For example:

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
    '>

If you enter this SELECT statement, then press Enter and wait for the result, nothing happens. Instead of wondering why this query takes so long, notice the clue provided by the '> prompt. It tells you that mysql expects to see the rest of an unterminated string. (Do you see the error in the statement? The string 'Smith is missing the second single quotation mark.)

At this point, what do you do? The simplest thing is to cancel the query. However, you cannot just type \c in this case, because mysql interprets it as part of the string that it is collecting. Instead, enter the closing quote character (so mysqlknows you've finished the string), then type \c:

mysql> SELECT * FROM my_table WHERE name = 'Smith AND age < 30;
    '> '\cmysql>

The prompt changes back to mysql>, indicating that mysql is ready for a new query.

The `> prompt is similar to the '> and "> prompts, but indicates that you have begun but not completed a backtick-quoted identifier.

It is important to know what the '>">, and `> prompts signify, because if you mistakenly enter an unterminated string, any further lines you type appear to be ignored by mysql—including a line containing QUIT. This can be quite confusing, especially if you do not know that you need to supply the terminating quote before you can cancel the current query.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章