第十六章:MySql數(shù)據(jù)庫基礎(chǔ)
1:MySql概述
1)功能強(qiáng)大:提供了多種數(shù)據(jù)庫存儲(chǔ)引擎,支持事務(wù)、視圖、存儲(chǔ)過程和觸發(fā)器
2)支持跨平臺(tái)
3)運(yùn)行速度快:在Mysql中,使用了B樹磁盤表(MyISAM)和索引壓縮;
4)支持各種開發(fā)語言:php、asp.net、java、python、ruby、c、c++、perl等
5)數(shù)據(jù)庫存儲(chǔ)容量大:mysql數(shù)據(jù)庫的最大有效表尺寸是由操作系統(tǒng)對(duì)文件大小的限制決定的。表空間最大容量64TB
2:?jiǎn)?dòng)、連接、斷開和停止MySql服務(wù)器(windows平臺(tái))
1)啟動(dòng):net start mysql
2)連接:mysql -u root -h 127.0.0.1 -p password (用戶名、MySql服務(wù)器所在地址、用戶密碼。服務(wù)器地址可不寫)
3)斷開:exit、quit
4)停止:net stop mysql
3:MySql數(shù)據(jù)庫操作
1)創(chuàng)建數(shù)據(jù)庫: CREATE DATABASE 數(shù)據(jù)庫名;
2)查看數(shù)據(jù)庫: SHOW DATABASES;
3)選擇數(shù)據(jù)庫:USE DATABASE
4)刪除數(shù)據(jù)庫:DROP DATABASE
4:MySql數(shù)據(jù)表操作
1)創(chuàng)建數(shù)據(jù)表:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] 數(shù)據(jù)表名 [(create_difinition,...)][table_options][select_statement]
TEMPORARY:如果使用該關(guān)鍵字,表示創(chuàng)建一個(gè)臨時(shí)表。
create_difinition: col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition]。如:
create table table_name (列名1 屬性, 列名2 屬性...);
2)查看表結(jié)構(gòu) SHOW COLUMNS 或 DESCRIBE
SHOW [FULL] COLUMNS FROM 數(shù)據(jù)表名 [FROM 數(shù)據(jù)庫名]; 或 SHOW [FULL] COLUMNS FROM 數(shù)據(jù)表名.數(shù)據(jù)庫名
DESCRIBE 數(shù)據(jù)表名(可簡(jiǎn)寫成DES)
查看某列: DES 數(shù)據(jù)表名 列名;
3)修改表結(jié)構(gòu):ALTER TABLE
ALTER[IGNORE] TABLE 數(shù)據(jù)表名 alter_spec [,alter_spec]... (如果指定 IGNORE 時(shí),如果出現(xiàn)重復(fù)關(guān)鍵的行,則只執(zhí)行一行,其他重復(fù)的唄刪除)
alter table tb_admin add email varchar(50) not null, modify user varchar(40); (modify是用來修改字句定義字段)
說明:通過alter修改表列,其前提是必須將表中數(shù)據(jù)全部刪除,然后才可以修改表列
4)重命名表:RENAME TABLE
5)刪除表:DROP TABLE
5:MySQL 語句操作
1)插入記錄 insert:insert into 數(shù)據(jù)表名(column_name,......)values(v1,v2.....)
2)查詢數(shù)據(jù)庫記錄 : select selection_list from 數(shù)據(jù)表名 where ... group by ... order by ... having ... limit...
(group by:對(duì)結(jié)果進(jìn)行分組;order by:對(duì)結(jié)果進(jìn)行排序;having:查詢時(shí)滿足的第二條件;limit:限定輸出的結(jié)果)
多表查詢:select 字段名 from 表1,表2...... where 表1.字段=表2.字段 and 其他查詢條件
3)修改、刪除記錄:update、delete
6:MySQL數(shù)據(jù)庫備份和恢復(fù)
要在命令行模式下操作MySQL數(shù)據(jù)庫,必須要對(duì)電腦的環(huán)境變量進(jìn)行設(shè)置,右擊“我的電腦”,選擇“屬性”,選擇“高級(jí)”,然后選擇“環(huán)境變量”。在用戶變量的文本框中找到變量PATH并選中,在PATH的變量值文本框中添加:“D:\webpage\AppServ\MySQL\bin”(MySql中bin文件夾的安裝路徑)
1)備份:使用MYSQLDUMP命令
mysqldump -uroot -proot db_databasename>F:\db_databasename.txt
其中-uroot中的root是用戶名,而-proot中的root是密碼,db_dabataname 是數(shù)據(jù)庫名。F:\db_databasename.txt 是備份存儲(chǔ)的位置
注意:“-uroot”中是沒有空格的,在該命令的結(jié)尾處也沒有任何的結(jié)束符
2)恢復(fù):mysql -uroot -proot db_database < F:\db_databasename.txt
第十七章:phpMyAdmin 圖形化管理工具
第十八章:PHP操作MySQL數(shù)據(jù)庫
1:連接mysql服務(wù)器:使用 mysql_connect() 函數(shù)
mysql_connect('hostname', 'username', 'password');?
hostname是mysql服務(wù)器的主機(jī)名(或IP),如果省略端口號(hào),默認(rèn)為3306
$link = mysql_connect("localhost","root","root") or die ("不能連接到數(shù)據(jù)庫服務(wù)器".mysql_error() ); if ($link) { echo "連接成功"; }
技巧:在mysql_connect()函數(shù)前面添加符號(hào)“@”;用于限制這個(gè)命令的出錯(cuò)信息的顯示
2:選擇mysql數(shù)據(jù)庫:使用 mysql_select_db() 函數(shù) 選擇mysql數(shù)據(jù)庫服務(wù)器上的數(shù)據(jù)庫,并與數(shù)據(jù)庫建立連接
mysql_select_db ( string 數(shù)據(jù)庫名 [, resource link_identifier] ) ?或 mysql_query ("use 數(shù)據(jù)庫名"[, resource link_identifier]);
link_identifier是MySQL服務(wù)器的連接標(biāo)識(shí)。如果沒有指定連接標(biāo)識(shí)符,則使用上一個(gè)打開的連接。如果沒有打開的連接,本函數(shù)將無參數(shù)調(diào)用mysql_connect()函數(shù)來嘗試打開一個(gè)并使用。
$link = mysql_connect ("localhost", "root", "root") or die ("不能連接到數(shù)據(jù)庫服務(wù)器".mysql_error() ); //選擇數(shù)據(jù)庫db_database18 $db_selected = mysql_select_db("db_database18", $link); if ($db_selected){ echo "數(shù)據(jù)庫選擇成功"; }
也可以使用$db_selected = mysql_query ("use db_database18", $link);
3:執(zhí)行SQL語句:在選擇的數(shù)據(jù)庫中使用 mysql_query() 函數(shù)執(zhí)行sql語句
1)mysql_query ( string query [, resource link_identifier] )
注意:在mysql_query() 函數(shù)中執(zhí)行的sql語句不應(yīng)以分號(hào) “;” 結(jié)尾
$result = mysql_query ("insert into tb_member values('tm','111','tm@tmsoft.com' ", $link); $result = mysql_query ("update tb_member set user = '純凈水', pwd='1025' where user = 'tm' ", $link); $result = mysql_query ("delete from tb_member where user = '純凈水' ", $link); $result = mysql_query (" select * from tb_member ", $link); //顯示表結(jié)構(gòu) $result = mysql_query (" DESC tb_member ", $link);
2)使用 mysql_fetch_array() 函數(shù)從數(shù)組結(jié)果集中獲取信息
array mysql_fetch_array ( resource result [, int result_type] )
result:資源類型的參數(shù),要傳入的是由mysql_query()函數(shù)返回的數(shù)據(jù)指針
result_type:可選項(xiàng),整數(shù)型參數(shù),要傳入的是MYSQL_ASSOC(關(guān)聯(lián)索引)、MYSQL_NUM(數(shù)字索引)、MYSQL_BOTH(包含以上2種,默認(rèn))
注意:本函數(shù)返回的字段名區(qū)分大小寫

