久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

MySQL中文參考手冊(cè)

來(lái)自站長(zhǎng)百科
Ahbaybface討論 | 貢獻(xiàn)2009年12月10日 (四) 16:55的版本
(差異) ←上一版本 | 最后版本 (差異) | 下一版本→ (差異)
跳轉(zhuǎn)至: 導(dǎo)航、? 搜索

導(dǎo)航: 上一頁(yè) | ASP | PHP | JSP | HTML | CSS | XHTML | aJAX | Ruby | JAVA | XML | Python | ColdFusion

MySQL包含了一些可能在其他SQL數(shù)據(jù)庫(kù)找不到的擴(kuò)充。要注意如果你使用他們,你的代碼把不與其他SQL服務(wù)器兼容。在一些情況下,你可以編寫(xiě)包括MySQL擴(kuò)展的代碼,但是仍然是可移植的,通過(guò)使用/*! ... */形式的注釋。在這種情況下,MySQL把進(jìn)行詞法分析并且執(zhí)行在注釋內(nèi)的代碼,好像它是任何其它MySQL語(yǔ)句,但是其他SQL服務(wù)器把忽略擴(kuò)展。例如:
     SELECT /*! STRAIGHT_JOIN */ col_name FROM table1,table2 WHERE ...
  如果你在'!'后增加一個(gè)版本數(shù)字,該語(yǔ)法把僅在MySQL版本是等于或比使用的版本數(shù)字新時(shí)才執(zhí)行:
     CREATE /*!32302 TEMPORARY */ TABLE (a int);
     上面的意思是如果你有3.23.02或更新,那么MySQL把使用TEMPORARY關(guān)鍵詞。
     MySQL擴(kuò)展被列在下面:
  字段類(lèi)型MEDIUMINT、SET、ENUM和不同的BLOB和TEXT類(lèi)型。
  字段屬性AUTO_INCREMENT、BINARY、UNSIGNED和ZEROFILL。
  缺省地,所有的字符串比較是忽略大小寫(xiě)的,由當(dāng)前的字符集決定了(缺省為ISO-8859-1 Latin1)排序順序。如果你不喜歡這樣,你應(yīng)該用BINARY屬性或使用BINARY強(qiáng)制符聲明列,它導(dǎo)致根據(jù)MySQL服務(wù)器主機(jī)的ASCII順序進(jìn)行排序。
  MySQL把每個(gè)數(shù)據(jù)庫(kù)映射一個(gè)MySQL數(shù)據(jù)目錄下面的目錄,把數(shù)據(jù)庫(kù)表映射到數(shù)據(jù)庫(kù)目錄下的數(shù)據(jù)庫(kù)文件名。這有2個(gè)含意:
  在區(qū)分大小寫(xiě)文件名的操作系統(tǒng)(象大多數(shù) Unix 系統(tǒng)一樣)上的MySQL中數(shù)據(jù)庫(kù)名字和表名是區(qū)分大小寫(xiě)的。如果你有困難記得表名,接受一個(gè)一致的約定,例如總是用小寫(xiě)名字創(chuàng)建數(shù)據(jù)庫(kù)和表。
     數(shù)據(jù)庫(kù)、表、索引、列或別名可以以數(shù)字開(kāi)始(但是不能僅由數(shù)字組成)。
  你可以使用標(biāo)準(zhǔn)的系統(tǒng)命令備份、重命名、移動(dòng)、刪除和拷貝表。例如,重命名一個(gè)表,重命名“.MYD”、“.MYI”和“.frm”文件為相應(yīng)的表。
  在SQL語(yǔ)句中,你可以用db_name.tbl_name語(yǔ)法訪(fǎng)問(wèn)不同數(shù)據(jù)庫(kù)中的表。一些SQL服務(wù)器提供同樣的功能但是稱(chēng)它們?yōu)檫@User space(用戶(hù)空間)。MySQL不支持類(lèi)似在create table ralph.my_table...IN my_tablespace中的表空間。
  LIKE在數(shù)字列上被允許。
     在一SELECT語(yǔ)句里面使用INTO OUTFILE和STRAIGHT_JOIN。見(jiàn)7.12 SELECT句法.
  在一個(gè)SELECT語(yǔ)句中SQL_SMALL_RESULT選項(xiàng)。
  EXPLAIN SELECT得到怎么樣聯(lián)結(jié)表的描述。
     在一個(gè)CREATE TABLE語(yǔ)句里面使用索引、在字段前綴上的索引和使用INDEX或KEY。見(jiàn)7.7 CREATE TABLE 句法。
  CREATE TABLE使用TEMPORARY或IF NOT EXISTS。
  使用COUNT(DISTINCT list),這里“l(fā)ist”超過(guò)一個(gè)元素。
  在一個(gè)ALTER TABLE語(yǔ)句里面使用CHANGE col_name、DROP col_name或DROP INDEX。見(jiàn)7.8 ALTER TABLE句法。
  在一個(gè)ALTER TABLE里面語(yǔ)句使用IGNORE。
     在一個(gè)ALTER TABLE語(yǔ)句中使用多重ADD、ALTER、DROP或CHANGE子句。
  使用帶關(guān)鍵詞IF EXISTS的DROP TABLE。
  你能用單個(gè)DROP TABLE語(yǔ)句拋棄多個(gè)表。
  DELETE語(yǔ)句的LIMIT子句。
  INSERT和REPLACE語(yǔ)句的DELAYED子句。
     INSERT, REPLACE, DELETE和UPDATE語(yǔ)句的LOW_PRIORITY子句。
  使用LOAD DATA INFILE。在多數(shù)情況下,這句法與Oracle的LOAD DATA INFILE兼容。見(jiàn)7.16 LOAD DATA INFILE 句法。
  OPTIMIZE TABLE語(yǔ)句。。
  SHOW語(yǔ)句。見(jiàn)7.21 SHOW句法(得到表、列等的信息)。
  字符串可以被“"”或“'”包圍,而不只是“'”。
  使用“\”轉(zhuǎn)義字符。
  SET OPTION語(yǔ)句。見(jiàn)7.25 SET OPTION句法。
  你不需要命名所有在GROUP BY部分的被選擇的列。這為一些很特定的情況給出更好的性能,而不是一般的查詢(xún)。
     為了方便來(lái)自于SQL環(huán)境其他為用戶(hù),MySQL對(duì)許多函數(shù)支持別名。例如,所有的字符串功能都支持ANSI SQL句法和 ODBC句法。
  MySQL理解||和&&意味著邏輯的OR和AND,就像在C程序語(yǔ)言中。在MySQL中,||和OR是同義詞,&&和AND是同義詞。正因?yàn)檫@個(gè)好的句法,MySQL對(duì)字符串并置的不支持ANSI SQL ||操作符;相反使用CONCAT(),因?yàn)镃ONCAT()接受任何數(shù)量的參數(shù),很容易把||操作符使用變換到MySQL。
     CREATE DATABASE或DROP DATABASE。見(jiàn)7.5 CREATE DATABASE句法。
  %操作符是MOD()一個(gè)同義詞,即,N % M等價(jià)于MOD(N,M)。%支持C程序員并與PostgreSQL兼容。
  =, <>, <=,<, >=,>, <<, >>, <=>, AND, OR或LIKE操作符可以放在SELECT語(yǔ)句的FROM左邊用于比較列。例如:
  mysql> SELECT col1=1 AND col2=2 FROM tbl_name;
     LAST_INSERT_ID()函數(shù)。見(jiàn)20.4.29 mysql_insert_id()。
  擴(kuò)展的正則表達(dá)式操作符REGEXP和NOT REGEXP。
  CONCAT()或CHAR()有一個(gè)參數(shù)或超過(guò)2個(gè)參數(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è)字符的刪除。
  GROUP BY函數(shù)STD(), BIT_OR()和BIT_AND()。
  使用REPLACE而不是DELETE+INSERT。見(jiàn)7.15 REPLACE句法。
  FLUSH flush_option語(yǔ)句。
     在一個(gè)語(yǔ)句用:=設(shè)置變量的可能性:
  SELECT @a:=SUM(total),@b=COUNT(*),@a/@b AS avg FROM test_table;
  SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
      以ANSI模式運(yùn)行MySQL
  如果你用--ansi選項(xiàng)啟動(dòng)mysqld,MySQL的下列行為改變。
     ||是字符串并置而不是OR。
  可在一個(gè)函數(shù)名字之間與“(”有任何數(shù)量的空格。這也使所有的功能名字成為保留詞。
  "把是一個(gè)標(biāo)識(shí)符引號(hào)字符(象MySQL `引號(hào)字符一樣)而不是一個(gè)字符串引號(hào)字符。
  REAL把是FLOAT一個(gè)同義詞,不是DOUBLE一個(gè)同義詞。
  5.3 MySQL相比ANSI SQL92的差別
  我們嘗試使得MySQL遵照ANSI SQL標(biāo)準(zhǔn)和ODBC SQL標(biāo)準(zhǔn),但是在一些情況下,MySQL做一些不同的事情:
     --只是一個(gè)注釋?zhuān)绻竺娓粋€(gè)白空字符。`--'作為一個(gè)注釋的開(kāi)始。
  對(duì)于VARCHAR列,當(dāng)值被存儲(chǔ)時(shí),拖后的空格被刪除。見(jiàn)E MySQL已知的錯(cuò)誤和設(shè)計(jì)缺限。

  在一些情況下,CHAR列偷偷地被改變?yōu)閂ARCHAR列。平靜的列指定變化。
  當(dāng)你刪除一個(gè)表時(shí),對(duì)表的權(quán)限不自動(dòng)地廢除。你必須明確地發(fā)出一個(gè)REVOKE來(lái)廢除對(duì)一個(gè)表的權(quán)限。見(jiàn)7.26 GRANT和REVOKE句法。
   MySQL缺乏的功能
  下列功能在當(dāng)前的MySQL版本是沒(méi)有的。對(duì)于一張優(yōu)先級(jí)表指出何時(shí)新擴(kuò)展可以加入MySQL, 你應(yīng)該咨詢(xún)?cè)诰€(xiàn)MySQL TODO 表。這是本手冊(cè)最新的TODO表版本。見(jiàn)F 我們想要在未來(lái)加入到MySQL的事情列表(TODO)。
        子選擇
  在MySQL中下列語(yǔ)句還不能工作:
     SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);
  SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
     然而,在很多情況下,你可以重寫(xiě)查詢(xún),而不用子選擇:
     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
     對(duì)于更復(fù)雜的子查詢(xún),通常你可以創(chuàng)建臨時(shí)的表保存子查詢(xún)。然而在一些情況下,這種選擇把行不通。最經(jīng)常遇到的情形是DELETE語(yǔ)句,對(duì)于它標(biāo)準(zhǔn)SQL不支持聯(lián)結(jié)(join)(除了在子選擇)。對(duì)于這種情況,有2個(gè)可用選擇,直到子選擇被MySQL支持。
     第一個(gè)選擇是使用一種過(guò)程化的程序語(yǔ)言(例如Perl或PHP)來(lái)提交一個(gè)SELECT查詢(xún)獲得要被刪除記錄主鍵,并然后使用這些值構(gòu)造DELETE語(yǔ)句(DELETE FROM ... WHERE ... IN (key1, key2, ...))。
     第二個(gè)選擇是使用交互式SQL自動(dòng)構(gòu)造一套DELETE語(yǔ)句,使用MySQL擴(kuò)展CONCAT()(代替標(biāo)準(zhǔn)||操作符)。例如:
     SELECT CONCAT('DELETE FROM tab1 WHERE pkid = ', tab1.pkid, ';')
  FROM tab1, tab2
  WHERE tab1.col1 = tab2.col2;
     你可以把這個(gè)查詢(xún)放在一個(gè)腳本文件并且從它重定向輸入到mysql命令行解釋器,把其輸出作為管道返回給解釋器的第2個(gè)實(shí)例:
     prompt> mysql --skip-column-names mydb < myscript.sql | mysql mydb
     MySQL僅支持INSERT ... SELECT ...和REPLACE ... SELECT ...,獨(dú)立的子選擇把可能在3.24.0得到,然而,在其他環(huán)境下,你現(xiàn)在可以使用函數(shù)IN()。
        SELECT INTO TABLE
  MySQL還不支持Oracle SQL的擴(kuò)展:SELECT ... INTO TABLE ....,相反MySQL支持ANSI SQL句法INSERT INTO ... SELECT ...,基本上他們是一樣的。
     另外,你可使用SELECT INTO OUTFILE...或CREATE TABLE ... SELECT解決你的問(wèn)題。
     事務(wù)處理
  不支持事務(wù)處理。MySQL把在短時(shí)間內(nèi)支持原子(atomic)操作,它象沒(méi)有回卷的事務(wù)。用原子操作,你能執(zhí)行一組INSERT/SELECT/whatever 命令并且保證沒(méi)有其他線(xiàn)程介入。在本文中,你通常不會(huì)需要回卷。目前,你可通過(guò)使用LOCK TABLES和UNLOCK TABLES命令阻止其他線(xiàn)程的干擾。見(jiàn)7.24 LOCK TABLES/UNLOCK TABLES句法。
     存儲(chǔ)過(guò)程和觸發(fā)器
  一個(gè)存儲(chǔ)過(guò)程是能在服務(wù)器中編譯并存儲(chǔ)的一套SQL命令。一旦這樣做了,顧客不需要一直重新發(fā)出全部查詢(xún),而可以參考存儲(chǔ)過(guò)程。因?yàn)椴樵?xún)僅需一次詞法分析并且較少的信息需要在服務(wù)器和客戶(hù)之間傳送,因此這提供了更好的性能。你與可以通過(guò)擁有在服務(wù)器中的函數(shù)庫(kù)提升概念上的層次。