一、MySQL中單引號(hào)和反引號(hào)的區(qū)別
MySQL / MariaDB 數(shù)據(jù)庫(kù)中,使用反引號(hào)、雙引號(hào)和單引號(hào)的規(guī)律可以概括為以下三點(diǎn):?jiǎn)我?hào)( ‘ )和雙引號(hào)( ” ) 用于字符串和日期,作用相同。反引號(hào)( )用于表名和列名。數(shù)字作為數(shù)值時(shí),不要用任何引號(hào),保留符、關(guān)鍵字不要用任何引號(hào)。
單引號(hào)、雙引號(hào)
單引號(hào)( ‘ ) 用于 里包含的字符串和日期。VALUES()
當(dāng)然 MySQL 也支持雙引號(hào)括字符串,它與單引號(hào)可以互換使用,不過(guò)如果沒(méi)有什么特殊原因,還是盡量選擇用單引號(hào)。 雙引號(hào)很有可能引起未知錯(cuò)誤。
MySQL 里的 和 也需要使用單引號(hào)括起來(lái)作為DATEDATETIME字符串,比如 。 當(dāng)然,某些版本「時(shí)間」你不用單引號(hào)也能 ,不過(guò)勸你不要這么做,都括起來(lái)養(yǎng)成良好的編程習(xí)慣,安全又省心?!?970-01-01 00:00:00’INSERT INTO
反引號(hào)
反引號(hào)()[反引號(hào)在鍵盤的左上角],用于標(biāo)記「表名」和「列名」,通常情況加不加都行。 但如果「表名」或「列名」為 MySQL 保留符,那么一定要加反引號(hào)作為區(qū)分。
不過(guò)建議盡量避免使用保留符作為表名和列名,以免引起未知錯(cuò)誤。
不用引號(hào)的情況
MySQL 關(guān)鍵字、保留字、函數(shù),比如 和 都不能使用引號(hào)括起來(lái)。 如果使用單引號(hào)把函數(shù)括起來(lái),那么對(duì)于 MySQL 來(lái)說(shuō),它就變成了字符串,失去了函數(shù)的功能。NULLNOW()’NOW()’
總結(jié)
一定要掌握好如何在 MySQL / MariaDB 中,使用或不使用引號(hào)的規(guī)律,亂用引號(hào)是入門開發(fā)者最長(zhǎng)出現(xiàn)的問(wèn)題,特別是因?yàn)橐?hào)引起的錯(cuò)誤,報(bào)錯(cuò)中很難提示出來(lái)。 這種錯(cuò)誤很可能讓你要花好久時(shí)間,才能排查出來(lái)。 而實(shí)際上引號(hào)的使用并沒(méi)有多復(fù)雜。 你可以保存本教程中的概覽圖,待以后備查和復(fù)習(xí)。
延伸閱讀:
二、id的一些典型的類型
整型:整型通常來(lái)說(shuō)是優(yōu)異的選擇,這是因?yàn)檎偷倪\(yùn)算和比較都很快,而且還可以設(shè)置 AUTO_INCREMENT 屬性自動(dòng)遞增。ENUM 和 SET:通常不會(huì)選擇枚舉和集合作為 id,然后對(duì)于那些包含有“類型”、“狀態(tài)”、“性別”這類型的列來(lái)說(shuō)是挺合適的。例如我們需要有一張表存儲(chǔ)下拉菜單時(shí),通常會(huì)有一個(gè)值和一個(gè)名稱,這個(gè)時(shí)候值使用枚舉作為主鍵也是可以的。字符串:盡可能地避免使用字符串作為 id,一是字符串占據(jù)的空間更大,二是通常會(huì)比整型慢。選用字符串作為 id 時(shí),還需要特別注意 MD5、SHA1和 UUID 這些函數(shù)。每個(gè)值是在很大范圍的隨機(jī)值,沒(méi)有次序,這會(huì)導(dǎo)致插入和查詢更慢:插入的時(shí)候,由于建立索引是隨機(jī)位置(會(huì)導(dǎo)致分頁(yè)、隨機(jī)磁盤訪問(wèn)和聚集索引碎片),會(huì)降低插入速度。查詢的時(shí)候,相鄰的數(shù)據(jù)行在磁盤或內(nèi)存上上可能跨度很大,也會(huì)導(dǎo)致速度更慢。如果確實(shí)要使用 UUID 值,應(yīng)當(dāng)移除掉“-”字符,或者是使用 UNHEX 函數(shù)將其轉(zhuǎn)換為16字節(jié)數(shù)字,并使用 BINARY(16)存儲(chǔ)。然后可以使用 HEX 函數(shù)以十六進(jìn)制的方式進(jìn)行獲取。UUID 產(chǎn)生的方法有很多,有些是隨機(jī)分布的,有些是有序的,但是即便是有序的性能也不如整型。