PHP與MySql入門學習指南PHP與MySQL入門學習指南第22章SQL介紹與建立MySQL資料庫凱文瑞克著PHP與MySql入門學習指南22-1什麼是SQL?SQL是一專門用來處理關聯式資料庫的標準程式語言。它誕生於1970年代後半,促使SQL問世的功臣是位於加州聖荷西的IBM實驗室(IBMLaboratory)。SQL(StructuredQueryLanguage)。結構化查詢語言PHP與MySql入門學習指南22-1什麼是SQL?SQL的念法:S-Q-L或see-kwul。SQL的標準化作業,是由ANSI(美國國家標準學會)與ISO(國際標準組織)這2個標準化組織所推動的。它最初的標準化規格,是在1986年由ANSI所制定,並緊接著在1992年時ANSI與ISO分別制南的新的規格,這項規格一般為SQL-92規格,通稱SQL2。在目前,ANSI與SIO也持續地在研討新一代的規格,這項規格一般稱為SQL-99規格,通稱SQL3。現在的SQL規格便是上述的SQL-92(SQL2)。PHP與MySql入門學習指南22-2SQL語言的功能分類22-2-1DDL資料定義語言CREATEALTERDROPPHP與MySql入門學習指南22-2SQL語言的功能分類22-2-2DML資料操作語言SELECTINSERTUPDATEDELETEPHP與MySql入門學習指南22-4建立資料庫22-4-1CREATE語法:CREATEDATABASE資料庫名稱;例:createdatabasedb_name;CreateDATABASEdb_name;CREATEDATABASEdb_name;PHP與MySql入門學習指南22-4建立資料庫22-4-2USEUSEdb_name;22-4-3DROPDROPdb_name;PHP與MySql入門學習指南PHP與MySQL入門學習指南第23章資料型別凱文瑞克著PHP與MySql入門學習指南數值資料型態名稱記憶體空間數值範圍無號數(UNSIGNED)TINYINT1bytes-128~1270-255SMALLINT2bytes-32768~327670-65535MEDIUMINT3bytes-8388608~83886070-16777215INT或INTEGER4bytes-2147483648~21474836470-4294967295BIGINT8bytes-922337203685475808~9223372036854758070-188446744073709550615FLOAT(M,D)4(24)/8依據變數值而定無FLOAT4bytes無DOUBLE(M,D)8bytes依據變數值而定無DECIMAL(M,D)MB單位+2依據變數值而定無PHP與MySql入門學習指南範例1.欄位定義FLOAT(4,2),存入1.2345,則實際存入的資料為1.23。2.欄位定義FLOAT(4,3),存入1.2345,則實際存入的資料為1.234。3.欄位定義TINYINT,存入1234,則實際存入的資料為255。4.CREATETABLETEST(Field1TINYINT);5.CREATETABLETEST(Field1FLOAT(4,3));PHP與MySql入門學習指南資料欄位設定子自動增量設定(AUTO_INCREMENT)範例:CREATETABLETEST1(Field1INTNOTNULLAUTO_INCREMENTPRIMARYKEY);PHP與MySql入門學習指南資料型別:字元或字串型態名稱最大長度儲存空間CHAR(X)255bytesxbytesVARCHAR(X)255bytesx+1bytesTINYTEXT255bytesx+1bytesTEXT65535bytesx+2bytesMEDIUMTEXT16,777,215bytesx+3bytesLONGTEXT4,294,967,295bytesx+4bytesTINYBLOB255bytesx+1bytesBLOB65535bytesx+2bytesMEDIUMBLOB16,777,215bytesx+3bytesLONGBLOB4,294,967,295bytesx+4bytesPHP與MySql入門學習指南CHAR及VARCHAR型態範例一:CREATETABLETEST(FIELD1CHAR(5),FIELD2VARCHAR(10));相當於CREATETABLETEST(FIELD1VARCHAR(5),FIELD2VARCHAR(10));範例二:CREATETABLETEST(FIELD1VARCHAR(2));相當於CREATETABLETEST(FIELD1CHAR(2));PHP與MySql入門學習指南PHP與MySQL入門學習指南第24章建立資料表與索引凱文瑞克著PHP與MySql入門學習指南範例一CREATETABLETEST(NAMEVARCHAR(8)BINARYNOTNULLDEFAULTguest,AGESMALLINTUNSIGNEDDEFAULT0);PHP與MySql入門學習指南範例二CREATETABLEcustomers(IDINTNOTNULLPRIMARYKEYAUTO_INCREMENT,NameVARCHAR(20)NOTNULL,AddressVARCHAR(50),E-MailVARCHAR(20),AgeINT,GenderENUM('M','F')DEFAULT'M',Phone_NoVARCHAR(15));PHP與MySql入門學習指南刪除資料表及欄位刪除資料表DROPTABLEtable_name;刪除部分欄位ALTERTABLEtable_nameDROPfield_name;刪除資料表中的primarykeyALTERTABLEtable_nameDROPPRIMARYKEY;PHP與MySql入門學習指南PHP與MySQL入門學習指南第25章資料庫增刪作業凱文瑞克著PHP與MySql入門學習指南INSERT語法:INSERTINTO[LOW_PRIORITY|DELAYED]Tbl_Name[(column_name,.......)]VALUES(expression,.......);例如:INSERTINTOCustomersVALUES(NULL,”Glen”,”brazil”)INSERTINTOCustomers(Customer_ID,Last_Name,First_Name)VALUES(NULL,“Brazil”,”Glen”)PHP與MySql入門學習指南UPDATEUPDATE[LOW_PRIORITY]tbl_nameSETcol_name=expr1,col_name2=expr2,..[whereexpr][limit#]col_name1=expr1指定等號左邊的欄位名稱及右邊的值,只有Where條件子句的欄位才會被修改成UPDATE中的內容。LIMIT#中的#代表整數,代表限制最多只能有#個資料列被更新。例如:UPDATEcustomersSETphone_no='99999999'address='台南市'whereid=1;PHP與MySql入門學習指南DELETEDELETE[LOW_PRIORITY]FROMtbl_name[WHEREexpr][LIMIT#];WHERE是用來限制刪除的範圍,如果不加上WHERE子句則會將整個資料表刪除,因此在下此命令時,一定要特別小心,更謹慎的方式就是使用LIMIT關鍵字,LIMIT後面接著的是數字,用來限制刪除的資料筆數,利用此指令先試著刪除一兩筆確定無誤後,再下一次DELETE進行完整的刪除動作。PHP與MySql入門學習指南PHP與MySQL入門學習指南第26章運算式與相關函式凱文瑞克著PHP與MySql入門學習指南以比較運算子查詢(一)PHP與MySql入門學習指南以比較運算子查詢(二)PHP與MySql入門學習指南邏輯運算(一)AND運算子(&&)當我們想要取出工作時段為日班,且工作年資在五年以下的員工資料時,我們便可以使用下列的敘述:SELECT*FROMSALARYWHEREWORKTIME='DAY'ANDEXP=5;PHP與MySql入門學習指南邏輯運算(三)OR運算子(||)當我們想要取出工作時段為日班,或工作年資在五年以下的員工資料時,我們便可以使用下列的敘述:SELECT*FROMSALARYWHEREWORKTIME='DAY'ANDEXP=5;PHP與MySql入門學習指南邏輯運算(四)NOT運算子(!)SELECT*FROMSALARYWHERENOTWORKTIME='NIGHT';SELECT*FROMSALARYWHEREJOBISNOTNULL;PHP與MySql入門學習指南邏輯運算(五)LIKE運算子利用=運算子,我們可以取出某一段與特定字串完全相同的資料,但是有的時候我們並不需要和這特定字串完全相同,只要它的其中某一部分和這個特定字串相便可以,碰到這種情況,就可以使用LIKE運算,LIKE可以和萬用字元組合在一起使用。PHP與MySql入門學習指南邏輯運算(六)%萬用字元欄位名稱LIKE%值或欄位名稱LIKE*值PHP與MySql入門學習指南PHP與MySQL入門學習指南第27章資料庫查詢作業凱文瑞克著PHP與MySql入門學習指南Select語法初探(一)SELECT的語法如下:SELECTcolumn1,column2,..FROMtable1,table2..WHEREconditions;SELECT*FROMCustomers;SELECT*FROMCustomersLIMIT10;SELECTFirst_Name,Last_NameFROMCustomersWHEREDOB=January;PHP與MySql入門學習指南Select語法初探(二)同一個欄位出現在FROM後一個以上資料表中,那麼就必須指明是要選取哪個資料表的哪個欄位。FROM子句中有使用一個以上的資料表時,所選取的欄位名稱前也必須加上資料表名稱,例如現在有兩個資料表Orders及Customers,都有Customer_ID欄位,當執行如下SQL敘述就必須指明清楚:SELECTOrders.Order_IDFROMOrders,CustomersWHERECustomer.Customer_ID=Orders.Customer_ID;另外一種用法,就是將SQL敘述中的資料表名稱以別名(Alias)代替,可以節省重複輸入的時間,也使得整個SQL敘述看起來不會那麼複雜,如:SELECTO.Order_IDFROMOrdersASO,CustomerASCWHEREC.Customer_ID=O.Customer_ID;PHP與MySql入門學習指南Select語法初探(三)SELECTconcat(First_Name,”“,Last_Name)ASNameFROMCustomers;SELECTconcat(First_Name,““,Last_Name)ASName,Adderss,City,StateFROMCustomers;SELECTMAX(Customer_ID)ASNumFROMCustomers;PHP與MySql入門學習指南SELECT語法進階(一)ORDERBYPHP與MySql入門學習指南SELECT語法進階(三)ASC/DESCPHP與MySql入門學習指南SELECT語法進階(四)DISTINCT