$sql = mysql_query ("select * from tb_book" ); $info = mysql_fetch_array ( $sql ); if ( $_POST [submit] == "查詢" ){ $txt_book = $_POST [txt_book]; $sql = mysql_query ("select * from tb_book where bookname like '%". trim ( $txt_book )."%' " ); $info = mysql_fetch_array ( $sql ); }
3)使用 mysql_fetch_object() 函數(shù)從結(jié)果集中獲取一行作為對(duì)象
object mysql_fetch_object ( resource result )——返回的是一個(gè)對(duì)象而不是數(shù)組,通過字段名訪問數(shù)組: $row -> col_name?
注意:本函數(shù)區(qū)分大小寫
4)使用 mysql_fetch_row() 函數(shù)逐行獲取結(jié)果集中的每條記錄
array mysql_fetch_row ( resource result )
與mysql_fetch_array()函數(shù)區(qū)別是:使用從0開始的數(shù)字下標(biāo)。
區(qū)分大小寫
5)使用 mysql_num_rows() 函數(shù)獲取查詢結(jié)果集中的記錄數(shù)
int mysql_num_rows ( resource result )
PHP分頁:

<html> <head> <title>公告信息管理</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <link href="css/style.css" rel="stylesheet"> </head> <body> <table width="828" height="522" border="0" align="center" cellpadding="0" cellspacing="0" id="__01"> <tr> <td background="images/image_01.gif"> </td> <td height="140" background="images/image_02.gif"> </td> </tr> <tr> <td width="202" rowspan="3" valign="top"><table width="202" border="0" cellspacing="0" cellpadding="0"> <tr> <td><?php include ("menu.php");?></td> </tr> </table></td> <td height="34" background="images/image_04.gif"> </td> </tr> <tr> <td height="38" background="images/image_06.gif"> </td> </tr> <tr> <td height="270" valign="top"> <table width="626" height="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="257" align="center" valign="top" background="images/image_08.gif"><table width="600" height="271" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="22" align="center" valign="top" class ="word_orange"><strong>公告信息<strong>分頁顯示</strong></strong></td> </tr> <tr> <td height="249" align="center" valign="top"> <table width="550" border="1" cellpadding="1" cellspacing="1" bordercolor="#FFFFFF" bgcolor="#999999"> <tr align="center" bgcolor="#f0f0f0"> <td width="221">公告標(biāo)題</td> <td width="329">公告內(nèi)容</td> </tr> <? php $conn = mysql_connect ("localhost","root","root") or die ("數(shù)據(jù)庫服務(wù)器連接錯(cuò)誤". mysql_error ()); mysql_select_db ("db_database18", $conn ) or die ("數(shù)據(jù)庫訪問錯(cuò)誤". mysql_error ()); mysql_query ("set names gb2312" ); /* $page為當(dāng)前頁,如果$page為空,則初始化為1 */ if ( $page =="" ){ $page =1 ;} if ( is_numeric ( $page )){ $page_size =4; // 每頁顯示4條記錄 $query ="select count(*) as total from tb_affiche order by id desc" ; $result = mysql_query ( $query ); // 查詢符合條件的記錄總條數(shù) $message_count = mysql_result ( $result ,0,"total"); // 要顯示的總記錄數(shù) $page_count = ceil ( $message_count / $page_size ); // 根據(jù)記錄總數(shù)除以每頁顯示的記錄數(shù)求出所分的頁數(shù) $offset =( $page -1)* $page_size ; // 計(jì)算下一頁從第幾條數(shù)據(jù)開始循環(huán) $sql = mysql_query ("select * from tb_affiche order by id desc limit $offset , $page_size " ); $row = mysql_fetch_object ( $sql ); if (! $row ){ echo "<font color='red'>暫無公告信息!</font>" ; } do { ?> <tr bgcolor="#FFFFFF"> <td><?php echo $row ->title;?></td> <td><?php echo $row ->content;?></td> </tr> <? php } while ( $row = mysql_fetch_object ( $sql )); } ?> </table> <br> <table width="550" border="0" cellspacing="0" cellpadding="0"> <tr> <!-- 翻頁條 --> <td width="37%"> 頁次:<?php echo $page ;?>/<?php echo $page_count ;?>頁 記錄:<?php echo $message_count ;?> 條 </td> <td width="63%" align="right"> <? php /* 如果當(dāng)前頁不是首頁 */ if ( $page !=1 ){ /* 顯示“首頁”超鏈接 */ echo "<a href=page_affiche.php?page=1>首頁</a> " ; /* 顯示“上一頁”超鏈接 */ echo "<a href=page_affiche.php?page=".( $page -1).">上一頁</a> " ; } /* 如果當(dāng)前頁不是尾頁 */ if ( $page < $page_count ){ /* 顯示“下一頁”超鏈接 */ echo "<a href=page_affiche.php?page=".( $page +1).">下一頁</a> " ; /* 顯示“尾頁”超鏈接 */ echo "<a href=page_affiche.php?page=". $page_count .">尾頁</a>" ; } mysql_free_result ( $sql ); mysql_close ( $conn ); ?> </tr> </table></td> </tr> </table></td> </tr> </table> </td> </tr> <tr> <td bgcolor="#F0F0F0"></td> <td height="43" background="images/image_12.gif"></td> </tr> </table> </body> </html>
注意:在連接數(shù)據(jù)庫時(shí),一定要使用 mysql_query("set names gb2312")函數(shù)設(shè)置數(shù)據(jù)庫的編碼格式(也可以設(shè)置為其他編碼)。通過該設(shè)置可以避免在輸出中文字符串時(shí)出現(xiàn)亂碼。
4:關(guān)閉結(jié)果集:數(shù)據(jù)庫操作完成后,需要關(guān)閉結(jié)果集以釋放資源—— mysql_free_result ($result);
技巧:如果在多個(gè)網(wǎng)頁中都要頻繁進(jìn)行數(shù)據(jù)庫訪問,則可以建立與數(shù)據(jù)庫服務(wù)器的持續(xù)連接來提高效率。因?yàn)槊看闻c數(shù)據(jù)庫服務(wù)器的連接需要較長(zhǎng)的時(shí)間和較大的開銷。建立持續(xù)連接的方法:調(diào)用 mysql_pconnect() 代替 myslq_connect()。建立的持續(xù)連接在本程序結(jié)束時(shí),不需要調(diào)用 mysql_close()來關(guān)閉。下次程序再次執(zhí)行 mysql_pconnect() 函數(shù)時(shí),系統(tǒng)自動(dòng)直接返回已經(jīng)建立的持續(xù)連接的ID號(hào),而不再去真的連接數(shù)據(jù)庫。
5:關(guān)閉MySQL服務(wù)器——完成數(shù)據(jù)庫操作后,應(yīng)該使用 mysql_close() 函數(shù)關(guān)閉與MySQL服務(wù)器的連接: mysql_close ($Link);
說明:PHP與數(shù)據(jù)庫的連接是非持久連接,系統(tǒng)會(huì)自動(dòng)回收,一般不用設(shè)置關(guān)閉。但如果一次性返回的結(jié)果集比較大,或網(wǎng)站訪問量比較多,則最好使用mysql_close() 函數(shù)手動(dòng)進(jìn)行釋放。
?
第十九章:ADODB類庫
1:概述——ADODB:Active Data Objects Data Base,它是存取數(shù)據(jù)庫所用到的一組函數(shù),此函數(shù)庫用來隱藏不同數(shù)據(jù)庫函數(shù)間的差異,讓開發(fā)者可以很簡(jiǎn)單地去切換數(shù)據(jù)庫。要使用ADODB來操作數(shù)據(jù)庫,首先下載ADODB類庫包,將其解壓到Web服務(wù)器目錄下,然后調(diào)用ADODB中的文件即可
2:使用ADODB操作MySQL

