最近在將資料從Oracle遷移到MySQL的過程中,遇到一些問題,其中就包含關鍵字。以下這篇文章主要為大家介紹了MySQL 5.7中的關鍵字與保留字的相關資料,文中介紹的非常詳細,需要的朋友可以參考學習,下面來一起看看吧。
前言
MySQL和Oracle的關鍵字還是不盡相同的,在Oracle資料庫中,我們的資料表中定義了大量的code欄位用來表示主鍵,但在MySQL中code是關鍵字,使用以前的處理方法就有些「水土不服」。
下面我們來了解MySQL中的關鍵字和保留字。
什麼是關鍵字和保留字
#關鍵字是指在SQL中有意義的字。 某些關鍵字(例如SELECT,DELETE或BIGINT)是保留的,需要特殊處理才能用作表格和列名稱等識別碼。 這一點對於內建函數的名稱也適用。
如何使用關鍵字和保留字
#非保留關鍵字允許作為標識符,不需要加引號。 如果您要適用保留字作為標識符,就必須適用引號。
舉個例子,BEGIN和END是關鍵字,但不是保留字,因此它們用作標識符不需要引號。 INTERVAL是保留關鍵字,必須加上引號才能當識別符。
mysql> mysql> use hoegh; Database changed mysql> mysql> CREATE TABLE interval (begin INT, end INT); ERROR 1064 (42000): mysql> mysql> CREATE TABLE `interval` (begin INT, end INT); Query OK, 0 rows affected (0.42 sec) mysql> mysql> show create table `interval`; +----------+--------------------------------------------------------- | Table | Create Table +----------+--------------------------------------------------------- | interval | CREATE TABLE `interval` ( `begin` int(11) DEFAULT NULL, `end` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +----------+--------------------------------------------------------- 1 row in set (0.00 sec) mysql>
我們看到,第一語句中表名使用了保留字interval,執行失敗;
第二條語句對interval加了引號,執行成功。
在這裡要注意的是,引號必須是反引號,而非單引號。否則會報錯,如下所示:
mysql> mysql> drop table `interval`;--使用反引号 Query OK, 0 rows affected (0.11 sec) mysql> mysql> create table 'interval' (begin INT, end INT);--使用单引号,报错 ERROR 1064 (42000): mysql>
有一個例外
如果標識符在限定名稱(資料庫名稱)的句點之後,即使是保留關鍵字也不需要引號。
我們以hoegh資料庫為例,如果表名寫成hoegh.interval就不需要對保留字interval加引號了。
mysql> mysql> create table hoegh.interval (begin INT, end INT); Query OK, 0 rows affected (0.19 sec) mysql> mysql> show create table hoegh.interval; +----------+--------------------------------------------------------- | Table | Create Table +----------+--------------------------------------------------------- | interval | CREATE TABLE `interval` ( `begin` int(11) DEFAULT NULL, `end` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1 | +----------+--------------------------------------------------------- 1 row in set (0.00 sec) mysql>
關於使用內建函數名稱
#允許內建函數的名稱可以作為標識符,但最好謹慎使用。例如,COUNT作為列名稱是合法的。但是,預設情況下,在函數名稱和後面的(之間的函數呼叫中不允許有空格。這個限制使解析器能夠區分名稱是用於函數呼叫還是用在非函數上下文中。
#附錄
在某些時候,您可能需要升級到更高版本,因此最好查看未來的保留字。在更高版本的MySQL的手冊中找到這些。 yacc解析器。關鍵字標記為(R)。 #第三個表格10.4顯示MySQL 5.7比較5.6版本刪除的保留字。
Table 10.3 Keywords and Reserved Words Added in MySQL 5.7 Compared to MySQL 5.6
ACCOUNT | ALWAYS | CHANNEL |
COMPRESSION | ENCRYPTION | FILE_BLOCK_SIZE |
FILTER | FOLLOWS | GENERATED (R) |
GROUP_REPLICATION | INSTANCE | JSON |
MASTER_TLS_VERSION | NEVER | OPTIMIZER_COSTS (R) |
PARSE_GCOL_EXPR | PRECEDES | REPLICATE_DO_DB |
REPLICATE_DO_TABLE | REPLICATE_IGNORE_DB | REPLICATE_IGNORE_TABLE |
REPLICATE_REWRITE_DB | REPLICATE_WILD_DO_TABLE | REPLICATE_WILD_IGNORE_TABLE |
ROTATE | STACKED | STORED (R) |
VALIDATION | VIRTUAL (R) | WITHOUT |
XID |
Table 10.4 Keywords and Reserved Words Removed in MySQL 5.7 Compared to MySQL 5.6
OLD_PASSWORD |
总结
以上是詳解MySQL5.7中的關鍵字與保留字的詳細內容。更多資訊請關注PHP中文網其他相關文章!