2017-03-16 52 views
2

我創建這個表到MySQL數據庫:爲什麼MySql在執行數據庫表創建DDL時對我說字段名稱是保留關鍵字?

CREATE TABLE actors (
    id  BigInt UNSIGNED NOT NULL AUTO_INCREMENT, 
    sample_id VarChar(128) NOT NULL, 
    `role` Char(2) NOT NULL, 
    wiews  VarChar(16), 
    pid  VarChar(16), 
    `name` VarChar(128), 
    address VarChar(128), 
    country Char(3), 
    PRIMARY KEY (
     id 
) 
) ; 
ALTER TABLE actors COMMENT = ''; 

當我執行上面的DDL語句,我得到以下2錯誤信息:

名稱「角色」是一個保留關鍵字。您必須使用其他名稱。
名稱「name」是保留關鍵字。您必須使用其他名稱。
使用數據庫默認存儲引擎(「InnoDB」)。

因此,這意味着使用MySQL,我不能使用字段名作用因爲關鍵詞被保留到MySql?

問題是,另一個人給我具體創建這些表(包括字段的名稱),因爲我認爲應用程序期望這個字段名稱。

那麼你確認我不能用這兩個名字創建字段?

+0

試過[Rextester](http://rextester.com/FKP63771)您​​的查詢工作 –

+0

@StefanoZanini我正在使用數據庫工作臺5,它給了我這個錯誤信息... – AndreaNobili

+0

[MySQL 5.7參考手冊 - 關鍵字和保留字](https://dev.mysql.com/doc/refman/5.7/en/keywords.html) – roetnig

回答

0

的問題錯誤消息似乎並沒有來自MySQL的,因爲在MySQL的關於SQL語句的非法使用關鍵字的錯誤信息會說:

ERROR 1064(42000):您有一個錯誤的SQL語法附近「的角色......」

更何況,在這個問題既namerole字段名反引號用(`)包圍的事實。即使保留字可以用作對象標識符,如果它被反引號括起來的話。

由於@St在評論中指出:代碼rextester

運行。因此,我檢查了Database Workbench 5文檔並在introducing the various editors部分,它說:

的對象編輯器還將檢查對於保留關鍵字和SQL 92/99標準關鍵字,根據您的數據庫引擎功能,它會在將創建語句發送到服務器之前發出警告或錯誤。

結論:您的GUI會檢查sql語句的保留字並阻止sql執行。如果您嘗試通過另一個GUI或CLI執行它,則不會有任何錯誤。

如果可以禁用或降級爲警告,您可能需要查看Database Workbench 5文檔。

相關問題