




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、MySQL中文參考手冊 HYPERLINK / / HYPERLINK / 郵件群發(fā) 5.1MySQL對ANSI SQL92擴(kuò)充 MySQL包含了一些可能在其他SQL數(shù)據(jù)庫找不到的擴(kuò)充。要注意如果你使用他們,你的代碼將不與其他SQL服務(wù)器兼容。在一些情況下,你可以編寫包括MySQL擴(kuò)展的代碼,但是仍然是可移植的,通過使用/*! . */形式的注釋。在這種情況下,MySQL將進(jìn)行詞法分析并且執(zhí)行在注釋內(nèi)的代碼,好像它是任何其它MySQL語句,但是其他SQL服務(wù)器將忽略擴(kuò)展。例如: SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WH
2、ERE . 如果你在#!#后增加一個版本數(shù)字,該語法將僅在MySQL版本是等于或比使用的版本數(shù)字新時才執(zhí)行: CREATE /*!32302 TEMPORARY */ TABLE (a int); 上面的意思是如果你有3.23.02或更新,那么MySQL將使用TEMPORARY關(guān)鍵詞。 MySQL擴(kuò)展被列在下面: 字段類型MEDIUMINT、SET、ENUM和不同的BLOB和TEXT類型。 字段屬性AUTO_INCREMENT、BINARY、UNSIGNED和ZEROFILL。 缺省地,所有的字符串比較是忽略大小寫的,由當(dāng)前的字符集決定了(缺省為ISO-8859-1 Latin1)排序順序。如
3、果你不喜歡這樣,你應(yīng)該用BINARY屬性或使用BINARY強(qiáng)制符聲明列,它導(dǎo)致根據(jù)MySQL服務(wù)器主機(jī)的ASCII順序進(jìn)行排序。 MySQL將每個數(shù)據(jù)庫映射一個MySQL數(shù)據(jù)目錄下面的目錄,將數(shù)據(jù)庫表映射到數(shù)據(jù)庫目錄下的數(shù)據(jù)庫文件名。這有2個含意: 在區(qū)分大小寫文件名的操作系統(tǒng)(象大多數(shù) Unix 系統(tǒng)一樣)上的MySQL中數(shù)據(jù)庫名字和表名是區(qū)分大小寫的。如果你有困難記得表名,接受一個一致的約定,例如總是用小寫名字創(chuàng)建數(shù)據(jù)庫和表。 數(shù)據(jù)庫、表、索引、列或別名可以以數(shù)字開始(但是不能僅由數(shù)字組成)。 你可以使用標(biāo)準(zhǔn)的系統(tǒng)命令備份、重命名、移動、刪除和拷貝表。例如,重命名一個表,重命名“.MYD”
4、、“.MYI”和“.frm”文件為相應(yīng)的表。 在SQL語句中,你可以用db_name.tbl_name語法訪問不同數(shù)據(jù)庫中的表。一些SQL服務(wù)器提供同樣的功能但是稱它們?yōu)檫@User space(用戶空間)。MySQL不支持類似在create table ralph.my_table.IN my_tablespace中的表空間。 LIKE在數(shù)字列上被允許。 在一SELECT語句里面使用INTO OUTFILE和STRAIGHT_JOIN。見7.12 SELECT句法. 在一個SELECT語句中SQL_SMALL_RESULT選項(xiàng)。 EXPLAIN SELECT得到如何聯(lián)結(jié)表的描述。 在一個CRE
5、ATE TABLE語句里面使用索引、在字段前綴上的索引和使用INDEX或KEY。見7.7 CREATE TABLE 句法。 CREATE TABLE使用TEMPORARY或IF NOT EXISTS。 使用COUNT(DISTINCT list),這里“l(fā)ist”超過一個元素。 在一個ALTER TABLE語句里面使用CHANGE col_name、DROP col_name或DROP INDEX。見7.8 ALTER TABLE句法。 在一個ALTER TABLE里面語句使用IGNORE。 在一個ALTER TABLE語句中使用多重ADD、ALTER、DROP或CHANGE子句。 使用帶關(guān)鍵
6、詞IF EXISTS的DROP TABLE。 你能用單個DROP TABLE語句拋棄多個表。 DELETE語句的LIMIT子句。 INSERT和REPLACE語句的DELAYED子句。 INSERT, REPLACE, DELETE和UPDATE語句的LOW_PRIORITY子句。 使用LOAD DATA INFILE。在多數(shù)情況下,這句法與Oracle的LOAD DATA INFILE兼容。見7.16 LOAD DATA INFILE 句法。 OPTIMIZE TABLE語句。見7.9 OPTIMIZE TABLE句法。 SHOW語句。見7.21 SHOW句法(得到表、列等的信息)。 字符串
7、可以被“”或“#”包圍,而不只是“#”。 使用“”轉(zhuǎn)義字符。 SET OPTION語句。見7.25 SET OPTION句法。 你不需要命名所有在GROUP BY部分的被選擇的列。這為一些很特定的情況給出更好的性能,而不是一般的查詢。見7.4.13 用于GROUP BY子句的函數(shù)。 為了方便來自于SQL環(huán)境其他為用戶,MySQL對許多函數(shù)支持別名。例如,所有的字符串功能都支持ANSI SQL句法和 ODBC句法。 MySQL理解|和&意味著邏輯的OR和AND,就像在C程序語言中。在MySQL中,|和OR是同義詞,&和AND是同義詞。正因?yàn)檫@個好的句法,MySQL對字符串并置的不支持ANSI S
8、QL |操作符;相反使用CONCAT(),因?yàn)镃ONCAT()接受任何數(shù)量的參數(shù),很容易把|操作符使用變換到MySQL。 CREATE DATABASE或DROP DATABASE。見7.5 CREATE DATABASE句法。 %操作符是MOD()一個同義詞,即,N % M等價(jià)于MOD(N,M)。%支持C程序員并與PostgreSQL兼容。 =, , =,=, , , AND, OR或LIKE操作符可以放在SELECT語句的FROM左邊用于比較列。例如: mysql SELECT col1=1 AND col2=2 FROM tbl_name; LAST_INSERT_ID()函數(shù)。見20.
9、4.29 mysql_insert_id()。 擴(kuò)展的正則表達(dá)式操作符REGEXP和NOT REGEXP。 CONCAT()或CHAR()有一個參數(shù)或超過2個參數(shù)。(在MySQL中,這些函數(shù)可取任何數(shù)量的參數(shù)。) BIT_COUNT(), CASE, ELT(), FROM_DAYS(), FORMAT(), IF(), PASSWORD(), ENCRYPT(), md5(), ENCODE(), DECODE(), PERIOD_ADD(), PERIOD_DIFF(), TO_DAYS(),或WEEKDAY()函數(shù)。 使用TRIM()整修子串。ANSI SQL 只支持單個字符的刪除。 G
10、ROUP BY函數(shù)STD(), BIT_OR()和BIT_AND()。 使用REPLACE而不是DELETE+INSERT。見7.15 REPLACE句法。 FLUSH flush_option語句。 在一個語句用:=設(shè)置變量的可能性: SELECT a:=SUM(total),b=COUNT(*),a/b AS avg FROM test_table; SELECT t1:=(t2:=1)+t3:=4,t1,t2,t3; 5.2 以ANSI模式運(yùn)行MySQL 如果你用-ansi選項(xiàng)啟動mysqld,MySQL的下列行為改變。 |是字符串并置而不是OR。 可在一個函數(shù)名字之間與“(”有任何數(shù)量
11、的空格。這也使所有的功能名字成為保留詞。 將是一個標(biāo)識符引號字符(象MySQL 引號字符一樣)而不是一個字符串引號字符。 REAL將是FLOAT一個同義詞,不是DOUBLE一個同義詞。 5.3 MySQL相比ANSI SQL92的差別 我們嘗試使得MySQL遵照ANSI SQL標(biāo)準(zhǔn)和ODBC SQL標(biāo)準(zhǔn),但是在一些情況下,MySQL做一些不同的事情: -只是一個注釋,如果后面跟一個白空字符。見5.4.7 -#作為一個注釋的開始。 對于VARCHAR列,當(dāng)值被存儲時,拖后的空格被刪除。見E MySQL已知的錯誤和設(shè)計(jì)缺限。 在一些情況下,CHAR列偷偷地被改變?yōu)閂ARCHAR列。見7.7.1 平
12、靜的列指定變化。 當(dāng)你刪除一個表時,對表的權(quán)限不自動地廢除。你必須明確地發(fā)出一個REVOKE來廢除對一個表的權(quán)限。見7.26 GRANT和REVOKE句法。 5.4 MySQL缺乏的功能 下列功能在當(dāng)前的MySQL版本是沒有的。對于一張優(yōu)先級表指出何時新擴(kuò)展可以加入MySQL, 你應(yīng)該咨詢在線MySQL TODO 表。這是本手冊最新的TODO表版本。見F 我們想要在未來加入到MySQL的事情列表(TODO)。 5.4.1 子選擇 在MySQL中下列語句還不能工作: SELECT * FROM table1 WHERE id IN (SELECT id FROM table2); SELECT
13、* FROM table1 WHERE id NOT IN (SELECT id FROM table2); 然而,在很多情況下,你可以重寫查詢,而不用子選擇: SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id; SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL 對于更復(fù)雜的子查詢,通常你可以創(chuàng)建臨時的表保存子查詢。然而在一些情況下,這種選擇將行不通。最經(jīng)常遇到的情形是DELETE語句,對于
14、它標(biāo)準(zhǔn)SQL不支持聯(lián)結(jié)(join)(除了在子選擇)。對于這種情況,有2個可用選擇,直到子選擇被MySQL支持。 第一個選擇是使用一種過程化的程序語言(例如Perl或PHP)來提交一個SELECT查詢獲得要被刪除記錄主鍵,并然后使用這些值構(gòu)造DELETE語句(DELETE FROM . WHERE . IN (key1, key2, .)。 第二個選擇是使用交互式SQL自動構(gòu)造一套DELETE語句,使用MySQL擴(kuò)展CONCAT()(代替標(biāo)準(zhǔn)|操作符)。例如: SELECT CONCAT(#DELETE FROM tab1 WHERE pkid = #, tab1.pkid, #;#) FROM
15、 tab1, tab2 WHERE tab1.col1 = tab2.col2; 你可以把這個查詢放在一個腳本文件并且從它重定向輸入到mysql命令行解釋器,將其輸出作為管道返回給解釋器的第2個實(shí)例: prompt mysql -skip-column-names mydb replace - # mysql database replace - # - text-file-with-funny-comments.sql 用這個命令改回他們: shell replace # - - text-file-with-funny-comments.sql 5.5 MySQL 遵循什么標(biāo)準(zhǔn)? Entr
16、y level SQL92。ODBC level 0-2。 5.6 怎樣處理沒有COMMIT/ROLLBACK MySQL不支持COMMIT-ROLLBACK。問題是有效地處理COMMIT-ROLLBACK將需要完全不同于MySQL今天使用的表布局。MySQL也將需要額外的線程在表上做自動清除工作,而且磁盤用量將更高。這將使MySQL比現(xiàn)今慢上大約2-4倍。MySQL比幾乎所有其他SQL數(shù)據(jù)庫都快(一般至少快2-3倍)。原因之一就是缺少COMMIT-ROLLBACK。 目前,我們是更多地實(shí)現(xiàn)SQL服務(wù)器語言(象存儲過程),有了它,你將確實(shí)很少需要COMMIT-ROLLBACK,這也將得到更好的
17、性能。 通常需要事務(wù)的循環(huán)可以借助LOCK TABLES進(jìn)行編碼,并且當(dāng)你能即時地更新記錄時,你不需要光標(biāo)(cursor)。 我們在TODO上有事務(wù)和光標(biāo),然而并非相當(dāng)優(yōu)先。如果我們實(shí)現(xiàn)這些,將作為CREATE TABLE的選項(xiàng),那意味著COMMIT-ROLLBACK將僅工作在那些表上,以便速度損失僅僅強(qiáng)加在那些表上。 我們在TcX有一個更大的需求,一個比100%通用數(shù)據(jù)庫的真正快速的數(shù)據(jù)庫。無論何時我們發(fā)現(xiàn)一個方法來實(shí)現(xiàn)這些特征而沒有任何速度損失,我們將可能做它。暫時,有許多更重要的事情要做。檢查TODO,看我們此時如何將事情優(yōu)先排列。(有的較高級別支持的客戶可以改變它,因此事情是可以重新優(yōu)
18、先化的。) 當(dāng)前的問題實(shí)際上是ROLLBACK,沒有ROLLBACK,你能用LOCK TABLES做任何COMMIT動作。為了支持ROLLBACK,MySQL將必須被改變以存儲所有的舊記錄,如果發(fā)出ROLLBACK,它們被更新的并且將任何東西恢復(fù)到起點(diǎn)。對于簡單的情形,這不是難做的 (當(dāng)前isamlog可以用于此目的),但是為ALTER/DROP/CREATE TABLE實(shí)現(xiàn)ROLLBACK將是更困難的。 避免使用ROLLBACK,你可以使用下列策略: 使用LOCK TABLES .鎖住所有你想要存取的數(shù)據(jù)庫表。 測試條件。 如果一切無誤,更新。 使用UNLOCK TABLES釋放你的鎖。 這
19、通常比使用可能帶ROLLBACK的交易是一個更快的方法,盡管不總是這樣。這個解決方案不能處理的唯一狀況是當(dāng)某人在更新當(dāng)中殺死線程時。在這種情況下,所有的鎖將被釋放,但是一些更改不能被執(zhí)行。 你也可使函數(shù)以單個操作更新記錄。你能通過使用下列技術(shù)得到一個很有效率的應(yīng)用程序: 相對他們的當(dāng)前的值修改字段 僅僅更新那些實(shí)際上更改的字段 例如,當(dāng)我們正在更新一些客戶信息時,我們僅僅更新那些改變了的客戶數(shù)據(jù)并只測試沒有任何數(shù)據(jù)的改變,或數(shù)據(jù)取決于改變的數(shù)據(jù),與原來的行相比變化了。對于改變了的數(shù)據(jù)的測試用WHERE子句在UPDATE語句中完成。如果記錄沒被更新,我們給客戶一條消息:“你改變了的一些數(shù)據(jù)已被其他用戶改變了”,然后我們在一個窗口中顯示新行對照舊行,因此用戶能決定他該使用哪個版本的客戶記錄。 這給了我們類似于“列鎖定”的東西,但是實(shí)際上甚至更好,因?yàn)槲覀儍H僅更新某些列,使用相對于他們的當(dāng)前值的值。這意味著典型的UPDATE語句看上去象這些一樣?xùn)|西: UPDATE tablename SET pay_back=pay_back+#relative change#; UPDATE customer SET custom
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年商務(wù)談判的合同模板
- 六 美麗的校園-《認(rèn)識方向》(教案)二年級上冊數(shù)學(xué)青島版
- 六年級下冊數(shù)學(xué)教案-4.1 扇形統(tǒng)計(jì)圖 ︳西師大版
- 包裝的學(xué)問(教案)2024-2025學(xué)年數(shù)學(xué)五年級下冊 北師大版
- 茶藝培訓(xùn)合同(2篇)
- 學(xué)習(xí)2025年雷鋒精神六十二周年主題活動實(shí)施方案 合計(jì)4份
- 學(xué)習(xí)2025年雷鋒精神62周年主題活動實(shí)施方案 (匯編4份)
- 學(xué)習(xí)2025年雷鋒精神六十二周年主題活動實(shí)施方案 (3份)-50
- 第八單元(B卷能力篇)三年級語文下冊單元分層訓(xùn)練AB卷(部編版)
- 2025年廣西培賢國際職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫匯編
- 四川蜀道集團(tuán)筆試題
- 耐甲氧西林肺炎鏈球菌(MRSP)的流行病學(xué)和分子流行病學(xué)
- DBJ50-T-420-2022建設(shè)工程配建5G移動通信基礎(chǔ)設(shè)施技術(shù)標(biāo)準(zhǔn)
- 2023年全國職業(yè)院校技能大賽-健身指導(dǎo)賽項(xiàng)規(guī)程
- 年“春節(jié)”前后安全自查系列用表完整
- 小學(xué)利潤問題應(yīng)用題100道附答案(完整版)
- 青島版三年級下冊口算題大全(全冊)
- 醫(yī)院智能化系統(tǒng)內(nèi)網(wǎng)、外網(wǎng)及設(shè)備網(wǎng)系統(tǒng)拓?fù)鋱D-可編輯課件
- 2024年南京科技職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫帶答案
- DB52-T 1780-2024 醬香型白酒安全生產(chǎn)規(guī)范
- 【信息技術(shù)】信息技術(shù)及其應(yīng)用教學(xué)課件 2023-2024學(xué)年人教-中圖版(2019)高中信息技術(shù)必修二
評論
0/150
提交評論