Title1

Title2

Title3

7. MYSQL 資料庫

一、MySQL簡介

MySQL 是一套快速、功能強大的資料庫管理系統。所謂資料庫管理系統 (Database Management System, 簡稱為 DBMS ),它是透過一組程式模組來組織、管理、儲存和讀取資料庫的資料,任何使用者在操作資料庫時,都需要透過資料庫管理系統來處理。 目前MySQL已經成為最流行的開源資料庫,因此被廣泛地應用在 Internet 上的中小型網站中。隨著 MySQL 的不斷成熟,它也逐漸用於更多大規模網站和應用,例如 Google 和 Facebook 等網站。


二、MySQL資料型態

主要分為三類:Numeric、Date and Time、String Type。

  1. (M,D):M是資料位數,最大為255;D是小數位數。
  2. []中括號,表示M或D可以省略不寫,不寫的話則以內定範圍為準。
  3. unsigned表示正整數狀態,也就是沒有負數。
  4. zerofill表示位數不足補0,如int(4),存28這個數字,資料庫會將之存成0028。
  5. 日期部份:Y代表的是年,YY代表2位數的年,如97年,YYYY代表4位數的年,如2001年,其餘的M(月)、D(日)依此類推。
  6. 當年份數字在00-69之間,則會被當作2000-2069,若是在70-99之間,則當作1970-1999!
  7. php的時間戳記是unix timestamp是由1970/01/01 00:00累計之今的秒數。而MySQL的時間戳記則是YYYYMMDDHHMMSS,根據M值而有所不同。
  8. 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個選項  


三、MySQL管理工具

  1. https://www.adminer.org/


四、MySQL新增、更新、查詢、刪除

  1. 新增資料
    insert into `資料表`(`欄位1`,`欄位2`,`欄位3`) values ('{$v1}','{$v2}','{$v3}');
  2. 更新資料
    update `資料表` set `欄位1` = '值1',`欄位2` = '值2',`欄位3` = '值3' where `sn` = '{$sn}';
  3. 資料表查詢 
    select * from `資料表` ;
  4. 刪除資料
    delete from `資料表` where `sn` = '{$sn}';


五、讓PHP連上MYSQL

<?php
if($_SERVER["SERVER_NAME"] == "localhost" or $_SERVER["SERVER_NAME"] == "127.0.0.1"){
  #判斷主機為UniServerZ
  #MYSQL
  #資料庫伺服器
  $db_host = "localhost";
  
  #資料庫使用者帳號
  $db_user = "root";
  
  #資料庫使用者密碼
  $db_password = "111111";
  
  #資料庫名稱
  $db_name = "ugm_make";
  
}else{
  #MYSQL
  #資料庫伺服器
  $db_host = "localhost";
  
  #資料庫使用者帳號
  $db_user = "xxx";
  
  #資料庫使用者密碼
  $db_password = "xxx";
  
  #資料庫名稱
  $db_name = "xxx";
  
}
  
#PHP 5.2.9以後
$db = new mysqli($db_host, $db_user, $db_password, $db_name);
  
if ($db->connect_error) {

  die('無法連上資料庫 (' . $db->connect_errno . ') '
        . $db->connect_error);
}
  
#設定資料庫語系
$db->set_charset("utf8");


​六、常和SELECT一起用的PHP的函數

 

#執行SQL指令
$db->query($sql)
#傳回影嚮筆數
$db->affected_row
#傳回insert 指令所產生之流水號
$db->insert_id 


#select結果讀取
#select後回傳一個mysqli_result物件
$result = $db->query($sql);
$row=$result->fetch_row(); //陣列形態,可用$row[$n]存取,會用 list()來接變數
$row=$result->fetch_array(); //關聯陣列,用$row[$n]或$row[$colname]存取,名稱區分大小寫
$row=$result->fetch_assoc(); //關聯陣列,只能用$row[$colname]存取
$row=$result->fetch_abject(); //以物件方式存取,$row->colname
##每次呼叫都會傳回下一筆,直到最後傳回FALSE
$result->data_seek($row_number)跳到指定欄位
#查詢總筆數
$result->num_rows


#select結果之相關資訊
$inf=$result->fetch_fields();傳回相關物件資訊
$inf[$n]->name  //欄位名稱
$inf[$n]->table //欄位所屬資料表
$inf[$n]->max_length //最長資料長度
$inf[$n]->type  //資料形態