3. MySQL的資料存取
一、 關於phpMyAdmin或Adminer
- 要管理MySQL資料庫,需要進到MySQL ll終端機界面,並利用SQL語法,以下指令的方式來操作管理之,因此,透過人家寫好的視覺化界面來操作會更簡單。
- phpMyAdmin是一套歷史悠久的MySQL資料管理程式,安裝設定其實有點小麻煩,不過功能齊全,但相對也肥大。後起之秀Adminer(http://adminer.org),只有一個檔案,無須安裝設定即可使用,方便易用,值得推薦!需注意的是,這兩套都不是MySQL,均為一套PHP程式,用理MySQL的成世界面而已。
- 打開瀏覽器,輸入「http://163.26.52.243/phpmyadmin」可執行phpMyAdmin。
- 輸入「http://163.26.52.243/adminer.php」則可執行Adminer。
二、 注意資料庫的「校對」
- 「資料庫」和「資料表」名稱不能以「數字」或特殊符號作為開頭。
- MySQL 4.1 以後,建立資料表時,若要使用UTF8,在「校對」選項請選擇「utf8_general_ci」。(latin1_swedish_ci是預設值,記得改掉!)
三、 建立資料表
- 登入,選擇「資料庫」,點擊「建立資料表」,輸入資料表名稱,引擎選用「MyISAM」,校對選用「utf8_general_ci」。
- 基本動作:設好欄位名稱→指定資料型態(適當的資料類型讓您上天堂!)
- (1) 若是varchar則一定要設定「長度」,通常建議給到最大255;
- (2) 若是數字則「屬性」多為「unsigned」,即正整數之意;
- (3) 若是要當作流水號,則在「附加」選擇AI即「auto_increment」最後指定哪些欄位要當作索引。
四、 MySQL常用資料類型一覽
- (M,D):M是資料位數,最大為255;D是小數位數。
- []中括號,表示M或D可以省略不寫,不寫的話則以內定範圍為準。
- unsigned表示正整數狀態,也就是沒有負數。
- zerofill表示位數不足補0,如int(4),存28這個數字,資料庫會將之存成0028。
- 日期部份:Y代表的是年,YY代表2位數的年,如97年,YYYY代表4位數的年,如2001年,其餘的M(月)、D(日)依此類推。
- 當年份數字在00-69之間,則會被當作2000-2069,若是在70-99之間,則當作1970-1999!
- php的時間戳記是unix timestamp是由1970/01/01 00:00累計之今的秒數。而MySQL的時間戳記則是YYYYMMDDHHMMSS,根據M值而有所不同。
- Big5中文,一個字佔2位元;UTF-8中文,一個字佔3位元。
|
類型 |
bytes |
範圍 |
選項 |
數字類型 |
TINYINT(M) 非常小整數 |
1 |
-128到127,unsigned狀態則為0到255 |
unsigned、zerofill |
SMALLINT(M) 較小整數 |
2 |
-32768到32767,unsigned狀態則為0到65535 |
unsigned、zerofill |
MEDIUMINT(M) 中型整數 |
3 |
-8388608到8388607,unsigned狀態則為0到16777215 |
unsigned、zerofill |
INT(M) 標準整數 |
4 |
-2147483648到2147483647unsigned狀態則為0到4294967295 |
unsigned、zerofill |
BIGINT(M) 大整數 |
8 |
-9223372036854775808到9223372036854775807unsigned狀態則為0到18446744073709551615 |
unsigned、zerofill |
FLOAT(M) 單精確度浮點數 |
4 |
FLOAT(M,D)最小非零值:±1.175494351E - 38FLOAT(4)最大非零值:±3.402823466E + 38FLOAT(8)最大非零值:±1.7976931348623157E + 308 |
zerofill |
DOUBLE(M) 雙精確度浮點數 |
8 |
最小非零值:±2.2250738585072014E - 308 |
zerofill |
DECIMAL(M,D) |
M |
可變;其值的範圍依賴於M和D |
zerofill |
日期類型 |
DATE 日期 |
3 |
1000-01-01到9999-12-31 |
|
DATETIME 日期時間 |
8 |
1000-01-01 00:00:00到9999-12-31 23:59:59 |
|
TIMESTAMP(M) 時間戳記 |
2,4,6,8,10,12,14 (左) |
1970-01-01 00:00:00到2037 |
|
TIME 時間 |
3 |
-838:59:59到838:59:59 |
|
YEAR 年度 |
1 |
1901到2155 |
|
文字類型 |
CHAR(M) 固定長度字串 |
M |
1<=M<=255 |
|
VARCHAR(M) 變動長度字串 |
M+1 |
1<=M<=255 |
|
TINYTEXT非常小的文本串 |
M+1 |
255個字元 |
|
TEXT小文本串 |
M+2 |
65535個字元 |
|
MEDIUMTEXT中等文本串 |
M+3 |
16777215個字元 |
|
LONGTEXT大文本串 |
M+4 |
4294967295個字元 |
|
TINYBLOB超小型BLOB |
M+1 |
255個字元 |
|
BLOB小型BLOB |
M+2 |
65535個字元 |
|
MEDIUMBLOB中型BLOB |
M+3 |
16777215個字元 |
|
LONGBLOB大型BLOB |
M+4 |
4294967295個字元 |
|
特殊 |
ENUM 單選選項 |
1或2 |
最多65535個選項 |
|
SET 複選選項 |
1,2,3,4,8 |
最多64個選項 |
|
五、 匯出資料表
- 為了方便系統重建或轉移,我們可以將資料庫結構匯出,方便下一次安裝。
- 點選「匯出」,格式選用「sql」,並句選要匯出的資料表名稱。若有要匯出資料,則資料部份也需打勾(此例不用)
- 匯出後是一個xxx.sql檔,此為文字檔,可用任何編輯器開啟,日後易可以方便的進行匯入動作。
- 您可以將SQL檔打開,並將一些註解及SET刪除掉。
六、 讓PHP連上MySQL
$link=@mysql_connect("localhost","root"," 12345");
if($link){
mysql_query("SET NAMES 'utf8'");
mysql_select_db("test");
}else{
die("無法連上資料庫");
}
- 用法:int mysql_connect("主機位置","資料庫帳號"," 資料庫密碼");
- 範例:$link=mysql_connect("localhost","root","12345");
- 該函數會傳回一個int(整數),我們稱之為「連線編號」,其資料型態為:資源。
- 只要程式和資料庫都在同一台主機,「主機位置」填入「localhost」即可。
- 執行SQL語法:int mysql_query( "SQL語法" [, 連線編號]);
- 結束連線可使用:「mysql_close($link);」,不過,其實不用也沒關係。
- 讓MySQL可以順利寫入UTF8中文:mysql_query("SET NAMES 'utf8'"); 在連線之後,加入此行即可。
- 選擇資料庫:mysql_select_db("資料庫名稱");
七、 新增資料到資料庫
- 寫入一筆資料到MySQL中,就要用insert或replace的語法,其用法如下:
insert [into] 資料表名稱 [(欄位1,欄位2...)] values (值1,值2...)
- insert 改為 replace 則為「取代」之意,亦即若唯一索引的欄位值已存在,則用新值覆蓋舊值。若不存在,則新增。
- 可以一次新增多筆:
insert [into] 資料表名稱 [(欄位1,欄位2...)] values ( 值 A1, 值 A2... ) , ( 值 B1, 值 B2...) , ( 值 C1 , C2...) , ( 值 D1 , 值 D2...) ;
- 欄位或資料表稱的前後可加「`」符號(也可不加),而值為字串時,則一定要加引號(通常為單引號)。
八、 讀取資料庫內容
- 要讀出MySQL的資料,那您就要用select這指令。
SELECT 查詢內容 [FROM `資料表名稱` 篩選條件]
- 「篩選條件」有以下幾個東西!注意喔!由上到下就是其語法的先後順序喔!您可不能把LIMIT拿到WHERE的前面,那是錯誤的喔!
- (1) [where 篩選條件]
- (2) [group by 欄位名稱][having group的篩選條件]
- (3) [order by {unsigned_integer | 欄位名稱 | formula} [asc | desc] ,...]
- (4) [limit [起點,] 筆數]
九、 常和select一起用的PHP的函數
- 從資料庫取得的陣列,索引值可以是數字或字串(即欄位名稱)。$row[0] 或 $row["title"]
$row=mysql_fetch_array();
- 從資料庫取得的陣列,索引值只能是數字(數字索引)。$row[0],通常搭配list()來將陣列值套用到指定變數上。
$row=mysql_fetch_row();
- 從資料庫取得的陣列,索引值只能是字串(關聯索引)。$row["title"]
$row=mysql_fetch_assoc();
十、 常和GROUP BY搭配使用的MySQL函數
- COUNT():計算數目
- AVG():計算GROUP的平均值
- MIN():找出最小值
- MAX():找出最大值
- SUM():總和