You are on page 1of 8

1. MySQL 基本介紹.............................................................................................................................

1
2. 安裝 MySQL 中文支援說明 RPM, Tar.gz.......................................................................................1
3. 基本使用方式及環境設定簡介.......................................................................................................2
4. 使用者建立、密碼、權限設定.......................................................................................................3
5. 範例: 建立資料庫 Database、表格 Table、顯示資料結構............................................................4
7. 範例: PHP 動態資料庫.....................................................................................................................6
8. 資料庫備份>與<還原.......................................................................................................................7
9. Url Links 網路連結...........................................................................................................................8

1. MySQL 基本介紹

 此參考文件是一份非常基礎且簡易的 MySQL 使用者應用參考資料。 本文最主要的目的在


於推廣 MySQL 在 Linux 上的應用以及快速建立動態資料庫的網站。 有關更詳細的 MySQL
介紹請參考第七章網路連結的參考網站。

它的正確發音是 ``My Ess Que Ell'', 請將 S、Q、L 分開來唸.

MySQL 是一個多使用者的標準 SQL(Structure Query Language) 關連式資料庫,它可在多種作


業平台上執行,如 Win9x、Win NT、Unix、Linux、Solaris 等。 由於它是一個開放式的軟體
(Open Source Software, General Public License) 所以您可以直接由網路上下載安裝,但在某些
情況下你必須要附費註冊。 在經過多次的改版修正後它已經是一個快速、穩定且易學的資料庫
系統。 由於它的強大功能、靈活性、豐富的應用編程介面(API)以及精巧的系統結構,受到了
廣大自由軟件愛好者甚至是商業軟件用戶的青睞,特別是與 Apache 和 PHP/PERL 結合,為建
立基於資料庫的動態網站提供了強大動力。

2. 安裝 MySQL 中文支援說明 RPM, Tar.gz

雖然 RedHat 已經有預設的 MySQL 但是預設的語系是 ISO-8859-1 (Latin1) character set, 因此


對 big5 中文碼不支援因此必需要重新安裝。 無論是選擇 RPM 或是 tarball 的模式一定要用
Source 來安裝才可,src RPM 請在 /usr/src/redhat/SPECS/mysql.specs 設定檔案內加入 big5 支援。
以下將為您介紹 tar.gz 及 src.rpm 兩種安裝方式。

以下範例將採用 tarball 來安裝


1. 下載 MySQL tarball source: http://www.mysql.com
2. 解壓縮: tar xvzf mysql*.tar.gz
3. 進入 Source 目錄
4. 設定: ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/var --with-
charset=big5
( --prefix 指定安裝目錄, --localstatedir 指定資料庫檔目錄, --with-charset 指定語系)
5. 然後再 make && make install 就行了!
6. 開啟預設資料庫/表格: /usr/local/mysql/bin/mysql_install_db
7. 如果/etc/passwd 沒有 mysql (增加一位叫 mysql 的使用者帳號 adduser mysql)
8. 改變 /usr/local/mysql 的擁有者為 mysql: chown -R mysql.mysql /usr/local/mysql
9. 啟動 MySQL: /usr/local/mysql/bin/safe_mysqld --user=mysql &
10. 設定 root 的密碼: mysqladmin -u root password 'superman'
11. 設定開機啟動: 將第 9 加入 /etc/rc.d/rc.local 最後一行

以下範例將採用 Source RPM 來安裝


1. 下載 MySQL source RPM 大約 10 MB: http://www.mysql.com
2. 安裝前先檢查內容: rpm –qip MySQL-3.23.24.src.rpm
3. 安裝 Source RPM: rpm –Uvh MySQL-3.23.24.src.rpm
4. 設定 /usr/src/redhat/SPECS 檔案找 configure 然後在設定參數中加入: --with-charset=big5
5. 然後再 compile i386 執行檔 rpm –bb mysql.specs
6. 步驟五結束後將會看到 /usr/src/redhat/RPMS/i386/MySQL-3.23.24.i386.rpm 和 devel, client
rpm
7. 請將所有 MySQL RPM 檔案裝入系統內: rpm –ivh MySQL-3.23.24.i386.rpm (在安裝前請
先將舊有的 mysql 移除 rpm –e mysql-devel, rpm –e mysql-client 等)
8. 查詢系統安裝狀態 rpm –qa |grep MySQL
9. 設定 ntsysv 將 mysql 在開機時起動

3. 基本使用方式及環境設定簡介

mysql 是管理及操作的主程式它的用法如下 (登入文字管理介面):


mysql –p // 如果用戶名稱是現在的使用者不需重複
mysql –u denny --password=gooddog // 如果用戶是 root 密碼是 gooddog
mysql –p --host=sql.abc.com.tw // 如果 mysql 主機是在 sql.abc.com.tw

所有的資料庫都會在 mysql/ 目錄下建立一個屬於自己的目錄. 當您要備份時可以直接將此目


