這是MySQL參考手冊;它記載了MySQL版本3.23.7-alpha。
MySQL 是一個(gè)快速、多線(xiàn)程、多用戶(hù)和強壯的SQL數據庫服務(wù)器。
對Unix和 OS/2 平臺,MySQL基本上是免費的;但對微軟平臺,你在30 天的試用期后必須獲得一個(gè)MySQL 許可證。詳見(jiàn)第三節 MySQL許可證和技術(shù)支持。
MySQL 主頁(yè)提供有關(guān)MySQL的最新信息。
對于MySQL能力的討論,詳見(jiàn)1.4 MySQL 的主要特征。
對于安裝指南,見(jiàn)4 安裝 MySQL。對于有關(guān)移植MySQL到新機器或操作系統的技巧,參見(jiàn)G 對移植到其他系統的說(shuō)明。
有關(guān)從 3.21 版升級的信息,詳見(jiàn)4.16.2 從一個(gè) 3.21 版本升級到 3.22 。
MySQL的入門(mén)教程,見(jiàn)8 MySQL 教程。
SQL和基準信息的例子,見(jiàn)基準目錄(在分發(fā)中的‘sql-bench‘目錄)。
對于新特征和錯誤修復一個(gè)歷史記錄,見(jiàn)D MySQL的變遷。
對于當前已知錯誤和功能缺陷的一張列表,見(jiàn)E MySQL已知錯誤和設計缺陷。
未來(lái)計劃,見(jiàn)F 我們想要在未來(lái)加入到MySQL 的計劃表( TODO )。
這個(gè)計劃的所有貢獻者的名單,見(jiàn)C MySQL 的貢獻者。
重要:
將臭蟲(chóng)(錯誤)報告、問(wèn)提和建議發(fā)到郵件列表(原文未提供)。
對源代碼分發(fā),mysqlbug 腳本可在‘scripts’目錄下找到。 對二進(jìn)制的分發(fā),mysqlbug可在‘bin’目錄下找到。
如果你有任何關(guān)于這本手冊的增補或修正的任何建議,請將它們發(fā)給手冊小組(docs@mysql.com )。
MySQL是一個(gè)真正的多用戶(hù)、多線(xiàn)程SQL數據庫服務(wù)器。SQL(結構化查詢(xún)語(yǔ)言)是世界上最流行的和標準化的數據庫語(yǔ)言。MySQL是以一個(gè)客戶(hù)機/服務(wù)器結構的實(shí)現,它由一個(gè)服務(wù)器守護程序mysqld和很多不同的客戶(hù)程序和庫組成。
SQL是一種標準化的語(yǔ)言,它使得存儲、更新和存取信息更容易。例如,你能用SQL語(yǔ)言為一個(gè)網(wǎng)站檢索產(chǎn)品信息及存儲顧客信息,同時(shí)MySQL也足夠快和靈活以允許你存儲記錄文件和圖像。
MySQL 主要目標是快速、健壯和易用。最初是因為我們需要這樣一個(gè)SQL服務(wù)器,它能處理與任何可不昂貴硬件平臺上提供數據庫的廠(chǎng)家在一個(gè)數量級上的大型數據庫,但速度更快,MySQL就開(kāi)發(fā)出來(lái)。自1996年以來(lái),我們一直都在使用MySQL,其環(huán)境有超過(guò) 40 個(gè)數據庫,包含 10,000個(gè)表,其中500多個(gè)表超過(guò)7百萬(wàn)行,這大約有100 個(gè)吉字節(GB)的關(guān)鍵應用數據。
MySQL建立的基礎是業(yè)已用在高要求的生產(chǎn)環(huán)境多年的一套實(shí)用例程。盡管MySQL仍在開(kāi)發(fā)中,但它已經(jīng)提供一個(gè)豐富和極其有用的功能集。
MySQL的官方發(fā)音是“My Ess Que Ell”(不是 MY-SEQUEL )。
目前這本手冊有Texinfo、普通文本、Info、HTML、PostScript和 PDF 等格式的版本。因為它們的長(cháng)度,PostScript和 PDF 版本沒(méi)有包括在主要的MySQL分發(fā)中,但是可從http://www.mysql.com 獲得單獨的下載。
主要的文檔是Texinfo文件, HTML版本自動(dòng)地用一個(gè)texi2html改進(jìn)版本生成。普通文本和Info版本用makeinfo生成。 Postscript版本由texi2dvi和dvips生成。PDF 版本用pdftex生成。
本手冊由David Axmark, Michael (Monty) Widenius, Paul DuBois and Kim Aldale維護。 而其他的貢獻者,見(jiàn)C MySQL貢獻者。
這本手冊使用了一定文字格式的約定:
constant / 固定寬度mysqladmin如何工作,用--help選項調用它”。當命令顯示出準備由一個(gè)特定的程序執行時(shí),程序由命令所顯示的提示符指出。例如,shell> 表明你從你的登錄外殼執行一個(gè)命令,而mysql>表明你從mysql客戶(hù)執行命令:
shell> 在這鍵入一個(gè)shell命令mysql> 在這里鍵入一個(gè)mysql命令
shell命令用 Bourne shell語(yǔ)法顯示。如果你正在使用csh風(fēng)格的外殼,你可能需要用略微不同的方式發(fā)出命令。例如,設置一個(gè)環(huán)境變量和運行一個(gè)命令的序列在 Bourne shell語(yǔ)法看起來(lái)像這樣:
shell> VARNAME=value some_command
對于csh,你將執行這樣的序列:
shell> setenv VARNAME valueshell> some_command
數據庫、表和列名字經(jīng)常必須被代入命令中。為表明這種代入是必要的,本手冊使用db_name、tbl_name和col_name。例如,你可能看到象這樣的語(yǔ)句:
mysql> SELECT col_name FROM db_name.tbl_name;
這意味著(zhù)如果你想輸入類(lèi)似的語(yǔ)句,你將提供你自己數據庫、表和列的名字,也許像這樣:
mysql> SELECT author_name FROM biblio_db.author_list;
SQL語(yǔ)句可以寫(xiě)成大寫(xiě)或小寫(xiě)的。當本手冊顯示SQL語(yǔ)句時(shí),如果討論這些關(guān)鍵字,大寫(xiě)被用于特定的關(guān)鍵字(強調它們)而小寫(xiě)被用于語(yǔ)句的其他部分。因此你可能在討論SELECT語(yǔ)句時(shí)看到如下顯示:
mysql> SELECT count(*) FROM tbl_name;
另一方面,在討論COUNT()函數時(shí),語(yǔ)句將寫(xiě)成這樣:
mysql> select COUNT(*) from tbl_name;
如果不有意地特別強調,所有的關(guān)鍵字一律寫(xiě)成大寫(xiě)。
在句法描述中,方括號(‘[‘和‘]‘)被用來(lái)表示任選的詞或子句:
DROP TABLE [IF EXISTS] tbl_name
當一個(gè)語(yǔ)法元素由很多選擇組成時(shí),各選擇用垂直線(xiàn)分開(kāi)(‘|‘)。當可能從一組選擇中選擇一個(gè)成員時(shí),選擇在方括號內被列出。當必須從一組選擇中選擇一個(gè)成員時(shí),選擇在花括號內被列出(‘{‘和‘}‘):
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str){DESCRIBE | DESC} tbl_name {col_name | wild}我們曾經(jīng)開(kāi)始打算利用mSQL用我們自己的快速底層(ISAM)實(shí)用程序連接我們的數據庫表,然而,在一些測試以后我們得到出結論:mSQL對我們的需求來(lái)說(shuō)不夠快速和靈活。這導致了一個(gè)連接我們數據庫的新SQL接口,但它幾乎有與mSQL相同的應用編程接口。選擇這個(gè)應用編程接口以方便第三方的代碼移植。
MySQL名字的由來(lái)不是非常清楚。我們的基目錄和很多的庫和工具具有前綴“my”已超過(guò)10年歷史,然而,Monty的女兒(年輕幾歲的)也被命名"my"。因此其中哪一個(gè)原因給MySQL起了這個(gè)名字仍然是一個(gè)謎,甚至對我們。
下表描述MySQL一些重要的特征:
FLOAT、DOUBLE、CHAR、VARCHAR、TEXT、BLOB、DATE、TIME、DATETIME、 TIMESTAMP、YEAR、SET和ENUM類(lèi)型。 見(jiàn)7.3 列類(lèi)型。 SELECT和WHERE部分支持全部運算符和函數,例如: mysql> SELECT CONCAT(first_name, " ", last_name) FROM tbl_name WHERE income/dependents > 10000 AND age > 30;
GROUP BY和ORDER BY子句,支持聚合函數( COUNT()、COUNT(DISTINCT)、AVG()、STD()、SUM()、 MAX()和MIN() )。 LEFT OUTER JOIN和ODBC語(yǔ)法。 CHAR或VARCHAR字段的前綴。 INSERT插入一個(gè)表列的子集,那些沒(méi)用明確給定值的列設置為他們的缺省值。 libtool。 purify)。 myisamchk,一個(gè)檢查、優(yōu)化和修復數據庫表的快速實(shí)用程序,詳見(jiàn)13 維護 MySQL安裝。 DELETE、INSERT、REPLACE和UPDATE 返回有多少行被改變(受影響)。 ABS是一個(gè)有效的列名字。對函數調用的唯一限制是函數名與隨后的“(”不能有空格。詳見(jiàn)7.31 MySQL對保留字很挑剔嗎?。 --help或-?獲得聯(lián)機幫助。 SHOW命令可用來(lái)檢索數據庫、表和索引的信息,EXPLAIN命令可用來(lái)確定優(yōu)化器如何解決一個(gè)查詢(xún)。
本小節回答這樣的問(wèn)題:“MySQL的穩定程度?”和 “我能在本項目中依賴(lài)MySQL嗎?”。這里我們將試圖澄清一些問(wèn)題并且回答似乎很多人關(guān)心的更重要的問(wèn)題。本節已經(jīng)與從郵件列表(它在報導錯誤是很活躍的)收集了的信息綜合在一起。
對TcX,MySQL在我們自1996中期開(kāi)始的計劃中運行沒(méi)有發(fā)生任何問(wèn)題。當MySQL被更公開(kāi)地發(fā)布時(shí),我們注意到了有一些 “未測試代碼”片斷很快地被不同于我們的查詢(xún)方式的新用戶(hù)發(fā)現。每個(gè)新版本比前一個(gè)都有更少的可移植性問(wèn)題(盡管每個(gè)發(fā)行有許多新功能),并且我們希望有可能把下一個(gè)版本之一標記為“穩定”的。
每個(gè)MySQL的發(fā)行都是可用的,并且只有當用戶(hù)使用從“灰色地帶”來(lái)的代碼時(shí)才有問(wèn)題,當然,不知情的用戶(hù)不能知道灰色地帶是什么;本小節嘗試揭示我們目前已知的東西。這里的描述涉及MySQL 3. 22.x 版本。所有已知和報告的錯誤都會(huì )在最新的版本被更正,除了在錯誤小節中列出的與“設計n”有關(guān)的錯誤。詳見(jiàn)E MySQL已知的錯誤和設計缺陷。
MySQL以多層結構和不同的獨立模塊編寫(xiě),這些模塊列舉在下面以表明它們中的每一個(gè)是如何很好地被測試過(guò):
mysql、mysqladmin和mysqlshow、mysqldump及mysqlimport。fcntl())有很大問(wèn)題,在這些情況下,你應該用選項--skip-locking運行MySQL守護程序。當使用NFS掛載的文件系統,已知在一些 Linux 系統上和SunOS上出現問(wèn)題。fcntl()調用,它通過(guò)使用mysqld的--skip-locking選項解決。一些人已經(jīng)報告了0.5版中的鎖定問(wèn)題。的SELECT語(yǔ)句通常在一個(gè)時(shí)幀內完成,因此不應該有一個(gè)mutex 鎖定/線(xiàn)程的把戲。LOAD DATA ... ,INSERT ... SELECT --穩定ALTER TABLE --穩定mysqlaccess --穩定GRANT -- Gamma TcX 為付費客戶(hù)提供電子郵件的支持,但是MySQL郵件列表通常提供常見(jiàn)問(wèn)題的答案,錯誤通常馬上用一個(gè)補丁修補,對嚴重的錯誤,幾乎總是有新的版本發(fā)行。
MySQL本身己沒(méi)有2000年有問(wèn)題( Y2K ):
2069年前沒(méi)有日期問(wèn)題, 所有2位年份被認為在1970年到2069年的范圍,這意味著(zhù)如果在一個(gè)year類(lèi)型的列中存儲的01,MySQL把它當作2001。 YEAR類(lèi)型的列能在一個(gè)字節中存儲0年和1901年到2155年,并用使用2或4位顯示它們。 你可以用一種不是Y2K-safe的方式使用 MySQL應用程序來(lái)深入該問(wèn)題。例如,許多老的應用程序使用2位數字(它有二義性)而非4位數字存儲或操作年份,這個(gè)問(wèn)題可能與使用諸如00或99作為“丟失的”值的提示的應用程序混淆起來(lái)。
很不幸,這些問(wèn)題可能很難修復,因為不同的應用程序可能由不同程序員編寫(xiě),其中每一個(gè)可能使用了不同的約定和日期處理函數。
這里是簡(jiǎn)單的示范,顯示MySQL在 2030 年之前沒(méi)有任何日期問(wèn)題。
mysql> DROP TABLE IF EXISTS y2k;mysql> CREATE TABLE y2k (date date, date_time datetime, time_stamp timestamp);mysql> INSERT INTO y2k VALUES ("1998-12-31","1998-12-31 23:59:59",19981231235959);mysql> INSERT INTO y2k VALUES ("1999-01-01","1999-01-01 00:00:00",19990101000000);mysql> INSERT INTO y2k VALUES ("1999-09-09","1999-09-09 23:59:59",19990909235959);mysql> INSERT INTO y2k VALUES ("2000-01-01","2000-01-01 00:00:00",20000101000000);mysql> INSERT INTO y2k VALUES ("2000-02-28","2000-02-28 00:00:00",20000228000000);mysql> INSERT INTO y2k VALUES ("2000-02-29","2000-02-29 00:00:00",20000229000000);mysql> INSERT INTO y2k VALUES ("2000-03-01","2000-03-01 00:00:00",20000301000000);mysql> INSERT INTO y2k VALUES ("2000-12-31","2000-12-31 23:59:59",20001231235959);mysql> INSERT INTO y2k VALUES ("2001-01-01","2001-01-01 00:00:00",20010101000000);mysql> INSERT INTO y2k VALUES ("2004-12-31","2004-12-31 23:59:59",20041231235959);mysql> INSERT INTO y2k VALUES ("2005-01-01","2005-01-01 00:00:00",20050101000000);mysql> INSERT INTO y2k VALUES ("2030-01-01","2030-01-01 00:00:00",20300101000000);mysql> INSERT INTO y2k VALUES ("2050-01-01","2050-01-01 00:00:00",20500101000000);mysql> SELECT * FROM y2k;+------------+---------------------+----------------+| date | date_time | time_stamp |+------------+---------------------+----------------+| 1998-12-31 | 1998-12-31 23:59:59 | 19981231235959 || 1999-01-01 | 1999-01-01 00:00:00 | 19990101000000 || 1999-09-09 | 1999-09-09 23:59:59 | 19990909235959 || 2000-01-01 | 2000-01-01 00:00:00 | 20000101000000 || 2000-02-28 | 2000-02-28 00:00:00 | 20000228000000 || 2000-02-29 | 2000-02-29 00:00:00 | 20000229000000 || 2000-03-01 | 2000-03-01 00:00:00 | 20000301000000 || 2000-12-31 | 2000-12-31 23:59:59 | 20001231235959 || 2001-01-01 | 2001-01-01 00:00:00 | 20010101000000 || 2004-12-31 | 2004-12-31 23:59:59 | 20041231235959 || 2005-01-01 | 2005-01-01 00:00:00 | 20050101000000 || 2030-01-01 | 2030-01-01 00:00:00 | 20300101000000 || 2050-01-01 | 2050-01-01 00:00:00 | 00000000000000 |+------------+---------------------+----------------+13 rows in set (0.00 sec)這表示DATE和DATETIME類(lèi)型將不會(huì )有未來(lái)日期的任何問(wèn)題(它們處理日期到 9999 )。
TIMESTAMP類(lèi)型被用來(lái)存儲當前時(shí)間,有一個(gè)僅2030-01-01的上限。TIMESTAMP在32位的機器上(有符號值)有一個(gè)從1970到2030的范圍,在64位機器上它處理時(shí)間可達2106(無(wú)符號值)。
盡管MySQL是順應Y2K的,但提供無(wú)二義性的輸入是你的責任。對于MySQL處理二義性日期的輸入(包含2位數字年份)的規則,詳見(jiàn)7.3.6.1 Y2K 問(wèn)題和日期類(lèi)型。
在MySQL郵件列表上,這本書(shū)被多人推薦:
Judith S. Bowman, Sandra L. Emerson and Marcy DarnovskyThe Practical SQL Handbook: Using Structured Query LanguageSecond EditionAddison-WesleyISBN 0-201-62623-3http://www.awl.com
這本書(shū)也接受了 MySQL 用戶(hù)的一些建議:
Martin GruberUnderstanding SQLISBN 0-89588-644-8Publisher Sybex 510 523 8233Alameda, CA USA
一本SQL語(yǔ)言教程可在 http://www.geocities.com/SiliconValley/Vista/2207/sql1.html 找到。
SQL in 21 Tagen (用德語(yǔ)寫(xiě)的網(wǎng)上書(shū)籍) http://www.mut.de/leseecke/buecher/sql/inhalt.htm 。
MySQLmSQL mSQL TCL 補丁 DBI/DBD. DBI/DBD modules homepage 也有很多網(wǎng)頁(yè)使用 MySQL。詳見(jiàn)A 一些 MySQL 用戶(hù)。將任何新增發(fā)送到這張表中,并在某處加上 MySQL 標識(在一個(gè)“使用工具”的頁(yè)面或類(lèi)似的地方)。
聯(lián)系客服