现在使用 navicat,SQLyog 等图形界面或者 Hibernate 做映射生成表的时候,渐渐的会忽视掉关键字这个问题,而后续会不断的产生错误提示或者不产生错误提示但就是建表失败,一遍遍的查询代码无果,甚至开始怀疑人生,但是其实很多情况下只是使用了保留字而已,因此在设计数据库之初便要尽量的规避关键字和保留字
关键字:在 SQL 中具有重要意义的词,如 SELECT, DELETE 或 BIGINT。 在 mysql 的官网引用三个例子,在说明关键字和保留字和作用
|
|
BEGIN 并且 END 是关键字但不保留,因此它们用作标识符不需要引用。INTERVAL 是一个保留关键字,必须引用作为标识符:
|
|
例外:在限定名称中的句点后面的单词必须是一个标识符,所以即使被保留也不需要引用它:
|
|
下表是 mysql5.7x 版本的关键字和保留字
关键字和保留字
[a]ACCOUNT:加入 5.7.6(非保留) [b]ALWAYS:加入 5.7.6(非保留) [c]CHANNEL:加入 5.7.6(非保留) [d]COMPRESSION:加入 5.7.8(非保留) [e]ENCRYPTION:加入 5.7.11(非保留) [f]FILE_BLOCK_SIZE:加入 5.7.6(非保留) [g]FILTER:加入 5.7.3(非保留) [h]FOLLOWS:加入 5.7.2(非保留) [i]GENERATED:加入 5.7.6(保留) [j]GROUP_REPLICATION:加入 5.7.6(非保留) [k]INSTANCE:添加在 5.7.11(非保留) [l]JSON:加入 5.7.8(非保留) [m]MASTER_TLS_VERSION:加入 5.7.10(非保留) [n]MAX_STATEMENT_TIME:加入 5.7.4(非保留); 在 5.7.8 中删除 [o]NEVER:添加在 5.7.4(非保留) [p]NONBLOCKING:在 5.7.6 中删除 [q]OLD_PASSWORD:在 5.7.5 中删除 [r]OPTIMIZER_COSTS:加入 5.7.5(保留) [s]PARSE_GCOL_EXPR:加入 5.7.6(保留); 在 5.7.8 中没有保留 [t]PRECEDES:添加在 5.7.2(非保留) [u]REPLICATE_DO_DB:添加在 5.7.3(非保留) [v]REPLICATE_DO_TABLE:添加在 5.7.3(非保留) [w]REPLICATE_IGNORE_DB:添加在 5.7.3(非保留) [x]REPLICATE_IGNORE_TABLE:添加在 5.7.3(非保留) [y]REPLICATE_REWRITE_DB:添加在 5.7.3(非保留) [z]REPLICATE_WILD_DO_TABLE:添加在 5.7.3(非保留) [aa]REPLICATE_WILD_IGNORE_TABLE:添加在 5.7.3(非保留) [ab]ROTATE:添加在 5.7.11(非保留) [ac]STORED:加入 5.7.6(保留) [ad]VALIDATION:加入 5.7.5(非保留) [ae]VIRTUAL:添加在 5.7.6(保留) [af]WITHOUT:加入 5.7.5(非保留) [ag]XID:加入 5.7.5(非保留)