翻譯:Identifier Name標識符命名規則

来源:http://www.cnblogs.com/f-ck-need-u/archive/2017/09/26/7597849.html
-Advertisement-
Play Games

本文為mariadb官方手冊:Identifier Names的譯文。 原文:https://mariadb.com/kb/en/library/identifier-names/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/library/iden ...


本文為mariadb官方手冊:Identifier Names的譯文。

原文:https://mariadb.com/kb/en/library/identifier-names/
我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/library/identifier-names/

Identifier Names

資料庫、表、索引、欄位、別名、視圖、存儲過程、觸發器、事件、變數分區、表空間、保存點、標簽、用戶、角色,都是常見的 標識符,它們都有特定的命名規則。

標識符可以使用反引號字元"`"引起來。將標識符使用引號引用是可選的,除非標識符中包含特殊字元或保留關鍵字。如果將SQL_MODE設置為ANSI_QUOTES,則雙引號(")也可以用來引用標識符。

使用全名(fully qualified names)的時候無需引號引用標識符,即使名稱中使用了保留關鍵字。例如,test.select只有一種解釋,因此沒有使用引號將保留字"select"包圍時也能正確解析。

無需引用的情況

下麵的字元都是有效的,它們不需要被引號引用:

  • ASCII: [0-9,a-z,A-Z$_] (數值0-9,大小寫的拉丁字元,美元符號,下劃線)
  • Extended: U+0080 .. U+FFFF

需要引用的情況

下麵的字元是有效的,但是需要被引號引用:

  • ASCII: U+0001 .. U+007F (full Unicode Basic Multilingual Plane (BMP) except for U+0000)
  • Extended: U+0080 .. U+FFFF
  • 標識符自身也可以作為標識符的一部分,只要它們被引號引用即可。

其他命名規則

以下是標識符命名相關的其他規則:

  • 標識符以Unicode(UTF-8)格式存儲。
  • 標識符可能會也可能不會區分大小寫。見Indentifier Case-sensitivity
  • 資料庫、表和欄位名稱不能以空白字元結尾。
  • 標識符名稱可以以數值開頭,但不能只包含數值,除非使用引號引用。
  • 以數值開頭且後面跟字元"e"的標識符,需要使用引號引用,它們會被解析為浮點數值。
  • 標識符中不允許包含ASCII NUL(U+0000)字元和增補字元(U+10000或更大的值)。
  • 允許使用類似5e6、9e這樣的標識符,但強烈建議不要使用它們,因為在特定的上下文中,它們會產生歧義而被當作一個數值或表達式。
  • 用戶變數不能作為標識符的一部分,也不能直接作為SQL語句中的標識符。

引用字元

普通的引用字元使用的是反引號"`",但如果設置SQL_MODE為ANSI_QUOTES,則雙引號(")也可作為引用字元。

反引號可以作為標識符的一部分,但此時它需要被引用起來。引用字元可以是反引號,但這種情況下,反引號必須使用另一個反引號進行轉義。

最大長度

  • Databases, tables, columns, indexes, constraints, stored routines, triggers, events, views, tablespaces, servers和log file groups 最大允許64個字元。
  • 組合語句標簽最大允許16個字元。
  • 別名最大允許256個字元。但CREATE VIEW語句中的欄位別名最大允許64個字元(而非最大別名長度256字元)。
  • Users最大長度80個字元。
  • Roles最大長度128個字元。
  • 多位元組字元不會計算超出字元長度限制之外的字元。

組合標識符

MariaDB允許使用單個欄位名稱來引用某個欄位,只要它不會產生歧義,或者為欄位指定表名,再或者加上資料庫名使用3段標識符的方式來引用欄位。使用句點(.)分隔各標識符,分隔符句點(.)前後可以包含空格(製表符、換行符)。

示例

使用句點分隔各標識符:

CREATE TABLE t1 (i int);

INSERT INTO t1(i) VALUES (10);

SELECT i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

SELECT t1.i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

SELECT test.t1.i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

句點可以被空格分隔:

SELECT test . t1 . i FROM t1;
+------+
| i    |
+------+
|   10 |
+------+

解決歧義:

CREATE TABLE t2 (i int);

SELECT i FROM t1 LEFT JOIN t2 ON t1.i=t2.i;
ERROR 1052 (23000): Column 'i' in field list is ambiguous

SELECT t1.i FROM t1 LEFT JOIN t2 ON t1.i=t2.i;
+------+
| i    |
+------+
|   10 |
+------+

創建一個需要被引號引用的表:

CREATE TABLE 123% (i int);
ERROR 1064 (42000): You have an error in your SQL syntax; 
  check the manual that corresponds to your MariaDB server version for the right syntax 
  to use near '123% (i int)' at line 1

CREATE TABLE `123%` (i int);
Query OK, 0 rows affected (0.85 sec)

CREATE TABLE `TABLE` (i int);
Query OK, 0 rows affected (0.36 sec)

使用雙引號作為引用字元:

CREATE TABLE "SELECT" (i int);
ERROR 1064 (42000): You have an error in your SQL syntax; 
  check the manual that corresponds to your MariaDB server version for the right syntax 
  to use near '"SELECT" (i int)' at line 1

SET sql_mode='ANSI_QUOTES';
Query OK, 0 rows affected (0.03 sec)

CREATE TABLE "SELECT" (i int);
Query OK, 0 rows affected (0.46 sec)

將引用符號作為標識符名稱的一部分:

SHOW VARIABLES LIKE 'sql_mode';
+---------------+-------------+
| Variable_name | Value       |
+---------------+-------------+
| sql_mode      | ANSI_QUOTES |
+---------------+-------------+

CREATE TABLE "fg`d" (i int);
Query OK, 0 rows affected (0.34 sec)

創建名為"*"的表(Unicode number: U+002A),它需要被引用起來。

CREATE TABLE `*` (a INT);

浮點數歧義:

CREATE TABLE 8984444cce5d (x INT);
Query OK, 0 rows affected (0.38 sec)

CREATE TABLE 8981e56cce5d (x INT);
ERROR 1064 (42000): You have an error in your SQL syntax; 
  check the manual that corresponds to your MariaDB server version for the right syntax 
  to use near '8981e56cce5d (x INT)' at line 1

CREATE TABLE `8981e56cce5d` (x INT);
Query OK, 0 rows affected (0.39 sec)

 

回到Linux系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

回到資料庫系列文章大綱:http://www.cnblogs.com/f-ck-need-u/p/7586194.html

轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7597849.html

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 先介紹一下英文釋義: pivot 英 ['pɪvət] 美 ['pɪvət] n. 樞軸;中心點;旋轉運動 vt. 以…為中心旋轉;把…置於樞軸上 vi. 在樞軸上轉動;隨…轉移 adj. 樞軸的;關鍵的 從上面就不難看出這個函數是做什麼的,旋轉,轉換,用於列和行之間對數據進行旋轉或透視轉換,同時執 ...
  • 本文為mariadb官方手冊:CREATE DATABASE的譯文。 原文:https://mariadb.com/kb/en/create-database/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/create-database/ 語法 描述 ...
  • 本文為mariadb官方手冊:SETTING CHARACTER SETS AND COLLATIONS的譯文。 原文:https://mariadb.com/kb/en/setting-character-sets-and-collations/我提交到MariaDB官方手冊的譯文:https:/ ...
  • 本文為mariadb官方手冊:SET NAMES的譯文。 原文:https://mariadb.com/kb/en/set-names/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/set-names/ 語法 描述 這會設置變數character_s ...
  • 01-基本的查詢語句 A:一些命令 B:sql優化原則 註意:掌握oracle的常規命令,在學習過程中總結一些優化原則; 02-空值和別名 A:處理列值為null oracle中的列值為null做四則運算結果都為null。處理方法:nvl(null,0) B:判斷列值為null oracle中判斷一 ...
  • 1. 修改cassandra.yaml配置文件。啟用用戶密碼登錄形式。 authenticator: PasswordAuthenticator authorizer: CassandraAuthorizer 2. 啟動cassandra,cqlsh工具使用預設角色cassandra/cassand ...
  • row_number() over(partition by col1 order by col2) 根據COL1分組可能會有多個組,每組組內根據COL2進行排序。每組內都有自動生成的序號,從1開始,有多少個分組就有多少個從1開始的序號 ...
  • 本文為mariadb官方手冊:DATABASE的譯文。 原文:https://mariadb.com/kb/en/library/database/我提交到MariaDB官方手冊的譯文:https://mariadb.com/kb/zh-cn/database/ 語法 描述 以utf8 charac ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...