錄(安裝設定時的 localstatedir 目錄)備份下來。 採用 RPM 安裝時資料庫目錄為 =>
/var/lib/mysql tarball 的預設目錄則為 =>/usr/local/mysql/var

當您使用 mysql 文字模式時您的所有指令都會備記錄下來,請看 ~/.mysql_history


4. 使用者建立、密碼、權限設定

從 shell 下直接以 mysqladmin 來設定 root 的密碼


# mysqladmin -u root –p password ‘new_password’
(不用 flush privileges)

#首先進入 mysql 管理介面選擇 mysql database, 所有的使用者及權限都在此資料庫內。


use mysql // 選擇進入 mysql database

# 建立 denny 使用者 給予 test 資料庫的全部權限。


INSERT INTO USER (host,user,password)
VALUES('localhost','peter',password('good'));

# 強制更改現有資料
replace into user (host, user, password)
VALUES (
'localhost',
'peter',
password('good123')
);
# 賦予 peter 使用者 test 資料庫的全部權限.
INSERT INTO db
(Host,Db,User,Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv) VALUES
('%','test','peter','Y','Y','Y','Y','Y','Y');

# 設定 test@localhost 在 test 資料庫的權限


GRANT ALL PRIVILEGES ON test.* TO test@localhost IDENTIFIED BY '1234';

# 修改使用者 denny 的密碼 必須要在 mysql 內輸入 flush privileges; 才可啟用。


update user \
set password=password('denny') \
where user='denny';

# 修改/設定 localhost(%)管理員的密碼 (此方式不必 flush privileges;)


mysql > set password for root@"%" =password('1234');
(不用 flush privileges)
要記得設定密碼,不然任何人都可以透過 php3 存取你的資料庫
; --->用來結束命令用的,在 mysql> 裡面 Enter 只是用來斷行
讓你容易看而已,並不是用來執行命令,一定要在最後加上一個分號
再按 Enter 才會去執行。
註: password('密碼'),是一個函數,用來加密的。

5. 範例: 建立資料庫 Database、表格 Table、顯示資料結構

# 建立資料庫從 shell 下指令, 也可以進入 mysql 後直接下 create database xxx;


mysqladmin –u root -p create databasename 或 mysqladmin create datebasename

# 刪除資料庫
mysqladmin –u root -p drop databasename

# 以 root 的身分進入資料庫系統
mysql –u root –p
# 進入到資料庫 database01 裡面
mysql> use database01
Database changed

# 建立表格 table01
mysql> create table friends (id int(3) not null AUTO INCREMENT,name varchar(20)not
null, age);
Query OK, 0 rows affected (0.00 sec)
 所有欄位名稱必須要 () 裡面
 各欄位(Fields)以 , 分開
 當欄位較多時可用空白來對齊
 全部 SQL 指令都需要 ; 來結尾

a.id INT (3) not null AUTO_INCREMENT 就是說,它被定義為 int 即整


數,佔了 6 個位元組, not null 就是不允許資料為空資料,也就是
說,插入資料時一定要有數據。

b.name VARCHAR (20) not null


varchar (20),每個欄位所佔的位元組是 20 ,但是如果長度不滿
20 設其長度為 n ,則實際佔的空間是 n+1 ,最後一個位元組用來
記錄其長度。

c.id:設為 PRIMARY KEY 即主鍵,具有唯一性,可用來做為連外鍵。


它是設計用來減少資料的重覆性的,即可以做為連外鍵。
# 顯示此資料庫內所有表格 tables

mysql> show tables;


+----------------------+
| Tables in database01 |
+----------------------+
| table01 |
| table02 |
+----------------------+

# 顯示 table01 資料庫結構

mysql> desc table01; 或者是 show columns from table01;


+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| field01 | int(11) | YES | | | |
| field02 | char(10) | YES | | | |
+---------+----------+------+-----+---------+-------+

6. 新增刪除修改, 增加欄位
# 新增一筆資料
mysql> insert into table01 (field01, field02)
-> values
-> ('1', 'Hello World!');
mysql> select * from table01;
+---------+---------+
| field01 | field02 |
+---------+---------+
| 1 | Hello! |
+---------+---------+

# 刪除一筆資料
mysql> delete from table01 where field01=3;
Query OK, 1 row affected (0.01 sec)

結果...
mysql> select * from table01;
+---------+---------+----------+------------+----------+
| field01 | field02 | field03 | field04 | field05 |
+---------+---------+----------+------------+----------+
| 1 | first | new info | 1999-10-22 | 15:29:01 |
| 2 | second | another | 1999-10-23 | 15:29:01 |
+---------+---------+----------+------------+----------+

# 修改一筆資料

# 修改多筆資料:當欄位四大於 1999-01-01 時將 欄位五改成 152901(下午 3:29:01)


