iT邦幫忙

DAY 28
5

只談MySQL系列 第 28

只談MySQL (第28天) 語法結構

任何一套資料庫系統及系統開發工具, 都有一套自己的語法結構, 今天我們來討論MySQL的語法結構...
先把MySQL的保留字清單的網頁連結列出:
http://dev.mysql.com/doc/mysqld-version-reference/en/mysqld-version-reference-reservedwords-5-1.html
這些保留字是最好不要用在使用者定義物件的名稱及使用者定義變數的名稱上...
例如:

mysql> CREATE TABLE interval (begin INT, end INT);
ERROR 1064 (42000): You have an error in your SQL syntax ...
near 'interval (begin INT, end INT)'

因為interval是保留字, 在SQL語法解析時會造成MySQL語法解析器的困擾, 而反應出錯誤. 但是, 如果一定要用interval做物件名稱呢? 可以這樣做

mysql> CREATE TABLE `interval` (begin INT, end INT);
Query OK, 0 rows affected (0.01 sec)

在interval的前後加上反引號"`"(在很多鍵盤上是放在[1/!]鍵的左邊那顆鍵), 或是

mysql> CREATE TABLE mydb.interval (begin INT, end INT);
Query OK, 0 rows affected (0.01 sec)

直接將Schema的全名輸入, 即可讓MySQL辨識出這不是保留字.
接下來, 我說明MySQL的數值表現方法:

  1. 字串: 以單引號'abcdef'或雙引號"abcdef"括起來的, 都是字串...

  2. 數字: 123, -123, +123, +1.23e10, -1.01e5, 5.0987, -5.9807等等都是數字的正確表現方式..

  3. 十六進位值: 以0, 1, 2, 3, ...9, A, B, C, D, E, F的方式表16進位值, 數值前要帶X(大寫)、x(小寫)或0x(小寫)來辨識出十六進位值, 例如:

    mysql> SELECT X'4D7953514C';
    -> 'MySQL'
    mysql> SELECT 0x0a+0;
    -> 10
    mysql> SELECT 0x5061756c;
    -> 'Paul'
    mysql> SELECT HEX('cat');
    -> '636174'
    mysql> SELECT 0x636174;
    -> 'cat'

要注意, 16進位必是偶數位數, 如果是奇數位數, 最好在前補零, 例如0xa, 以0x0a來表示, 0xaaa, 以0x0aaa來表示.
4. 布林值(真假值): 例如,

mysql> SELECT TRUE, true, FALSE, false;
        -> 1, 1, 0, 0
  1. 位元值: 以b(小寫)或0b(小寫)開頭的數值, 舉例來說明,

    mysql> CREATE TABLE t (b BIT(8));
    mysql> INSERT INTO t SET b = b'11111111';
    mysql> INSERT INTO t SET b = b'1010';
    mysql> INSERT INTO t SET b = b'0101';
    mysql> SELECT b+0, BIN(b+0), OCT(b+0), HEX(b+0) FROM t;
    +------+----------+----------+----------+
    | b+0 | BIN(b+0) | OCT(b+0) | HEX(b+0) |
    +------+----------+----------+----------+
    | 255 | 11111111 | 377 | FF |
    | 10 | 1010 | 12 | A |
    | 5 | 101 | 5 | 5 |
    +------+----------+----------+----------+

  2. NULL值: MySQL也支援NULL值的處理.
    接下來說明使用者定義變數, 使用者定義變數的宣告時, 最好在變數名稱前加一個"@"等號..例如:

    DECLARE @t1 integer;

使用者定義變數沒有大小寫的分別, 意即: @ABC和@ABc、@Abc、@abc都是一樣的變數名稱..
我們可以用SET指令來指派變數的值

mysql> SET @t1=1, @t2=2, @t3:=4;
mysql> SELECT @t1, @t2, @t3, @t4 := @t1+@t2+@t3;
+------+------+------+--------------------+
| @t1  | @t2  | @t3  | @t4 := @t1+@t2+@t3 |
+------+------+------+--------------------+
|    1 |    2 |    4 |                  7 | 
+------+------+------+--------------------+

可以指派給使用者定義變數的內容有: 數值、字串、位元值、十六進位值和NULL值.
最後, 我們介紹在MySQL中可以使用的註解(Comment):

  1. #: "#"號開始的文字都是註解

  2. --: "--"雙減號開始的文字也是註解

  3. /*....*/: 用一對"/"及"*"括起來的文字是註解
    例如:

    mysql> SELECT 1+1; # This comment continues to the end of line
    mysql> SELECT 1+1; -- This comment continues to the end of line
    mysql> SELECT 1 /* this is an in-line comment / + 1;
    mysql> SELECT 1+
    /

    this is a
    multiple-line comment
    */
    1;

MySQL有一個特別的註解用法: /*!....*/, 這是說括在內的文字也可以是命令, 端看是否相容, 例如:

CREATE /*!32302 TEMPORARY */ TABLE t (a INT);

對MySQL 3.23.02版本以前, 沒有Temporary的用法, 就是註解了, 但3.23.02版以後有Temporary的用法, 就成了

mysql> CREATE TABLE `interval` (begin INT, end INT);
Query OK, 0 rows affected (0.01 sec)

0

今天我分享到這裏...明天我將介紹MySQL的系統函數及運算子


上一篇
只談MySQL (第27天) Server Parameters
下一篇
只談MySQL (第29天) MySQL的運算子
系列文
只談MySQL30

尚未有邦友留言

立即登入留言