各種指南mysql中文版MySQL目前是最流行的開源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)一種_第1頁(yè)
各種指南mysql中文版MySQL目前是最流行的開源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)一種_第2頁(yè)
各種指南mysql中文版MySQL目前是最流行的開源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)一種_第3頁(yè)
各種指南mysql中文版MySQL目前是最流行的開源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)一種_第4頁(yè)
各種指南mysql中文版MySQL目前是最流行的開源關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)一種_第5頁(yè)
已閱讀5頁(yè),還剩171頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

適宜的讀者本系列專為初學(xué)者量身打造,能夠幫助他們從零開始逐步了解MySQL的相關(guān)知識(shí)預(yù)備要想實(shí)際練習(xí)本系列中各種范例,讀者該事先道什么是數(shù)據(jù)庫(kù)(特別是RDBMS),并且明白何為程語(yǔ)言。編譯/執(zhí)行MySQL假如你想利用DBMS來(lái)編譯并執(zhí)行SQL程序,但苦于手頭沒有安裝該系統(tǒng),不要著急。有一個(gè)架設(shè)于 前 第1 MySQL-MySQL介 MySQL安 MySQL管 MySQLPHP語(yǔ) 連接MySQL服務(wù) 創(chuàng)建MySQL數(shù)據(jù) MySQL終止數(shù)據(jù) MySQL選擇數(shù)據(jù) MySQL數(shù)據(jù)類 創(chuàng)建MySQL MySQL下拉 MySQL插入查 MySQL選擇查 MySQLWhere MySQL更新查 MySQL刪除查 MySQLLike MySQL排序結(jié) MySQL正則表達(dá) MySQL匯 MySQLALTER命 MySQL索 MySQL臨時(shí) MySQL MySQL數(shù)據(jù)庫(kù)信 MySQLHandling MySQLSQL MySQL數(shù)據(jù)導(dǎo) MySQL數(shù)據(jù)導(dǎo) 第2 MySQL幫助資 一些有用的MySQL函數(shù)與子 一些非常有用的學(xué)習(xí)資 第3 附 MySQLBETWEEN子 MySQLCONCAT函 MySQLCOUNT函 MySQLMAX函 MySQLRAND函 MySQL字符串函 MySQLSUM函 MySQL日期與時(shí)間方面的函 1MySQL1MySQL介紹因此,在業(yè)一般用關(guān)型數(shù)據(jù)管理統(tǒng)(RDMS來(lái)并理量據(jù)之以稱為系數(shù)據(jù)庫(kù),是因?yàn)樗袛?shù)據(jù)都不同的表中,表間的關(guān)是建立在主鍵或其他鍵(被為外鍵)能夠?qū)崿F(xiàn)一種具有表、列與能自動(dòng)更新索引RDBMS在繼續(xù)討論MySQL數(shù)據(jù)庫(kù)系統(tǒng)之前,先讓我們來(lái)說(shuō)明一些關(guān)于數(shù)據(jù)庫(kù)的主鍵(PrimaryKey):主鍵是唯一的。同一張表中不允許出現(xiàn)同樣兩個(gè)鍵值。一個(gè)鍵值只對(duì)應(yīng)著一外鍵(ForeignKey):用于連接兩張表 MySQL數(shù)據(jù)一家瑞典公司MySQLAB開發(fā)、運(yùn)營(yíng)并予以支持。它之所以非常流行,原因在于具備以下這些優(yōu)點(diǎn):基于開源發(fā)布,無(wú)需即可使用可運(yùn)行于多個(gè)操作系統(tǒng),支持多種語(yǔ)言,包括PHP、PERL、C、C++及Java等語(yǔ)言。PHPWeb支持大型數(shù)據(jù)庫(kù),最高可在5千多萬(wàn)行。每張表的默認(rèn)文件4GB,不過(guò)如果操作系統(tǒng)支持,你可以將其理論限制增加到800萬(wàn)TB。本教學(xué)重點(diǎn)在于利PHPMySQL,所以很多實(shí)PHP程序員來(lái)說(shuō)非常實(shí)用。對(duì)于不熟悉PHP的讀者,我們強(qiáng)烈建議您讀一讀PHP教學(xué)( 。MySQL安裝MySQLMySQL的全部都在這個(gè)頁(yè)面:MySQL(ht ySQLCommunityServer版本號(hào),并且盡可能準(zhǔn)確地選擇所需平臺(tái)。在Linux/Unix在Linux系統(tǒng)上安裝MySQL,建議采用RPM形式進(jìn)行安裝。MySQLAB在其上提供了以下幾種MySQLMySQL數(shù)據(jù)庫(kù)服務(wù)器,用于管理數(shù)據(jù)庫(kù)與表,控制用戶,以及處理SQL查詢 MySQLMySQL-devel編譯使用MySQLMySQL-bench用于MySQLMySQLRPMLinuxSuSE但它們一般也能輕Linux系統(tǒng)上。切換到含有RPM文件包 [root@host]#rpm-iMySQL-5.0.9-上面令安裝MySQL服務(wù)器,創(chuàng)建了一個(gè)MySQL用戶,進(jìn)行了必要的配置,并開始自動(dòng)啟動(dòng)usr/binusr/sbin找到MySQL有的相關(guān)庫(kù)。創(chuàng)建的所有的表和數(shù)據(jù)庫(kù)都-5.0.9-0.i386.rpm-5.0.9-0.i386.rpm[root@host]#rpm-iMySQL-devel-5.0.9-[root@host]#rpm-i6.rpm[root@host]#rpm-iMySQL-shared-5.0.9-0.i386.rpm[root@host]#rpm-iMySQL-h-5.0.9-在Windows安裝現(xiàn)在,Windows下的MySQL式都比過(guò)去容易多了,因?yàn)橐呀?jīng)利用安裝程 ,然后運(yùn)行setup.exe就可以了。默認(rèn)的安裝程序setup.exe能幫你打理瑣碎的安裝過(guò)程,同時(shí)默認(rèn)安裝在C:\mysql 首次測(cè)試服務(wù)器,可以采用命令行方式。找到mysqld務(wù)器的位置(可能位于C:\mysql\bin),輸入如下命mysqld.exe--不出意外的話,你就會(huì)看到一些關(guān)于啟動(dòng)和InnoDB的信息。如果沒有出現(xiàn)這類信息,那么可能是因?yàn)槟愕臋?quán)限有問(wèn)題。確保所有用戶(可能是mysql)都能數(shù)據(jù)的 此,假如你喜歡mysqld動(dòng)服務(wù)器,那么當(dāng)要關(guān)閉服務(wù)器時(shí),記得要手動(dòng)借助mysqladmin、任務(wù)列表、任務(wù)管理器或者Windows的一些方法來(lái)進(jìn)行。MySQL安裝成功安裝完MySQL后,就會(huì)初始化基表,啟動(dòng)服務(wù)器??梢酝ㄟ^(guò)一些簡(jiǎn)單的測(cè)試來(lái)驗(yàn)證安裝是否一使用myqladmin工具來(lái)獲取服務(wù)器狀[root@host]#mysqladmin--Linux述命令可能會(huì)產(chǎn)生如下結(jié)果。根據(jù)你安裝Linux本的差異,結(jié)果也可能會(huì)有些許mysqladminVer8.23Distrib5.0.9-0,forredhat-linux-gnuon你可以通過(guò)在MySQL客戶端上使用mysql命令去連接MySQL服務(wù)器。這時(shí),不需要輸入任何,因?yàn)槟J(rèn)[root@host]#mlmysql>表明你已經(jīng)連接上了MySQL器,可以在提示符后輸入一些SQLmysql>mysql>SHOW+|Database+| ++| 對(duì)于根用戶,MySQL初始是不需要的。一旦成功安裝好數(shù)據(jù)庫(kù)和客戶端后,你就需要設(shè)置一個(gè)根用戶密[root@host]#mysqladmin-urootpassword[root@host]#[root@host]#mysql-uroot-pEnterpassword:******* 次手動(dòng)輸入路徑全稱了。對(duì)于bashs來(lái)說(shuō),應(yīng)該這樣設(shè)置:export啟動(dòng)時(shí)運(yùn)行如果想讓MySQL系統(tǒng)啟動(dòng)時(shí)自動(dòng)運(yùn)行,則可以etc/rc.local中加入下列項(xiàng)另外,在 中必須存在mysqld工具M(jìn)ySQL管理運(yùn)行與關(guān)閉MySQL查ps-ef|greproot@host#cdroot@host#cd./safe_mysqld如果想關(guān)閉正在MySQL用如root@host#cdroot@host#cd./mysqladmin-uroot-pshutdownEnterpassword:******建立MySQL戶賬添加新的MySQL在數(shù)據(jù)庫(kù)mysqluser新項(xiàng)3。SQLroot@host#root@host#mysql-uroot-pEnterpassword:*******mysql>usemysql;Databasemysql>INSERTINTOuser(host,user,password,select_priv,insert_priv,update_priv)VALUES('localhost','guest',PASSWORD('guest123'),'Y','Y','Y');QueryOK,1rowaffected(0.20mysql>FLUSHQueryOK,1rowaffected(0.01mysql>mysql>SELECThost,user,passwordFROMuserWHEREuser=+|++|user|+++|++|localhost|guest|6f8c114b58f2ce9e 在添加新用戶時(shí),記住要用MySQL提供的ASSORD()函數(shù)對(duì)該用戶的進(jìn)行加理。如上例所示,mypass被加密成了6f8c114b58f2ce9e。注意這里所用的FLUSHPRIVILEGES語(yǔ)句。它讓服務(wù)器重新加載表。如果不使用它,就至少得等到服務(wù)器重新啟動(dòng)后,才能使用新用戶賬號(hào)連接mysql。你也可以為新用戶指定其他權(quán)限,在執(zhí)行INSERT查詢時(shí),將用戶表中的下面這些列的值都設(shè)為Y’,或者使UPDATE查詢稍后對(duì)它們進(jìn)行更新。為zara的新用戶,其為zara123。如下所示:root@host#root@host#mysql-uroot-pEnterpassword:*******mysql>usemysql;Databasemysql>GRANT->ON->TO->IDENTIFIEDBY這會(huì)在mysql據(jù)庫(kù)的user中創(chuàng)建一個(gè)SQL()結(jié)束的話,MySQL這個(gè)配 f文 用于MySQL的一些USEDatabasename用于在MySQLSHOWDATABASES列出MySQLDBMS所能的數(shù)據(jù)庫(kù)SHOWTABLES庫(kù)被useSHOWCOLUMNSFROMtablenameNULLSHOWTABLESTATUSLKEaleneG報(bào)告MySQLDBMS的性能及統(tǒng)計(jì)的細(xì)節(jié)信MySQLPHP語(yǔ)MySQL很好地適用于多種編程語(yǔ)言,比如PERL、C、C++、JAVA,PHP。由于可以開發(fā)Web應(yīng)用程序,PHP是其中最流行的一門語(yǔ)言。程:PERL與MySQLPHP提供了多種能夠MySQL數(shù)據(jù)庫(kù)并且數(shù)據(jù)記錄的函數(shù)。這些函數(shù)的調(diào)用方式就跟其他PHP函數(shù)一函數(shù)名稱的第二部分是函數(shù)所專有的,通常是一個(gè)描述函數(shù)行為的詞。下面是中將會(huì)用到的兩個(gè)函數(shù)mysqli_query($connect,"SQLstatement");if(!$retval){}//OtherwiseMySQLorPHP MySQL下面這個(gè)例子顯示如何采用命令MySQL器[root@host]#[root@host]#mysql-uroot-pEnterpassword:******上述命令將顯示mysql提示符。在該命令提示符后面,可以執(zhí)行任何SQL面就是上述命令的顯eetotheMySQLmonitor.Commandsendwith;or\g.YourMySQLconnectionid toserverversion:部SQL操作。mysql>mysql>exit使用PHP連接通過(guò)PHPmysql_connect()函數(shù),可以開啟數(shù)據(jù)庫(kù)連接。該函數(shù)有5個(gè)參數(shù)。當(dāng)成功連接后,該函數(shù)返回一個(gè)MySQL連接標(biāo)識(shí);如連接失敗,則返回FALSE。語(yǔ)法connection 可選參數(shù)。運(yùn)行可選參數(shù)。運(yùn)行數(shù)據(jù)庫(kù)服務(wù)器的主機(jī)名。如未指定,則默認(rèn)值ht0可選參數(shù)。用戶數(shù)據(jù)庫(kù)所用。如未指定,則默認(rèn)沒有可選參數(shù)。如果利用同樣的參數(shù)第二次調(diào)用mysql_connect(),則不會(huì)建立新的連接,而????MYSQL__SSL——使用SSL加密通過(guò)PHPmysql_close隨時(shí)可以中斷與MySQL接。該函數(shù)只有一個(gè)m語(yǔ)法下面通過(guò)一個(gè)具體的范例來(lái)實(shí)際了解如何連接MySQL<title>ConnectingMySQL$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){}echo'Connectedsuccessfully';MySQL使用mysqladmin創(chuàng)建數(shù)據(jù)庫(kù)創(chuàng)建或刪除數(shù)據(jù)庫(kù)需要擁有特殊的權(quán)限。假設(shè)你獲得了root用戶權(quán)限,那mysqladmin令可以創(chuàng)建下面就來(lái)創(chuàng)建一個(gè)名叫TUTORIALS的數(shù)據(jù)庫(kù):[root@host]#[root@host]#mysqladmin-uroot-pcreateTUTORIALSEnterpassword:******通過(guò)上述命令,就創(chuàng)建好了一個(gè)名叫TUTORIALSMySQL利用PHP創(chuàng)建數(shù)據(jù)boolmysql_query(sql,connection必需參數(shù)。創(chuàng)建MySQL用的SQL命令可選參數(shù)。如未指定,將使用最后一個(gè)由mysql_connect通過(guò)下面這個(gè)范例來(lái)了解如<title>Creating<title>CreatingMySQL$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){die('Couldnotconnect:'.}echo'Connectedsuccessfully<br$sql='CREATEDATABASE$retval=mysql_query($sql,$conn);if(!$retval){die('Couldnotcreatedatabase:'.}echo"DatabaseTUTORIALScreatedsuccessfully\n";MySQL終止數(shù)據(jù)庫(kù)利用mysqladmin刪除MySQL同上一節(jié)的情況完全一樣,創(chuàng)建或刪除MySQL數(shù)據(jù)庫(kù)需要特殊的權(quán)限。假了root用戶權(quán)限,那就可以[root@host]#[root@host]#mysqladmin-uroot-pdropTUTORIALSEnterpassword:******thedatabaseispotentiallyaverybadthingtoAnydatastoredinthedatabasewillbeDoyoureallywanttodropthe'TUTORIALS'database[y/N]Database"TUTORIALS"使用PHP刪除數(shù)據(jù)PHPmysql_query或刪MySQL據(jù)庫(kù)。該函數(shù)包含兩個(gè)參數(shù),如果成功執(zhí)行操作,返回TRUE,否則返回FALSE。boolmysql_query(sql,connection下面這個(gè)范例展示了如何刪<title>Deleting<title>DeletingMySQL$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){die('Couldnotconnect:'.}echo'Connectedsuccessfully<br$sql='DROPDATABASE$retval=mysql_query($sql,$conn);if(!$retval){die('Couldnotdeletedatabase:'.}echo"DatabaseTUTORIALSdeletedsuccessfully\n";警告:在利用 MySQL選擇數(shù)據(jù)庫(kù)一旦連接上了yQL接在MySQL服務(wù)器上。利用命令行方式選擇MySQL通過(guò)mysql>提示符來(lái)選擇數(shù)據(jù)庫(kù)是一種非常簡(jiǎn)單的方法。可以使用SQL命令use來(lái)選擇某個(gè)數(shù)據(jù)庫(kù)下面這個(gè)范例展示了如何選擇一個(gè)名為TUORIALS[root@host]#[root@host]#mysql-uroot-pEnterpassword:******mysql>useTUTORIALS;Databasechanged注意:所有的數(shù)據(jù)庫(kù)名稱、表名、表字段名都是對(duì)大小寫敏感的,因此使用SQL稱。使用PHP選擇MySQL數(shù)據(jù)PHP通過(guò)l函數(shù)來(lái)選擇數(shù)據(jù)庫(kù)。如果成功完成操作,返回TRUE,否則返回FALSEboolmysql_select_db(db_nam,connection必需參數(shù)。要選擇的MySQL可選參數(shù)。如未指定,則將使用mysql_connect最后打開的接<title>SelectingMySQL$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){}echo'Connectedsuccessfully';mysql_select_db('TUTORIALS');MySQL字符的寬度,就字段定義為10個(gè)字符寬。字段(或者說(shuō)列)的類型也被稱為數(shù)據(jù)類型。MySQL使用標(biāo)ANSISQL數(shù)字類型,所以如果你在學(xué)習(xí)MySQL之前,接觸過(guò)其他數(shù)據(jù)庫(kù)系統(tǒng),那么肯定 TINYINT非常小的整數(shù),分為有無(wú)符號(hào)兩種。前有符號(hào)時(shí),其允許取值范圍是-128~127;范圍為0~255。所以,最高可指定4位數(shù)字。SMALLINT較小的整數(shù),分為有無(wú)符號(hào)兩種。前有符號(hào)時(shí),其允許取值范圍是-32768~32767;無(wú)符號(hào)時(shí)0~553MDUMINT中型大小的整數(shù),分為有無(wú)符號(hào)兩種。前有符號(hào)時(shí),其允許取值范圍是- FLOAT(M,D)M,D代表小數(shù)位數(shù)。這兩個(gè)參數(shù)都不是必需參數(shù),它們默認(rèn)為10,2,表示小數(shù)點(diǎn)后有2位數(shù)字,而整個(gè)數(shù)字的位數(shù)為10(包含小數(shù)位數(shù))。FLOAT類型的小數(shù)精D不帶符號(hào)的雙精度浮點(diǎn)數(shù)。M代表顯示長(zhǎng)度,D代表小數(shù)位數(shù)。這兩個(gè)參數(shù)都不是必需參數(shù),它們默認(rèn)為16,4,表示小數(shù)點(diǎn)后有4位數(shù)字,而整個(gè)數(shù)字的位數(shù)為16(包含小數(shù)位數(shù))。DOUBLE類型的小數(shù)精度可以達(dá)到53位。DOUBLE與REAL同義。顯示長(zhǎng)度(M)和小數(shù)位數(shù)(D)。DECIMAL與NUMERIC同義。MySQL包含以下幾種年的月日就存1973-12-30DATETIME按照YYYY-MM-DDHH:MM:SS1000-01-0100M介于 日凌晨與年某個(gè)時(shí)間點(diǎn)之間的一種時(shí)間戳。這種格式與之前的DATETIME格式相仿,只不過(guò)少了數(shù)字間的連字符。年月日下午:30被存為19731230153000(YYYY 4雖然數(shù)字與日期類型都很有趣,但通常我們最多的就是字符串了。下面列出了MySQL中常見的字符串類CHAR(M)長(zhǎng)度固定的字符串,長(zhǎng)度范圍從1~255個(gè)字符,比如CHAR(5)。在時(shí),會(huì)向右用空格補(bǔ)齊指VARCHAR(M)長(zhǎng)度不定的字符串,長(zhǎng)度范圍從1~255個(gè)字符。比如:CHAR(25)。在創(chuàng)建VARCHAR字BLOBorTEXT最大長(zhǎng)度為65535個(gè)字符的字段。BLOB是BinaryLargeObjects(二進(jìn)制大型對(duì)象)的縮寫,于保存大量的二進(jìn)制數(shù)據(jù),比如或其他類型的文件。TEXT類型的文件也能保存大型數(shù)TINYBLOBorTINYTEXT最大長(zhǎng)度為255個(gè)字符的BLOBTEXTMEDIUMBLOBorT最大長(zhǎng)度為個(gè)字符的BLOBTEXT字段。同樣也不能指LONGBLOBorLONGTEXT最大長(zhǎng)度為 個(gè)字符的BLOB或TEXT字段。同樣也不能指定ENUM枚舉類型,是一種很獨(dú)特的列表類型。ENUM選擇這些值(包括NULL值)"A"、"B"和"C",EUM('A'B''C'),只有這些值(或NULL值)能夠填充到該字段中創(chuàng)建MySQL創(chuàng)建表令需要表字段每一字段的定CREATETABLEtable_name(column_name然后在TUTORIALS數(shù)據(jù)庫(kù)創(chuàng)建如下表tutorial_idINTNOTNULLAUTO_INCREMENT,tutorial_titleVARCHAR(100)NOTNULL,tutorial_authorVARCHAR(40)NOTNULL,submission_dateDATE,PRIMARYKEY(tutorial_id這里需要解釋的使用字段屬性NOTNULLMySQL就字段屬性UTO_INCEMENT告訴MySQL續(xù)為id關(guān)鍵PRIMARYKEY 式。使用SQL命令CREATETABLE即可創(chuàng)建一個(gè)表范在下面這個(gè)范例中,創(chuàng)建了tutorials_tblroot@host#root@host#mysql-uroot-pEnterpassword:*******mysql>useTUTORIALS;Databasemysql>CREATETABLE->tutorial_idINTNOTNULL->tutorial_titleVARCHAR(100)NOT->tutorial_authorVARCHAR(40)NOT->submission_date->PRIMARYKEY(tutorial_id->QueryOK,0rowsaffected(0.16sec)注意:只有在SQL命令末尾加上分號(hào)(;)才能終止這個(gè)命令利用PHP創(chuàng)建在已有的數(shù)據(jù)庫(kù)中創(chuàng)建新表,可PHPyq_query()函數(shù)。利用正確的SQL命令為其傳入第二個(gè)參范 <title>CreatingMySQL$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){die('Coulddie('Couldnotconnect:'.}echo'Connectedsuccessfully<br$sql="CREATETABLEtutorials_tbl("."tutorial_idINTNOTNULLAUTO_INCREMENT,"."tutorial_titleVARCHAR(100)NOTNULL,"."tutorial_authorVARCHAR(40)NOTNULL,"."submission_dateDATE,"."PRIMARYKEY(tutorial_id));";mysql_select_db('TUTORIALS');$retval=mysql_query($sql,$conn);if(!$retval){}echo"Tablecreatedsuccessfully\n";MySQL刪除已有的MySQL表是很容易的,但你要非常,因?yàn)閯h除了表,就無(wú)法恢復(fù)數(shù)據(jù)了DROPTABLEtable_name范在以下范例中,刪除了表tutorials_tblroot@host#root@host#mysql-uroot-pEnterpassword:*******mysql>useTUTORIALS;Databasemysql>DROPTABLEtutorials_tblQueryOK,0rowsaffected(0.8sec)利用PHP刪除ysl_uey范<title>CreatingMySQL$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){die('Couldnotconnect:'.}echo'Connectedsuccessfully<br$sql="DROPTABLEtutorials_tbl";mysql_select_db('TUTORIALS');$retval=mysql_query($sql,$conn);if(!$retval){die('Couldnotdeletetable:'.}MySQL可以使用PHP等來(lái)完成。利用INSERTINTO數(shù)據(jù)INSERTINSERTINTOtable_name(field1,field2,...fieldN)要想插入字符串類型的數(shù)據(jù),需要把值引號(hào)或單引號(hào)包括起來(lái),比如:"value"使用INSERTINTOtutorials_tbl插入數(shù)據(jù)范 為表tutorials_tbl創(chuàng)建3條記錄root@host#root@host#mysql-uroot-pEnterpassword:*******mysql>useTUTORIALS;Databasemysql>INSERTINTO->(tutorial_title,tutorial_author,-->("LearnPHP","JohnPoul",NOW());QueryOK,1rowaffected(0.01sec)mysql>INSERTINTOtutorials_tbl->(tutorial_title,tutorial_author,-->("LearnMySQL","AbdulS",QueryOK,1rowaffected(0.01sec)mysql>INSERTINTO->(tutorial_title,tutorial_author,>("JAVATutorial","Sanjay",'2007-05-QueryOK,1rowaffected(0.01sec)注意:代碼中的箭頭符號(hào)(->)不屬于SQL命令。它們只是用來(lái)表示換行,如果我們?cè)诿啃忻钅┪膊惶砑臃痔?hào)(;),按下回車鍵時(shí),MySQL命令提示符就會(huì)自動(dòng)創(chuàng)建出這個(gè)符號(hào)。在上tutorial_id,因?yàn)樵趧?chuàng)建表時(shí),已為該字段提供了AUTO_INCREMENT選項(xiàng)。因此MySQL會(huì)自動(dòng)知道插入ID。NOW()是一個(gè)能夠返回當(dāng)前日期與時(shí)間的MySQL函數(shù)。利用PHP插入數(shù)同樣,也可以在PHPmysql_querySQL命令I(lǐng)NSERTINTOMySQL據(jù)。在下面這個(gè)范例中,從用戶那里接收3個(gè)參數(shù),然后將這些參數(shù)插入到MySQL表中<title>AddNewRecordinMySQL{$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){die('Couldnotconnect:'.}if(!get_magic_quotes_gpc(){$tutorial_title=addslashes$tutorial_author=addslashes}{$tutorial_title=$tutorial_author=}$submission_date=$sql="INSERTINTOtutorials_tbl"."(tutorial_title,tutorial_author,submission_date)"."VALUES".$retval=mysql_query($sql,$conn);if(!$retval){die('Couldnotenterdata:'.}echo"Entereddatasuccessfully\n";}{<formmethod="post"action="<?php$_PHP_SELF<tablewidth="600"border="0"cellspacing="1"<tdwidth="250">Tutorial<inputname="tutorial_title"type="text"<tdwidth="250">Tutorial<inputname="tutorial_author"type="text"<tdwidth="250">SubmissionDate[yyyy-mm-dd<inputname="submission_date"type="text"<tdwidth="250"><td><tdwidth="250"><inputname="add"type="submit"id="add"value="Add}在輸入數(shù)據(jù)時(shí),使用函數(shù)get_agi_qute_gp()false,用addslashes()在引號(hào)前添加反斜杠。 MySQLPHP等來(lái)完成[WHEREClause][OFFSETM][LIMITWHEREWHERE不是SELECT可以用星型符號(hào)(*)代替字段。這時(shí),SELECTWHERE在SELECT將要返回記錄的位置處,使用OFFSET0可以使用LIMIT屬性來(lái)限制返回記錄的數(shù)量SELECT令從tutorials_tbl取數(shù)據(jù)范下面這個(gè)范tutorials_tbl的所有記錄root@host#root@host#mysql-uroot-pEnterpassword:*******mysql>useTUTORIALS;Databasemysql>SELECT*from ++11|Learn|JAVATutorial|Sanjay3rowsinset(0.01sec)使用PHP獲取數(shù)同樣,也可以在msql_uery()函數(shù)中使用SQL命令SELECT。該函數(shù)用于執(zhí)行SQL命令。隨后另一個(gè)PHP數(shù)ysl_etch_array()會(huì)獲取所有選定的數(shù)據(jù),該函數(shù)會(huì)將行以關(guān)聯(lián)數(shù)組或數(shù)值數(shù)組返回,或者還可能同時(shí)返回以上兩種形式。如果再也沒有行,則該函數(shù)返回FALSE。下面通過(guò)一個(gè)簡(jiǎn)單的范例來(lái)了解如何獲取tutorials_tbl范下面這個(gè)范tutorials_tbl的所有記錄$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){}FROM$retval=mysql_query($sql,$conn);if(!$retval){}while($row=mysql_fetch_array($retval,{{echo"TutorialID:{$row['tutorial_id']}<br>"."Title:{$row['tutorial_title']}<br>"."Author:{$row['tutorial_author']}<br>"."SubmissionDate:{$row['submission_date']}<br>". }echo"Fetcheddatasuccessfully\n";行的內(nèi)容被賦給$row,隨后輸出行注意:一定要記住,在把一個(gè)數(shù)組值直接插入到字符串中時(shí),一定要加花括號(hào)(與)在上面的例子中,常量MYSQL_ASSOC被用作PHP函數(shù)mysql_fetch_array()的第二個(gè)參數(shù),因此才會(huì)將()范$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){}FROM$retval=mysql_query($sql,$conn);if(!$retval){}while($row={echoecho"TutorialID:{$row['tutorial_id']}<br>"."Title:{$row['tutorial_title']}<br>"."Author:{$row['tutorial_author']}<br>"."SubmissionDate:{$row['submission_date']}<br>". }echo"Fetcheddatasuccessfully\n";你可以使用常量MYSQL_NUM作為mysql_fetch_array()函數(shù)的第二個(gè)參數(shù)。這能讓函數(shù)返回一個(gè)帶有數(shù)字范在下面的范例中,使用參數(shù)MYSQL_NUM來(lái)顯示表tutorials_tbl中的所有記錄$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){}FROM$retval=mysql_query($sql,$conn);if(!$retval){}while($row={"Title:{$row[1]}<br>"."Author:{$row[2]}<br>"."SubmissionDate:{$row[3]}<br>".}echoecho"Fetcheddatasuccessfully\n";在每個(gè)SELECT語(yǔ)句末尾釋放游標(biāo)內(nèi)存是一個(gè)非常好的做法。使用PHP函數(shù)mysql__result()就可以實(shí)范$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){}FROM$retval=mysql_query($sql,$conn);if(!$retval){}while($row={"Title:{$row[1]}<br>"."Author:{$row[2]}<br>"."SubmissionDate:{$row[3]}<br>".} echo"FetcheddataMySQLW前面介紹了利用SELECT中獲取數(shù)據(jù)。利用一種叫做WHERE子句的條件子句可以WHERE子句可以制定選擇規(guī)則,從表中選擇我們所需的記錄[WHEREcondition1[AND[OR]]condition2可以使用逗號(hào)分隔一個(gè)或多個(gè)表,從而在使用WHEREWHERE并非SELECT命令的一個(gè)可選部分??梢酝ㄟ^(guò)ANDOR下面這張表列出了WHERE子句中使假設(shè)A10字段B存著20,那么(AB)非(AB)非(AB)為(AB)非(AB)為WHERE以非常方便地獲取表中選定的行,尤其與MySQLJoin用時(shí)。Join稍后將擇章另述。使用SQLSELECTWHEREtutorials_tbl定數(shù)范以下范例將返回表tutorials_tbl作者名稱(authorname)為Sanjay錄root@host#root@host#mysql-uroot-pEnterpassword:*******mysql>useTUTORIALS;Databasemysql>SELECT*fromtutorials_tblWHERE +|tutorial_id|tutorial_title|tutorial_author|submission_date 3|JAVATutorial| +|2007-05-+++|++1rowsinset(0.01除非對(duì)字符串采用LIKE否則默認(rèn)比對(duì)是不區(qū)分大小寫的。要想讓搜索對(duì)大小寫敏感,可以如下例一般,使用BNRYroot@host#root@host#mysql-uroot-pEnterpassword:*******mysql>useTUTORIALS;DatabaseWHEREBINARYtutorial_author='sanjay';Emptyset(0.02sec)使用PHP來(lái)獲取數(shù)要想獲取表中數(shù)據(jù),也可PHP函數(shù)ue同時(shí)配合使SQLSELECTmysql_query執(zhí)行SQL令,再用另一PHPmysql_fetch_array定據(jù)。mysql_fetch_array會(huì)將行以關(guān)聯(lián)數(shù)組、數(shù)值數(shù)組,或者兩種兼有》》的形式返回。如果未選定任何數(shù)據(jù),則該函數(shù)返回FALSE。范以下范例將返回tutorials_tbl中作者名為Sanjay所有記錄$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){die('Couldnotconnect:'.}$sql='SELECTtutorial_id,tutorial_title,tutorial_author,FROMWHERE$retval=mysql_query($sql,$conn);if(!$retval){die('Couldnotgetdata:'.}while($row=mysql_fetch_array($retval,{echo"TutorialID:{$row['tutorial_id']}<br>"."Title:{$row['tutorial_title']}<br>"."Author:{$row['tutorial_author']}<br>"."SubmissionDate:{$row['submission_date']}<br>". }echo"Fetcheddatasuccessfully\n";MySQL有時(shí),MySQL的已有數(shù)據(jù)可能需要修改,可SQLUPDATE命令來(lái)處理。它會(huì)修改MySQL表中利用UPDATE命令修改MySQL中數(shù)據(jù)的一般語(yǔ)法格UPDATEUPDATEtable_nameSETfield1=new-value1,field2=new-value2[WHEREClause]可以一起更新一個(gè)或多個(gè)字WHERE可以每次僅更新一張表中的在需要更新表中選定行時(shí),WHERE子句是下面使用SQL的UPDATE命令,再配合WHERE子句,來(lái)更新MySQL表tutorials_tbl中的選定數(shù)范root@host#root@host#mysql-uroot-pEnterpassword:*******mysql>useTUTORIALS;Databasemysql>UPDATE->WHEREQueryOK,1rowaffected(0.04Rowsmatched:1Changed:1Warnings:使用PHP來(lái)更新數(shù)同樣,也可以PHPy()函數(shù)中使SQLUPDATE命令和(或不用)WHERE子句。該函數(shù)執(zhí)SQL命令的方式mysql命令行方式相同。范$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){}$sql='UPDATEWHEREtutorial_id=3';$retval=mysql_query($sql,$conn);if(!$retval){die('Couldnotupdatedata:'.}echo"Updateddatasuccessfully\n";MySQL如果想MySQL中刪除記錄,就要用SQLDELETEFROM。可以在命令行中使用該命令,也可以在PHP中使用它。DELETEFROMtable_name[WHERE如果未指定WHEREWHERE在刪除表中選定的行時(shí),WHERE子句是非范root@host#root@host#mysql-uroot-pEnterpassword:*******mysql>useTUTORIALS;Databasemysql>DELETEFROMtutorials_tblWHEREtutorial_id=3;QueryOK,1rowaffected(0.23sec)利用PHP來(lái)刪除數(shù)可以使PHPmysql_query()函數(shù),配SQLDELETE命令以及WHERE句(也可以不句)刪除數(shù)據(jù)。mysql_query()函數(shù)執(zhí)行SQL命令的方式類似于上面講到令行方式范$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){}$sql='DELETEFROMtutorials_tblWHEREtutorial_id=3';$retval=mysql_query($sql,$conn);if(!$retval){}echo"Deleteddatasuccessfully\n";MySQLLikese前面幾節(jié)講解了如何利SQLSELECT令來(lái)獲MySQL表中的數(shù)據(jù),以及如何利用WHERE子句這種當(dāng)我們需要進(jìn)行精確匹配時(shí),可以在WHERE子句中加入等號(hào)(=)iftutorial_author'Sanjay'if條件語(yǔ)句一樣。但有時(shí)我們會(huì)想在所有的結(jié)果tutorial_author包含"jay"符的結(jié)果。這時(shí)就應(yīng)該利用SQL的LIKE子句搭配WHERE子句來(lái)解決。如果SQLLIKE句帶有%字符,則相UNIX(*),在命令行中列出所有的文件或目如果LIKE%字符WHERE的情SELECTSELECTfield1,field2,...fieldNtable_name1,table_name2...WHEREfield1LIKEcondition1[AND[OR]]filed2='somevalue'WHERE件可以搭配使用LIKE句與WHERE子句LIKEWHERELIKE(%)時(shí),會(huì)按照元字符搜索那樣執(zhí)行使用ANDORLIKESQLSELECTWHERE...LIKE組合MySQLtutorials_tbl取選定范下面這個(gè)范例將返回表tutorials_tbl作者名結(jié)尾帶有jay的所有記錄root@host#root@host#mysql-uroot-pEnterpassword:*******mysql>useTUTORIALS;Databasemysql>SELECT*from->WHEREtutorial_authorLIKE ++|tutorial_id|tutorial_title|tutorial_author|submission_date 3|JAVATutorial| +|2007-05-+++|++1rowsinset(0.01在 中使用LIKE子RE...LIKESELECT令一起使用,那么先利mysql_query(函數(shù)執(zhí)SQL然PHPmysql_fetch_array獲取所有的數(shù)據(jù)但如WHERE...LIKE子句組合是DELETEUPDATE命令一起使用的話,就不需要再調(diào)PHP函數(shù)范下面這個(gè)范例將返回表tutorials_tbl作者名包含jay的記錄$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){}}$sql='SELECTtutorial_id,tutorial_title,FROMWHEREtutorial_authorLIKE$retval=mysql_query($sql,$conn);if(!$retval){}while($row=mysql_fetch_array($retval,{echo"TutorialID:{$row['tutorial_id']}<br>"."Title:{$row['tutorial_title']}<br>"."Author:{$row['tutorial_author']}<br>"."SubmissionDate:{$row['submission_date']}<br>". }echo"Fetcheddatasuccessfully\n";MySQL利用SQLSELECTORDERBY對(duì)MySQLSELECTSELECTfield1,field2,...fieldNtable_name1,table_name2...ORDERBYfield1,[field2...][ASC[DESC]]可以對(duì)多個(gè)字段的返回結(jié)果通??墒褂肳HERE...LIKE子句設(shè)置條件在命令行中使ORDERBY范在PHP中使用ORDERBY子除了在命令行中使用外,我們也可以在PHP函數(shù)mysql_query中使用ORDERBY語(yǔ)法都是相同的。先用mysql_query()執(zhí)行SQL命令,然后再用PHP函數(shù)mysql_fetch_array()獲取所有選范下面這個(gè)范例將按升序排列作者名稱(tutorial_author)$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){die('Couldnotconnect:'.}$sql='SELECTtutorial_id,tutorial_title,tutorial_author,FROMORDERBYtutorial_author$retval=mysql_query($sql,$conn);if(!$retval){die('Couldnotgetdata:'.}while($row=mysql_fetch_array($retval,{echo"TutorialID:{$row['tutorial_id']}<br>"."Title:{$row['tutorial_title']}<br>"."SubmissionDate:{$row['submission_date']}<br>". }echo"Fetcheddatasuccessfully\n";MySQLUsing迄今為止,我們每次只能從一張表里獲取數(shù)據(jù)。這足以應(yīng)付簡(jiǎn)單的任務(wù)了,但大多數(shù)真實(shí)的MySQL應(yīng)用場(chǎng)景卻在一個(gè)SQL查詢中使用多張表,聯(lián)結(jié)(join)行為在MySQL數(shù)據(jù)庫(kù)中指的就是將2張或的表合為一張表假設(shè)數(shù)據(jù)庫(kù)TUTORIALS中有兩張表:tcount_tbl和tutorials_tbl。完整的代碼如下所示范 Tutorial33rowsinset(0.00sec)上例SQL詢將兩張表聯(lián)結(jié)到一起。這次查詢選擇了表utorials_tbl中所有的作者,然后獲tcount_tbl中這些作者相應(yīng)的數(shù)量。||1|John 3| 11在 中使用可以在PHP中使用以前學(xué)到過(guò)的任何一種SQL查詢。只需要將SQL查詢傳入PHP函數(shù)mysql_query()中,就能按照之前的方式獲得結(jié)果。范相關(guān)范例如下$dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){}FROMtutorials_tbla,tcount_tblbWHEREa.tutorial_author=$retval=mysql_query($sql,$conn);if(!$retval){{die('Couldnotgetdata:'.}while($row=mysql_fetch_array($retval,{echo"Author:{$row['tutorial_author']}<br>"."Count:{$row['tutorial_count']}<br>"."TutorialID:{$row['tutorial_id']}<br>". }echo"Fetcheddatasuccessfully\n";MySQL的左聯(lián)結(jié)(LEFTMySQL的左聯(lián)結(jié)(LEFTJOIN)與簡(jiǎn)單使用JOIN的效果不范|1|John|1||2|Abdul3|||NULL1MySQLNULLa前面已經(jīng)介紹了如何利SQLSELECT命令配合WHERE句來(lái)獲取MySQL表中的數(shù)據(jù),但假如嘗試給為了處理這種情況,MySQL提供了三種運(yùn)算符ISNULLNULLtrueISNOTNULL:如果列值不為NULLtrue<=>:該運(yùn)算符用于兩個(gè)值的對(duì)比,當(dāng)兩個(gè)值相等時(shí)(即使這兩NULL這一點(diǎn)與=運(yùn)算符不同)true。包含NULL的條件都是比較特殊的。不能在列中使用NULLNULL來(lái)尋NULL通常都是失敗的,因?yàn)椴豢赡艿弥@樣的比對(duì)是否為真。即使NULLNULL失敗。在命令行中使用NULL假設(shè)數(shù)據(jù)庫(kù)TUTORIALS含一張叫做tcount_tbl的表,這張表包含tutorial_authortutorial_count,則tutorial_count中出現(xiàn)的NULL值代表該字段值未知。范請(qǐng)看下面這個(gè)范root@host#root@host#mysql-uroot-pEnterpassword:*******mysql>useTUTORIALS;Databasemysql>createtable->->tutorial_authorvarchar(40)NOT->tutorial_count->QueryOK,0rowsaffected(0.05sec)mysql>INSERTINTOtcount_tbl->->(tutorial_author,tutorial_count)values('mahnaz',NULL);mysql>INSERTINTOtcount_tblmysql>INSERTINTO2020下面,你會(huì)發(fā)并不適用NULL值mysql>mysql>SELECT*FROMtcount_tblWHEREtutorial_count=NULL;Emptyset(0.00sec)mysql>SELECT*FROMtcount_tblWHEREtutorial_count!=NULL;Emptyset(0.01sec)所以,要想確定tutorial_count列中到底何值為NULL,何值不為NULL,查詢應(yīng)該++2rowsinset(0.00++在PHP中處理NULL范 $dbhost=$dbuser=$dbpass=$conn=mysql_connect($dbhost,$dbuser,$dbpass);if(!$conn){}{$sql='SELECTtutorial_author,tutorial_countFROMtcount_tblWHEREtutorial_count=}{$sql='SELECTtutorial_author,tutorial_countFROMtcount_tblWHEREtutorial_countIS}$retval=mysql_query($sql,$conn);if(!$retval){}while($row=mysql_fetch_array($retval,{"Count:{$row['tutorial_count']}<br>".""}echo"Fetcheddatasuccessfully\n";MySQL正則表達(dá)式前面介紹過(guò)MySQL。MySQL還支持另一種基于正則表達(dá)式的模式匹配操作,使用的運(yùn)算符是REGEXP。如果你學(xué)過(guò)PHP或PERL,那么這就很好理解了,因?yàn)檫@里講的這種匹配方式跟那些語(yǔ)言中的正則表達(dá)式很下面就是一個(gè)模式列表,其中結(jié)合使用了REGEXP符字符串的開始位單個(gè)一對(duì)方括號(hào)之間未在一對(duì)方括號(hào)匹配前面元素的零個(gè)或多個(gè)匹配前面元素的一個(gè)或多個(gè)根據(jù)以上這張列表,可以設(shè)計(jì)出能夠滿足各SQL查詢。下面就來(lái)列舉一二。假設(shè)有一張表_tbl,mysql>SELECTname _blWHEREnameREGEXPok'查詢mysql>SELECTname _blWHEREnameREGEXP尋找包含'mar'的名稱,查詢?nèi)缦耺ysql>SELECTname _tblWHEREnameREGEXP尋找以元音字母開始并以'ok'結(jié)尾的名稱,查詢?nèi)缦耺ysql>SELECTname_tblWHEREnameREGEXPMySQL匯報(bào)成,否則事務(wù)不會(huì)結(jié)束。如果事務(wù)中的某一個(gè)操作失敗,則整個(gè)事務(wù)也將失敗。實(shí)際上,將在一個(gè)組中結(jié)合許多SQL查詢,你將同時(shí)執(zhí)行所有的事務(wù),作為事務(wù)的事務(wù)一般具有以下4種典型特點(diǎn),人們通常會(huì)用這4種特點(diǎn)的英文首字母縮寫組合詞ACID來(lái)表示(((MySQL中,事務(wù)通常以BEGINWORK語(yǔ)句開始COMMITROLLBACK(只取其一)語(yǔ)句結(jié)COMMITMySQL事務(wù)主COMMIT成功完成一個(gè)事務(wù)后,就會(huì)執(zhí)行COMMIT命令,從而使施加于所涉及的表上的改變?nèi)绻聞?wù)失敗,就會(huì)執(zhí)行ROLLBACK命令,將事務(wù)中所的每一個(gè)表都回撤到之前的狀態(tài) MIT可以控制事務(wù)行為。如果 設(shè)為0(通過(guò)命令SET 可以在PHP中利用mysql_query()執(zhí)行SQL命令。通過(guò)執(zhí)行SQL命令BEGINWORK務(wù)執(zhí)行一個(gè)或的如下SQL命令:SELECT、INSERT、UPDATE或DELETEROLLBACKCOMMITMySQL中的事務(wù)安全型不能直接使用事務(wù),如果強(qiáng)行使用,則無(wú)法保證它們的安全性。如果打算在MySQL編程中使用事務(wù),就需要以特殊的方式來(lái)創(chuàng)建表。有很多種支持事務(wù)表可供選擇,但其中最常見的是InnoDB。對(duì)InnoDB支持,需要在編譯MySQL源碼時(shí)用到一個(gè)特殊的編譯參數(shù)。如果MySQL本不支持InnoDB,則需要請(qǐng)你的ISP構(gòu)建一個(gè)支持InnoDB表類型的MySQL版本,或者安裝一個(gè)用于Windows或Linux/UNIX系統(tǒng)的MySQL-Max二進(jìn)制分發(fā)版,在其開發(fā)環(huán)境中使用這種表類型。如果你的MySQL本支InnoDB需在表創(chuàng)建TYPEInnoDB義即可。比root@host#root@host#mysql-uroot-pEnterpassword:*******mysql>useTUTORIALS;Databasemysql>createtable->->tutorial_authorvarchar(40)NOT->tutorial_count->)QueryOK,0rowsaffected(0.05有關(guān)InnoDB的詳細(xì)信息,可參看這個(gè)MySQLALTER為了實(shí)踐ALTER面先來(lái)創(chuàng)建一個(gè)名為testalter_tbl表。mysql>mysql>createtable( 假如要從上面我們創(chuàng)建的這張表中刪除i么應(yīng)該使用DROP子句和ALTER命令,如下所mysql>ALTERTABLEtestalter_tblDROP如果表中只有一DROP作用mysql>ALTERTABLEtestalter_tblADDi末尾。在創(chuàng)建表時(shí),i是第一列,現(xiàn)在卻成為最后一列。mysql>mysql>SHOWCOLUMNSFROM ++||Field|Type|Null|Key|Default|Extra+||++++|+++|char(1)|YES ||int(11)|YES ||||++++++2rowsinset(0.00要想把列放到一個(gè)特定位置,可以使用兩種方法。第法是使用FIRST,讓指定列成為第一列;第二種則采AFTER后跟給定列名的方式,指示新列應(yīng)該放到給定列名的后面。下面分別利用ALTERTABLE語(yǔ)句對(duì)列進(jìn)行操作,每執(zhí)行完一行后,我們可以使用SHOWCOLUMNS來(lái)查看一下各自的效果。ALTERALTERTABLEtestalter_tblDROPALTERTABLEtestalter_tblADDiINTFIRST;ALTERTABLEtestalter_tblDROPi;ALTERTABLEtestalter_tblADDiINTAFTER要想改變列的定義,需要使用MODIFYCHANGE子句,并配合使用ALTER令。例如,把c從CHAR(1)變?yōu)镃HAR(10):mysql>ALTERTABLEtestalter_tblMODIFYcA);CHANGE。必須把所要改變的列名放到CHANGE然后指定新的列定義。相關(guān)mysql>ALTERTABLEtestalter_tblCHANGEijmysql>ALTERTABLEtestalter_tblCHANGEjjALTERTABLE對(duì)Null及默認(rèn)我們不這樣處理,MySQL會(huì)自動(dòng)為這些屬性指定相關(guān)值。例如,NOTNULLmysql>mysql>ALTERTABLE->MODIFYjBIGINTNOTNULLDEFAULT如果不使用上述命令,則MySQL會(huì)在所有這些列中填充NULL 使用DROP子句與ALTER命令,可以去mysql>mysql>ALTERTABLEtestalter_tblALTERiDROPmysql>SHOWCOLUMNSFROM |Field|Type|Null|Key|Default|Extra+||+++++++|char(1)|YES |NULL||int(11)|YES+| +|++++2rowsinset(0.00通過(guò)SHOWTABLESTATUS當(dāng)前的表類mysql>mysql>ALTERTABLEtestalter_tblTYPE=MYISAM;mysql>SHOWTABLESTATUSLIKEName:testalter_tblType:Row_format:Row_format:FixedRows:0Avg_row_length:Data_length:Max_data_length:Index_length: Auto_increment:NULLCreate_time:200706-03Update_time:200706-03Check_time:NULLmysql>ALTERTABLEtestalter_tblRENAMETOALTER建并刪除MySQL節(jié)再M(fèi)ySQL索引在創(chuàng)建索引時(shí),需要考慮哪些列會(huì)用于SQL查詢,然后為這些列創(chuàng)建一個(gè)或多個(gè)索CREATECREATEUNIQUEINDEXindex_nameONtable_name(column1,也可以使用一或多個(gè)列來(lái)創(chuàng)建索引。比如說(shuō),表tutorials_tbl中,使用tutorial_author來(lái)創(chuàng)建索引CREATECREATEUNIQUEINDEX還可以為表創(chuàng)建簡(jiǎn)單索引,只需要在查詢時(shí)不帶UNIQUE關(guān)鍵字,就可創(chuàng)建簡(jiǎn)單索引。簡(jiǎn)單索引允許在表中復(fù) mysql>mysql>CREATEUNIQUEINDEX添加與刪N的ALTERALTERTABLEtbl_nameADDPRIMARYKEYcolumn_list)該語(yǔ)句添加一個(gè)主鍵。意味著索引值必須是NULL。ALTERTABLEtbl_nameADDUNIQUEindex_namecolumn_list)該語(yǔ)句為必須唯一的值(ALTERTABLEtbl_nameADDINDEXindex_namecolumn_list)語(yǔ)句為可能多次出現(xiàn)的值創(chuàng)建一般索ALTERTABLEtbl_nameADDFULLTEXTindex_name(column_list)語(yǔ)句創(chuàng)建于文本搜索的FULLTEXT索引。mysql>ALTERTABLEtestalter_tblADDINDEX可以使用DROPALTER索引,通過(guò)下面這個(gè)范例來(lái)刪除之前創(chuàng)建的索mysql>ALTERTABLEtestalter_tblDROPINDEX利用ALTER命令來(lái)添加與刪除mysql>mysql>ALTERTABLEtestalter_tblMODIFYiINTNOTNULL;mysql>ALTERTABLEtestalter_tblADDPRIMARYKEY(i);同樣,也可以使ALTER主鍵mysql>ALTERTABLEtestalter_tblDROPPRIMARY如果要?jiǎng)h除非主鍵的索引,則必須指定索引使用SHOWINDEX所有索引。以垂直格式輸出(標(biāo)識(shí)\G)會(huì)比較便于查看,可避免單行mysql>mysql>SHOWINDEXFROMMySQLMySQL是從3.23開始引入臨時(shí)表這一3.23前的MySQL版本,則無(wú)法使用臨時(shí)表,但可以使用堆表(HEAPtable)。如上所述,臨時(shí)表只能在會(huì)生存期內(nèi)存在。果在PHP中運(yùn)行代碼,那么當(dāng)結(jié)束執(zhí)行時(shí),就會(huì)動(dòng)清除臨時(shí)表。如果通過(guò)MSL客戶端程序連接MQL戶端或者手動(dòng)清除該表。下面范例將展示臨時(shí)表的用法。同樣的代碼也可通過(guò)myql_query()用于PHP中mysql>mysql>CREATETEMPORARYTABLESalesSummary->product_nameVARCHAR(50)NOT->,total_salesDECIMAL(12,2)NOTNULLDEFAULT->,avg_unit_priceDECIMAL(7,2)NOTNULLDEFAULT->,total_units_soldINTUNSIGNEDNOTNULLDEFAULTQueryOK,0rowsaffected(0.00mysql>INSERTINTO->(product_name,total_sales,avg_unit_price,->mysql>SELECT*FROM ++ | 100.25 +90.00+++2++利用SHOWTABLES令顯示表時(shí),臨時(shí)表不會(huì)出現(xiàn)在結(jié)果列表中。如MySQL話,就會(huì)執(zhí)SELECT那么數(shù)據(jù)庫(kù)中將沒有任何數(shù)據(jù),甚至臨時(shí)表也不存在了。下面就是一個(gè)刪除臨時(shí)表的范例mysql>mysql>CREATETEMPORARYTABLESalesSummary->product_nameVARCHAR(50)NOT->,total_salesDECIMAL(12,2)NOTNULLDEFAULT->,avg_unit_priceDECIMAL(7,2)NOTNULLDEFAULT->,total_units_soldINTUNSIGNEDNOTNULLDEFAULTQueryOK,0rowsaffected(0.00mysql>INSERTINTO->(product_name,total_sales,avg_unit_price,->mysql>SELECT*FROM ++ | 100.25 +90.00+++2++mysql>DROP

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論