閱讀93 返回首頁    go iPhone_iPad_Mac_手機_平板_蘋果apple


SQL模式__SQL語法參考_雲數據庫 OceanBase-阿裏雲

OceanBase 服務器可以以不同的 SQL 模式操作,並且可以為不同客戶端應用不同模式。這樣每個應用程序可以根據自己的需求來定製服務器的操作模式。

模式定義 OceanBase 應支持哪些 SQL 語法,以及應執行哪種數據驗證檢查。這樣可以更容易地在不同的環境中使用 OceanBase。

可以用--sql-mode="modes"選項來設置SQL模式。“嚴格模式”,表示至少STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES 被啟用的模式。

  • ALLOW_INVALID_DATES 在嚴格模式下不要檢查全部日期。隻檢查1到12之間的月份和1到31之間的日。這在 Web 應用程序中,當你從三個不同的字段獲取年、月、日,並且想要確切保存用戶插入的內容(不進行日期驗證)時很重要。該模式適用於 DATE 和DATETIME 列。不適合 TIMESTAMP 列,TIMESTAMP 列需要驗證日期。啟用嚴格模式後,服務器需要合法的月和日,不僅僅是分別在 1 到 12 和 1到 31 範圍內。例如,禁用嚴格模式時'2004-04-31'是合法的,但啟用嚴格模式後是非法的。要想在嚴格模式允許遮掩固定日期,還應啟用 ALLOW_INVALID_DATES。

  • ANSI_QUOTES 將‘"’視為識別符引號(‘`’引號字符),不要視為字符串的引號字符。在 ANSI 模式,你可以仍然使用‘`’來引用識別符。啟用 ANSI_QUOTES 後,你不能 用雙引號來引用字符串,因為它被解釋為識別符。

  • HIGH_NOT_PRECEDENCE NOT 操作符的優先順序是表達式, 例如 NOT a BETWEEN b AND c 被解釋為 NOT (a BETWEEN b AND c)。如果需要表達式被解釋為(NOT a) BETWEEN b AND c,則啟 用 HIGH_NOT_PRECEDENCESQL 模式,可以獲得 NOT 的更高優先級的結果。

  • NO_UNSIGNED_SUBTRACTION 在減運算中,如果某個操作數沒有符號,不要將結果標記為 UNSIGNED。

  • ONLY_FULL_GROUP_BY 不要讓 GROUP BY 部分中的查詢指向未選擇的列。

  • PAD_CHAR_TO_FULL_LENGTH 默認情況下,CHAR列值檢索時後麵的空格會被截斷,在PAD_CHAR_TO_FULL_LENGTH 模式下,截斷不會發生。這種模式不適用於VARCHAR列值。

  • PIPES_AS_CONCAT 將||視為字符串連接操作符(+)(同 CONCAT()),而不視為 OR。

  • REAL_AS_FLOAT 將 REAL 視為 FLOAT 的同義詞,而不是 DOUBLE 的同義詞。

  • STRICT_ALL_TABLES 為所有存儲引擎啟用嚴格模式。非法數據值被拒絕。

  • STRICT_TRANS_TABLES 為事務存儲引擎啟用嚴格模式,也可能為非事務存儲引擎啟用嚴格模式。

嚴格模式控製 OceanBase 如何處理非法或丟失的輸入值。有幾種原因可以使一個值為非法。例如,數據類型錯誤,不適合列,或超出範圍。當新插入的行不包含某列的沒有顯示定義 DEFAULT 子句的值,則該值被丟失。

對於事務表,當啟用 STRICT_ALL_TABLES 或 STRICT_TRANS_TABLES 模式時,如果語句中有非法或丟失值,則會出現錯誤。語句被放棄並滾動。

對於非事務表,如果插入或更新的第 1 行出現壞值,兩種模式的行為相同。語句被放棄,表保持不變。如果語句插入或修改多行,並且壞值出現在第 2 或後麵的行,結果取決於啟用了哪個嚴格選項:

  • 對於 STRICT_ALL_TABLES,OceanBase 返回錯誤並忽視剩餘的行。但是,在這 種情況下,前麵的行已經被插入或更新。這說明你可以部分更新,這可能不是 你想要的。要避免這點,最好使用單行語句,因為這樣可以不更改表即可以放 棄。
  • 對於 STRICT_TRANS_TABLES,OceanBase 將非法值轉換為最接近該列的合法值 並插入調整後的值。如果值丟失,MySQL 在列中插入隱式 默認值。在任何情 況下,MySQL 都會生成警告而不是給出錯誤並繼續執行語句。

    嚴格模式不允許非法日期,例如'2004-04-31'。它不允許禁止日期使用“零” 部分,例如'2004-04-00'或“零”日期。

    如果你不使用嚴格模式(即不啟用 STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES 模式),對於非法或丟失的值,OceanBase 將插入調整後的 值並給出警告。

最後更新:2016-11-23 16:03:54

  上一篇:go 事務處理語言__SQL語法參考_雲數據庫 OceanBase-阿裏雲
  下一篇:go 轉換付費模式__購買指南_雲數據庫 MongoDB 版-阿裏雲