2009-10-12 125 views
16

我使用反引號構建MYSQL查詢。例如,爲mysql查詢使用反引號/反引號

SELECT `title` FROM `table` WHERE (`id` = 3) 

,而不是:

SELECT title FROM table WHERE (id = 3) 

我覺得我得到了這種做法從phpMyAdmin的出口,並從我的理解,甚至Rails會這樣的查詢。

但是現在我看到越來越少的像這樣構建的查詢,而且代碼看起來更加複雜,而且在查詢中使用反引號更復雜。即使使用SQL輔助函數,沒有它們,事情也會變得更簡單。因此,我正在考慮讓他們落後。

我想知道在這個練習中是否還有其他的含義,比如SQL(我的例子中的MySQL)解釋速度等等。您怎麼看?

回答

16

反斜槓還允許在表名/列名中使用空格和其他特殊字符(顯然除了反引號)。他們不是絕對必要的,但是安全的好主意。

如果你按照明智的規則來命名錶和列,反引號應該是不必要的。

+0

是'date'不是一個明智的列名? – 2015-07-14 21:16:03

+0

'date'是其中一個看似明智的,但是MySQL保留字。 MySQL保留字在這裏列出:https://dev.mysql.com/doc/refman/5.5/en/keywords.html – Tenner 2015-07-14 21:25:08

+0

@Tenner,如何逃避反向? – 2016-07-07 18:06:57

2

那麼,如果你確保你永遠不會意外地使用關鍵字作爲標識符,你不需要反引號。 :-)

+1

或任何空間,這樣的... – 2012-03-23 16:42:54

1

我的看法是,反引用主要用於防止使用常見SQL標識符的錯誤查詢,即LIMIT和COUNT。

3

反引號用於在mysql查詢中轉義保留關鍵字,例如你想有一個count列 - 並不罕見。

您可以使用其他特殊字符或空格在列/表/ DB名

他們並不能讓你遠離注入攻擊(如果你允許用戶以某種方式來不好的做法,反正輸入列名)

它們不是標準化的sql,只會在mysql中工作;其他dbms將使用"而不是

15

每當我看到這個討論,我試圖遊說他們的包容,因爲,好吧,答案已經隱藏在這裏了,雖然w w w without地沒有進一步思考。當我們錯誤地使用關鍵字作爲字段或表名稱時,我們可以通過各種方法避免混淆,但只有敏銳地意識到back-tick'才能帶來更大的好處!

sql語句中的每個單詞都是通過整個關鍵字散列表運行以查看是否存在衝突,因此,通過告訴編譯器,您知道我在做什麼,您不需要檢查這些單詞,因爲它們代表表格和字段名稱。速度和優雅。

乾杯, 布拉德

+4

加速SQL解析器是一個完全似是而非的原因。您期望SQL解析器獲得的加速完全是虛構的。如果你認爲有一個加速,測量和量化。否則,這是不必要的,因此不成熟的優化。 – 2013-08-23 19:03:51

1

您在http://dev.mysql.com/doc/refman/5.6/en/identifiers.html

SQL生成器讀取標識符文件通常包括反引號,因爲它是不是包括所有MySQL的列表簡單的保留字。要使用的BMP Unicode字符任何序列除了U + 0000作爲標識符,它們可以簡單地

  1. 替換所有反引號與雙反引號
  2. 環繞與單個反引號

在編寫手工查詢時,我知道(大部分)MySQL的保留字,而且我更喜歡在可能的情況下不使用反引號,因爲它更短,IMO更易於閱讀。

大多數情況下,這只是一種風格偏好 - 除非你有類似dateMy Field的字段,然後你必須使用反引號。

1.雖然看到https://bugs.mysql.com/bug.php?id=68676