/* (1)載入(include)adodb.inc.php文件 要使用ADODB類庫,首先是要啟動(dòng)ADODB,啟動(dòng)ADODB的方法就是載入adodb.ini.php文件. */ include_once ('../adodb5/adodb.inc.php' ); /* (2)建立連接 建立連接使用到的函數(shù)為:ADONewConnection()和NewADOConnection()。 */ $conn = ADONewConnection('mysql' ); /* (3)連接數(shù)據(jù)庫 第二步的建立連接,并沒有真正的連接上數(shù)據(jù)庫,需要使用Connect()或PConnect()成員方法來完成最后的鏈接步驟。Connect()和PConnect()方法的格式是一樣的,不同的是:PConnect()方法為持續(xù)性鏈接,而Connect()方法為非持續(xù)性鏈接。 Connect($host,[$user],[$password],[$database]) 參數(shù)含義: $host:數(shù)據(jù)庫服務(wù)器地址。 $user:數(shù)據(jù)庫帳號(hào)。 $password:帳號(hào)密碼。 $database:連接的數(shù)據(jù)庫。 在本實(shí)例中,要鏈接數(shù)據(jù)庫tb_database21,服務(wù)器為本機(jī),用戶名密碼都為root。 */ $conn -> PConnect('localhost','root','root','db_database21' ); // 設(shè)置編碼 $conn -> execute('set names gb2312' ); /* /*(4)執(zhí)行SQL語句 成功連接數(shù)據(jù)庫后,就可以執(zhí)行SQL語句對(duì)數(shù)據(jù)庫進(jìn)行操作了。執(zhí)行SQL語句的方法是Execute()。該方法返回執(zhí)行SQL語句后的記錄集。如果發(fā)生錯(cuò)誤,則返回false。Execute()方法的格式為: Execute($sql,$inputarr=false) */ $rst = $conn -> Execute('select * from tb_object') or die ('執(zhí)行錯(cuò)誤' ); /* (5)判斷結(jié)果,并對(duì)結(jié)果處理 第4步執(zhí)行后,就需要對(duì)返回的記錄集進(jìn)行處理了。一般處理結(jié)果集時(shí),首先判斷EOF屬性表明當(dāng)前的記錄指針已經(jīng)指向了記錄集的最后一筆。movenext()方法的作用是將記錄指針向下移動(dòng)一位。 */ while (! $rst -> EOF){ // 如果沒有錯(cuò)誤,則配合wihle語句循環(huán)輸出結(jié)果 echo $rst -> fields['bigclass'].' ' ; $rst -> movenext(); // 指針下移 } /* (6)關(guān)閉連接 當(dāng)對(duì)數(shù)據(jù)庫的操作結(jié)束后,需要關(guān)閉連接,釋放內(nèi)存。關(guān)閉連接的方法是close()。 */ $rst -> close(); $conn -> close();
也可以通過數(shù)據(jù)源名稱(DSN)的方式進(jìn)行連接,代碼如下:
include_once ('../adbdb5/dbodb.inc.php' ); $conn = ADONewConnection('mysql://root:root@localhost/db_database19');
使用ODBC連接MSSQL數(shù)據(jù)庫
include_once ('../adodb5/adodb.inc.php' ); $conn = ADONewConnection('odbc_mssql' ); $conn ->PConnect("Driver={SQL Server};Server=localhost;Database=mydb; ", 'username', 'password');
?
PHP從入門到精通——讀書筆記(第16—19章:MySQL數(shù)據(jù)庫基礎(chǔ)、PHP操作MySQL、ADODB類庫等)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