mysql> update table01 set field05=152901 where field04>19990101;
Query OK, 3 rows affected (0.00 sec)
結果...
mysql> select * from table01;
+---------+-----------+------------------+------------+----------+
| field01 | field02 | field03 | field04 | field05 |
+---------+-----------+------------------+------------+----------+
| 1 | first | 陳水扁 | 1999-10-22 | 15:29:01 |
| 2 | second | 陳信義 | 1999-10-23 | 15:29:01 |
| 3 | third one | 許信良 | 1999-10-24 | 15:29:01 |
+---------+-----------+------------------+------------+----------+

# 特殊搜尋功能 %
要找出所有 field03 裡面有"陳"這個字的呢?
mysql> select field01,field03 from table01 where field03 like "%陳%";
% 為"任何"長度的萬用字元。

# 增加欄位 field04 和 field05


mysql> alter table table01 add column field04 date,add column field05 time;
Query OK, 1 row affected (0.04 sec)
Records: 1 Duplicates: 0 Warnings: 0

# 更新網頁內的密碼認證:
update MyTable set password=encrypt('MyPass') where username='denny'

7. 範例: PHP 動態資料庫

* 一個簡易的 PHP 測試範例:


<html><head><title>PHP 測試</title></head>
<body>
<?php echo "Hello World<P>"; ?> // <? 語法 ?>
<?php phpinfo()?> // php 基本資料
<?php echo $HTTP_USER_AGENT; ?> // 顯示變數
<?php if(strstr($HTTP_USER_AGENT,"MSIE")) // 進行判斷
{echo "您使用的是 Internet Explorer<br>"; }
?>
</body></html>
// 如果沒有問題的話就可以進行下一個步驟了!

* 表單元件在目的地的網頁程式自動轉成可用的變數。
<form action="action.php" method="POST">
姓名: <input type=text name=name>
年齡: <input type=text name=age>
<input type=submit>
</form>
在 action.php 內寫入

您好, <?php echo $name?>。您已經 <?php echo $age?> 歲了。


// 接下來我們就利用此輸入的變數來與資料庫溝通。
* 首先利用表單將要查詢的資料輸入,再將資料送至 MySQL 然後 output 到瀏覽器。
查詢的程式碼如下:
<?
$mysql_link=mysql_connect("localhost", "帳戶", "密碼"); // php 的 Mysql Function
mysql_select_db(test); // 連接到資料庫後立即選擇 Database name -- test
$query="select * from friends"; // 從所要查詢的表單內選擇全部資料 並 指向
$query
$mysql_result = mysql_query ($query, $mysql_link);
while ($row = mysql_fetch_array($mysql_result)) {
print $row["name"];
print ",";
print $row["age"];
print "<hr>";
}
?>
* 新增資料的步驟與查詢類似在mysql_query 的時候使用 insert 指令
1. <?
2. mysql_connect (localhost, "帳戶", "密碼") or die("無法連接到資料庫");
3. mysql_select_db (test);
4. $result = mysql_query ("INSERT INTO friends(name,age) VALUES ('$name','$age')
")
5. If(!$result){ $postresult="資料新增時發生錯誤"; }
6. else { $postresult= "資料登錄完成!";}
7. ?>
* 刪除資料時將第四行第七行改成如下:
$deleteresult = mysql_query ("delete from table where product = '$productname'");
if (mysql_affected_rows($deleteresult) == 1) { $postresult="資料刪除成功!"; }
else{ $postresult="無法刪除您的選擇"; }

8. 資料庫備份>與<還原

*將 test 資料庫的所有表格結構和資料備份存到 mytable.sql (如果不想要備份資料內容請加入 --no-data)


mysqldump -u root -p test > mydb.sql

# 將 test 資料庫的 member 表格結構存到 mytable.sql ( 不存取 data)


mysqldump -u root -p --no-data test member > mytable.sql

# 將 test 資料庫的 member 表格結構和資料備份存到 mytable.sql


mysqldump -u root -p test member > mytable.sql

# 將全部的資料庫(database)和表格(table)結構存到 backup.mysql 檔案內。


# --add-drop-table 的功能是在建立表格前將原有的表格(如果存在的話)先清除掉。您將會在 CREATE TABLE
前一行看到 DROP TABLE IF EXISTS 的字眼。 *** 非常實用的參數 ***
mysqldump --add-drop-table -u root -p DATABASE >BACKUP.mysql

# 將備份好的資料還原到資料庫 test 內
mysql –u root –p test < mysql_create.sql
9. Url Links 網路連結

Linux 網路資源
http://www.ibiblio.org/pub/Linux/docs/HOWTO/ Linux HOWTO 的英文站台
http://www.linux.org.tw/CLDP/ 中文 HOWTO 資料
http://rpmfind.net RPM 的檔案搜詢站台

MySQL 台灣網站
* Taiwan [TTN] WWW (http://mysql.ttn.net)
* Taiwan [nctu.edu/HsinChu] WWW (http://mysql.nctu.edu.tw/)

You might also like