大綱
一、事務相關概念
二、ACID特性
三、事務隔離相關
四、隔離級別示例
一、事務相關概念
(1)、事務概念
在數據庫系統中,一個事務(transaction)是指:由一系列數據庫操作組成的一個完整的邏輯過程。例如銀行轉帳,從原賬戶扣除金額,以及向目標賬戶添加金額,這兩個數據庫操作的總和,構成一個完整的邏輯過程,不可拆分。這個過程被稱爲一個事務,具有ACID特性。
(2)、事務日誌是順序IO;數據文件是隨機IO
(3)、事務的狀態
(4)、保存點與回滾至保存點
SAVEPOINT identifier ROLLBACK TO identifier mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> \u jiaowu Database changed mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | +-----+--------------+--------+------+ 7 rows in set (0.00 sec) mysql> DELETE FROM tutors WHERE TID=7; Query OK, 0 rows affected (0.01 sec) mysql> SAVEPOINT first; Query OK, 0 rows affected (0.00 sec) mysql> DELETE FROM tutors WHERE TID=6; Query OK, 1 row affected (0.00 sec) mysql> SAVEPOINT second; Query OK, 0 rows affected (0.00 sec) mysql> DELETE FROM tutors WHERE TID=5; Query OK, 1 row affected (0.00 sec) mysql> SAVEPOINT third; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | +-----+--------------+--------+------+ 5 rows in set (0.00 sec) mysql> ROLLBACK TO second; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | +-----+--------------+--------+------+ 5 rows in set (0.00 sec)
(5)、併發執行的目的
①提高吞吐量和資源利用率
②減少等待時間
(6)、事務調度
①可恢復調度
②無級聯調度
二、ACID特性
A(tomicity):原子性(不可分割性);一個事務中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
C(onsistency):一致性;在事務開始之前和事務結束以後,數據庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續數據庫可以自發性地完成預定的工作。
I(solation):隔離性;當兩個或者多個事務併發訪問(此處訪問指查詢和修改的操作)數據庫的同一數據時所表現出的相互關係。
D(urability):持久性;在事務完成以後,該事務對數據庫所作的更改便持久地保存在數據庫之中,並且是完全的。
三、事務隔離相關
(1)、事務隔離級別(從低到高):隔離級別越高,併發能力越弱
Read uncommitted:讀未提交;允許髒讀(dirty reads),事務可以看到其他事務“尚未提交”的修改
read committed:讀提交;不允許髒讀,允許不可重複讀,保證了讀到的任何數據都是提交的數據,避免讀到中間的未提交的數據即髒讀(dirty reads)。但是不保證事務重新讀的時候能讀到相同的數據,因爲在每次數據讀完之後其他事務可以修改剛纔讀到的數據。
repeatable read:可重讀;不允許不可重複讀和髒讀,但可能出現幻讀,基於鎖機制併發控制的DBMS需要對選定對象的讀鎖(read locks)和寫鎖(write locks)一直保持到事務結束,但不要求“範圍鎖(range-locks)”,因此可能會發生“幻讀(phantom reads)”
Serializable:串行化;在基於鎖機制併發控制的DBMS實現可序列化要求在選定對象上的讀鎖和寫鎖保持直到事務結束後才能釋放
(2)、查看隔離級別
mysql> SHOW [GLOBAL|SESSION] VARIABLES LIKE '%tx_%'; mysql> SELECT @@GLOBAL.tx_isolation; mysql> SELECT @@GLOBAL.tx_isolation; +-----------------------+ | @@GLOBAL.tx_isolation | +-----------------------+ | REPEATABLE-READ | +-----------------------+ 1 row in set (0.00 sec)
設定隔離級別
mysql> SET @@[GLOBAL.|SESSION.]tx_isolation='Isolation_level'; mysql> SET @@tx_isolation='REPEATABLE-READ'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@tx_isolation; +------------------+ | @@tx_isolation | +------------------+ | READ-UNCOMMITTED | +------------------+ 1 row in set (0.00 sec)
(3)、髒讀、不可重複讀、幻讀概念
髒讀:當一個事務正在訪問數據,並且對數據進行了修改,而這種修改還沒有提交到數據庫中,這時,另外一個事務也訪問這個數據,然後使用了這個數據。
不可重複讀:是指在一個事務內,多次讀同一數據。在這個事務還沒有結束時,另外一個事務也訪問該同一數據。那麼,在第一個事務中的兩 次讀數據之間,由於第二個事務的修改,那麼第一個事務兩次讀到的的數據可能是不一樣的。這樣就發生了在一個事務內兩次讀到的數據是不一樣的,因此稱爲是不可重複讀。
幻讀:是指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的數據進行了修改,這種修改涉及到表中的全部數據行。 同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那麼,以後就會發生操作第一個事務的用戶發現表中還有沒有修改的數據行,就好象 發生了幻覺一樣
(4)、髒讀、不可重複讀、幻讀區別
髒讀是一個事務讀到另一個事務未提交的更新數據,不可重複讀是一個事務讀到另一個事務已提交的更新數據,幻讀是一個事務讀到另一個事務已提交的新插入的數據
四、隔離級別示例
(1)、Read uncommitted
Session A | Session B |
mysql> SET @@tx_isolation='READ-UNCOMMITTED'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@tx_isolation; +------------------+ | @@tx_isolation | +------------------+ | READ-UNCOMMITTED | +------------------+ 1 row in set (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> \u jiaowu Database changed mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | | 9 | NingZhongze | F | 49 | +-----+--------------+--------+------+ 9 rows in set (0.00 sec) | mysql> SET @@tx_isolation='READ-UNCOMMITTED'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@tx_isolation; +------------------+ | @@tx_isolation | +------------------+ | READ-UNCOMMITTED | +------------------+ 1 row in set (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> \u jiaowu Database changed mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | | 9 | NingZhongze | F | 49 | +-----+--------------+--------+------+ 9 rows in set (0.00 sec) |
mysql> DELETE FROM tutors WHERE TID=9; Query OK, 1 row affected (0.02 sec) mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | +-----+--------------+--------+------+ 8 rows in set (0.00 sec) | mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | +-----+--------------+--------+------+ 8 rows in set (0.00 sec) |
mysql> ROLLBACK; Query OK, 0 rows affected (0.06 sec) mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | | 9 | NingZhongze | F | 49 | +-----+--------------+--------+------+ 9 rows in set (0.00 sec) | mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | | 9 | NingZhongze | F | 49 | +-----+--------------+--------+------+ 9 rows in set (0.00 sec) |
(2)、read committed
Session A | Session B |
mysql> SET @@tx_isolation='READ-COMMITTED'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@tx_isolation; +----------------+ | @@tx_isolation | +----------------+ | READ-COMMITTED | +----------------+ 1 row in set (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> \u jiaowu Database changed mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | | 9 | NingZhongze | F | 49 | +-----+--------------+--------+------+ 9 rows in set (0.00 sec) | mysql> SET @@tx_isolation='READ-COMMITTED'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@tx_isolation; +----------------+ | @@tx_isolation | +----------------+ | READ-COMMITTED | +----------------+ 1 row in set (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> \u jiaowu Database changed mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | | 9 | NingZhongze | F | 49 | +-----+--------------+--------+------+ 9 rows in set (0.00 sec) |
mysql> DELETE FROM tutors WHERE TID=9; Query OK, 1 row affected (0.02 sec) mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | +-----+--------------+--------+------+ 8 rows in set (0.00 sec) | mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | | 9 | NingZhongze | F | 49 | +-----+--------------+--------+------+ 9 rows in set (0.00 sec) |
mysql> COMMIT; Query OK, 1 row affected (0.02 sec) mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | +-----+--------------+--------+------+ 8 rows in set (0.00 sec) | mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | +-----+--------------+--------+------+ 8 rows in set (0.00 sec) |
(3)、Repeatable read
Session A | Session B |
mysql> SET @@tx_isolation='REPEATABLE-READ'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ | REPEATABLE-READ | +-----------------+ 1 row in set (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> \u jiaowu Database changed mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | +-----+--------------+--------+------+ 8 rows in set (0.00 sec) | mysql> SET @@SESSION.tx_isolation='REPEATABLE-READ'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@tx_isolation; +-----------------+ | @@tx_isolation | +-----------------+ | REPEATABLE-READ | +-----------------+ 1 row in set (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> \u jiaowu Database changed mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | +-----+--------------+--------+------+ 8 rows in set (0.00 sec) |
mysql> DELETE FROM tutors WHERE TID=8; Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | +-----+--------------+--------+------+ 7 rows in set (0.00 sec) | mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | +-----+--------------+--------+------+ 8 rows in set (0.00 sec) |
mysql> COMMIT; Query OK, 0 rows affected (0.06 sec) mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | +-----+--------------+--------+------+ 7 rows in set (0.00 sec) | mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | | 8 | HuYidao | M | 42 | +-----+--------------+--------+------+ 8 rows in set (0.00 sec) |
mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | +-----+--------------+--------+------+ 7 rows in set (0.00 sec) | mysql> COMMIT; Query OK, 0 rows affected (0.00 sec) mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | +-----+--------------+--------+------+ 7 rows in set (0.00 sec) |
(4)、Serializable
Session A | Session B |
mysql> SET @@tx_isolation='SERIALIZABLE'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@tx_isolation; +----------------+ | @@tx_isolation | +----------------+ | SERIALIZABLE | +----------------+ 1 row in set (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> \u jiaowu Database changed mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | +-----+--------------+--------+------+ 7 rows in set (0.00 sec) | mysql> SET @@tx_isolation='SERIALIZABLE'; Query OK, 0 rows affected (0.00 sec) mysql> SELECT @@tx_isolation; +----------------+ | @@tx_isolation | +----------------+ | SERIALIZABLE | +----------------+ 1 row in set (0.00 sec) mysql> START TRANSACTION; Query OK, 0 rows affected (0.00 sec) mysql> \u jiaowu Database changed mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | | 7 | Jinlunfawang | M | 67 | +-----+--------------+--------+------+ 7 rows in set (0.00 sec) |
mysql> DELETE FROM tutors WHERE TID=7; Query OK, 1 row affected (0.01 sec) mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | +-----+--------------+--------+------+ 6 rows in set (0.00 sec) | mysql> SELECT * FROM tutors; |
mysql> COMMIT; Query OK, 0 rows affected (0.06 sec) mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | +-----+--------------+--------+------+ 6 rows in set (0.00 sec) | mysql> SELECT * FROM tutors; +-----+--------------+--------+------+ | TID | Tname | Gender | Age | +-----+--------------+--------+------+ | 1 | HongQigong | M | 93 | | 2 | HuangYaoshi | M | 63 | | 3 | Miejueshitai | F | 72 | | 4 | OuYangfeng | M | 76 | | 5 | YiDeng | M | 90 | | 6 | YuCanghai | M | 56 | +-----+--------------+--------+------+ 6 rows in set (9.83 sec) |