一、連接MYSQL
二、修改密碼
三、增加新用戶
四、顯示命令
五、一個建庫和建表以及插入數據的實例
六 、修改數據庫結構
七 數據導出
八 導入
九 MySQL介紹、安裝與使用
十 mysqladmin 公用程式的使用
一、連接MYSQL:
格式: mysql -h主機地址 -u用戶名 -p用戶密碼
1、例1:連接到本機上的MYSQL。
首先在打開DOS窗口,然後進入目錄 mysqlbin,再鍵入命令mysql -uroot -p,回車後提示你輸密碼,如果剛安裝好MYSQL,超級用戶root是沒有密碼的,故直接回車即可進入到MYSQL中了,MYSQL的提示符是:mysql>
2、例2:連接到遠程主機上的MYSQL。假設遠程主機的IP爲:110.110.110.110,用戶名爲root,密碼爲abcd123。則鍵入以下命令:
mysql -h110.110.110.110 -uroot -pabcd123(注:u與root可以不用加空格,其它也一樣)
3、退出MYSQL命令: exit (回車)
二、修改密碼:
格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼
1、例1:給root加個密碼ab12。首先在DOS下進入目錄mysqlbin,然後鍵入以下命令
mysqladmin -uroot -password ab12
注:因爲開始時root沒有密碼,所以-p舊密碼一項就可以省略了。
2、例2:再將root的密碼改爲djg345。
mysqladmin -uroot -pab12 password djg345
三、增加新用戶:
(注意:和上面不同,下面的因爲是MYSQL環境中的命令,所以後面都帶一個分號作爲命令結束符)
格式:grant select on 數據庫.* to 用戶名@登錄主機 identified by "密碼"
例1、增加一個用戶test1密碼爲abc,讓他可以在任何主機上登錄,並對所有數據庫有查詢、插入、修改、刪除的權限。首先用以root用戶連入MYSQL,然後鍵入以下命令:
grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
但例1增加的用戶是十分危險的,你想如某個人知道test1的密碼,那麼他就可以在internet上的任何一臺電腦上登錄你的mysql數據庫並對你的數據可以爲所欲爲了,解決辦法見例2。
例2、增加一個用戶test2密碼爲abc,讓他只可以在localhost上登 錄,並可以對數據庫mydb進行查詢、插入、修改、刪除的操作(localhost指本地主機,即MYSQL數據庫所在的那臺主機),這樣用戶即使用知道 test2的密碼,他也無法從internet上直接訪問數據庫,只能通過MYSQL主機上的web頁來訪問了。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
如果你不想test2有密碼,可以再打一個命令將密碼消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "";
四、顯示命令
1、顯示數據庫列表:
show databases;
剛開始時才兩個數據庫:mysql和test。mysql庫很重要它裏面有MYSQL的系統信息,我們改密碼和新增用戶,實際上就是用這個庫進行操作。
2、顯示庫中的數據表:
use mysql; //打開庫,學過FOXBASE的一定不會陌生吧
show tables;
3、顯示數據表的結構:
describe 表名;
4、建庫:
create database 庫名;
5、建表:
use 庫名;
create table 表名 (字段設定列表);
6、刪庫和刪表:
drop database 庫名;
drop table 表名;
7、將表中記錄清空:
delete from 表名;
8、顯示錶中的記錄:
select * from 表名;
五、一個建庫和建表以及插入數據的實例
create database school; //建立庫SCHOOL
use school; //打開庫SCHOOL
create table teacher //建立表TEACHER
(
id int(3) auto_increment not null primary key, //id設置爲主關鍵字,並自動設值,也就是添加的時候,你不必向ID字段寫內容
name char(10) not null,
address varchar(50) default '深圳', //設置默值爲深圳
year date
); //建表結束
//以下爲插入字段
insert into teacher values('','glchengang','深圳一中','1976-10-10'); //ID不用寫內容
insert into teacher values('','jack','深圳一中','1975-12-23');
六 、修改數據庫結構
1、增加字段
alter table dbname add column <字段名><字段選項>
2、修改字段
alter table dbname change <舊字段名> <新字段名><選項>
3、刪除字段
alter table dbname drop column <字段名>
現在使用MySQL的越來越多了,我也用它做了自已的留言板。在使用過程中,慢慢地 就要求對它的管理功能需要近一步的掌握,不僅是我,也是很多網友的要求。現在有一些問題是關於如何從MySQL中導出數據,以便用在本地或其它的數據庫系 統之上;以及 將現有數據導入MySQL數據庫中。現在就我學習的情況,就這兩個問題作一下小結,內容不是很詳細。其實MySQL的手冊是很詳細的,只不過我把有關這兩 方面的東西提取出來,加上了一點自已的理解,更詳細的請看數據庫的相應章節。
數據導出
數據導出主要有以下幾種方法:
使用select into outfile "filename"語句
使用mysqldump實用程序
使用select into outfile "filename"語句
可以在mysql的命令行下或在php程序中執行它。我下面以在mysql命令行下 爲例。在php中使用時,將其改成相應的查詢進行處理即可。不過在使用這個命令時,要求用戶擁有file的權限。如我們有一個庫爲phptest,其中有 一個表爲driver。現在要把driver卸成文件。執行命令:
mysql> use phptest;
Database Changed
mysql> select * from driver into outfile "a.txt";
Query OK, 22 rows affected (0.05 sec)
上面就可以完成將表driver從數據庫中卸到a.txt文件中。注意文件名要加單 引號。那麼這個文件在哪呢?在mysql目錄下有一個data目錄,它即是數據庫文件所放的地方。每個庫在單獨佔一個子目錄,所以phptest的目錄爲 c:\mysql\data\phptest(注意:我的mysql安裝在c:\mysql下)。好,現在我們進去,a.txt就是它。打開這個文件,可 能是:
1 Mika Hakinnen 1
2 David Coulthard 1
3 Michael Schumacher 2
4 Rubens Barrichello 2
...
可能還有很多記錄。每個字段之間是用製表符分開的(\t)。那麼我們可以修改輸出文 件名的目錄,以便放在指定的位置。如"a.txt"可以改成"./a.txt"或"/a.txt"。其中"./a.txt"放在c:\mysql\ data目錄下了,而"/a.txt"文件則放在c:\目錄下了。所以select命令認爲的當前目錄是數據庫的存放目錄,這裏是c:\mysql\ data。
使用select命令還可以指定卸出文件時,字段之間的分隔字符,轉義字符,包括字符,及記錄行分隔字符。列在下面:
FIELDS
TERMINATED BY "\t"
[OPTIONALLY] ENCLOSED BY ""
ESCAPED BY ""
LINES
TERMINATED BY "\n"
TERMINATED 表示字段分隔
[OPTIONALLY] ENCLOSED 表示字段用什麼字符包括起來,如果使用了OPTIONALLY則只有CHAR和VERCHAR被包括ESCAPED 表示當需要轉義時用什麼作爲轉義字符LINES TERMINATED 表示每行記錄之間用什麼分隔上面列的是缺省值,而且這些項都是可選的,不選則使用缺省值。可以根據需要進行修改。給出一個例子如下:
mysql> select * from driver into outfile "a.txt" fields terminated by ","
enclosed by """;
Query OK, 22 rows affected (0.06 sec)
結果可能如下:
"1","Mika","Hakinnen","1"
"2","David","Coulthard","1"
"3","Michael","Schumacher","2"
"4","Rubens","Barrichello","2"
...
可以看到每個字段都用","進行了分隔,且每個字段都用"""包括了起來。注意,行記錄分隔符可以是一個字符串,請大家自行測試。不過,如果輸出文件在指定目錄下如果存在的話就會報錯,先刪除再測試即可。
使用mysqldump實用程序
從上面的select方法可以看出,輸出的文件只有數據,而沒有表結構。而且,一次 只能處理一個表,要處理多個表則不是很容易的。不過可以將select命令寫入一個sql 文件(複製文本應該是很容易的吧),然後在命令行下執行即可:mysql 庫名先來個最簡單的吧:
mysqldump phptest > a.sql
可能結果如下:
# MySQL dump 7.1
#
# Host: localhost Database: phptest
#--------------------------------------------------------
# Server version 3.22.32-shareware-debug
#
# Table structure for table "driver"
#
CREATE TABLE driver (
drv_id int(11) DEFAULT "0" NOT NULL auto_increment,
drv_forename varchar(15) DEFAULT "" NOT NULL,
drv_surname varchar(25) DEFAULT "" NOT NULL,
drv_team int(11) DEFAULT "0" NOT NULL,
PRIMARY KEY (drv_id)
);
#
# Dumping data for table "driver"
#
INSERT INTO driver VALUES (1,"Mika","Hakinnen",1);
INSERT INTO driver VALUES (2,"David","Coulthard",1);
INSERT INTO driver VALUES (3,"Michael","Schumacher",2);
INSERT INTO driver VALUES (4,"Rubens","Barrichello",2);
...
如果有多表,則分別列在下面。可以看到這個文件是一個完整的sql文件,如果要 將其導入到其它的數據庫中可以通過命令行方式,很方便:mysql phptest < a.sql。如果將數據從本地傳到服務器上,則可以將這個文件上傳,然後在服務器通過命令行方式裝入數據。
如果只想卸出建表指令,則命令如下:
mysqldump -d phptest > a.sql
如果只想卸出插入數據的sql命令,而不需要建表命令,則命令如下:
mysqldump -t phptest > a.sql
那麼如果我只想要數據,而不想要什麼sql命令時,應該如何操作呢?
mysqldump -T./ phptest driver
其中,只有指定了-T參數纔可以卸出純文本文件,表示卸出數據的目錄,./表示當前 目錄,即與mysqldump同一目錄。如果不指定driver表,則將卸出整個數據庫的數據。每個表會生成兩個文件,一個爲.sql文件,包含建表執 行。另一個爲.txt文件,只包含數據,且沒有sql指令。
對卸出的數據文件,也可以同select方法一樣,指定字段分隔符,包括字符,轉義字段,行記錄分隔符。參數列在下面:
--fields-terminated-by= 字段分隔符
--fields-enclosed-by= 字段包括符
--fields-optionally-enclosed-by= 字段包括符,只用在CHAR和VERCHAR字段上
--fields-escaped-by= 轉義字符
--lines-terminated-by= 行記錄分隔符
我想大家應該明白這些參數的意思了吧。一個例子如下:
mysqldump -T./ --fields-terminated-by=, --fields-enclosed-by=" phptest driver
輸出結果爲:
"1","Mika","Hakinnen","1"
"2","David","Coulthard","1"
"3","Michael","Schumacher","2"
"4","Rubens","Barrichello","2"
...
請注意字符的使用。
小結
以上爲使用select和mysqldump實用程序來卸出文本的方法。select適合利用程序進行處理,而mysqldump則爲手工操作,同時提供強大的導出功能,並且可以處理整個庫,或庫中指定的多表。大家可以根據需求自行決定使用。
同時還有一些方法,如直接數據庫文件拷貝也可以,但是移動後的數據庫系統與原系統應一致才行。這裏就不再提了。
導入
同導出相類似,導入也有兩種方法:
使用LOAD DATA INFILE "filename"命令
使用mysqlimport實用程序
使用sql文件
由於前兩個處理與導出處理相似,只不過是它們的逆操作,故只給出幾種命令使用的例子,不再解釋了,大家可以自行查閱手冊。
使用load命令:
load data infile "driver.txt" into table driver fields terminated by ","
enclosed by """;
使用mysqlimport實用程序:
mysqlimport --fields-terminated-by=, --fields-enclosed-by=" phptest driver.txt
對於第三種,則可以使用由mysqldump導出的sql文件,在命令行下執行mysql庫名。
首先要聲明一點,大部分情況下,修改MySQL是需要有mysql裏的root權限的,所以一般用戶無法更改密碼,除非請求管理員。
方法一
使用phpmyadmin,這是最簡單的了,修改mysql庫的user表,不過別忘了使用PASSWORD函數。
方法二
使用mysqladmin,這是前面聲明的一個特例。
mysqladmin -u root -p password mypasswd
輸入這個命令後,需要輸入root的原密碼,然後root的密碼將改爲 mypasswd。把命令裏的root改爲你的用戶名,你就可以改你自己的密碼了。當然如果你的mysqladmin連接不上mysql server,或者你沒有辦法執行mysqladmin,那麼這種方法就是無效的。而且mysqladmin無法把密碼清空。
下面的方法都在mysql提示符下使用,且必須有mysql的root權限:
方法三
mysql> INSERT INTO mysql.user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES
確切地說這是在增加一個用戶,用戶名爲jeffrey,密碼爲biscuit。在《mysql中文使用手冊》裏有這個例子,所以我也就寫出來了。注意要使用PASSWORD函數,然後還要使用FLUSH PRIVILEGES。
方法四
和方法三一樣,只是使用了REPLACE語句
mysql> REPLACE INTO mysql.user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES
方法五
使用SET PASSWORD語句,
mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
擬也必須使用PASSWORD()函數,但是不需要使用FLUSH PRIVILEGES。
方法六
使用GRANT ... IDENTIFIED BY語句
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
這裏PASSWORD()函數是不必要的,也不需要使用FLUSH PRIVILEGES。
注意: PASSWORD() [不是]以在Unix口令加密的同樣方法施行口令加密。
MySQL 忘記口令的解決辦法
如果 MySQL 正在運行,首先殺之: killall -TERM mysqld。
啓動 MySQL :bin/safe_mysqld --skip-grant-tables &就可以不需要密碼就進入 MySQL 了。然後就是
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
重新殺 MySQL ,用正常方法啓動 MySQL 。
MySQL介紹、安裝與使用
一、什麼是 MySQL
MySQL (發音爲 "My Ess Que Ell")是 Tcx 公司(http://www.tcx.se)開發的一個多人使用、多執行緒的 SQL 資料庫 Server。MySQL 主要的目標在快速、穩定和容易使用。
MySQL 可在此 http://www.mysql.net/ 取得。
二、MySQL 的安裝
本文所使用的 MySQL 版本爲 mysql-3.22.27.tar.gz(原始碼檔),作業環境爲 RedHat6.0 +CLE0.8 。
MySQL 預設情況下會安裝至 /usr/local 目錄下,不過爲了日後移除方便,建議將mysql獨立安裝在 /usr/local/mysql 目錄。底下爲安裝 MySQL 的步驟:
取得 mysql-3.22.27.tar.gz 後, 於 /usr/local 目錄下解開:
# cd /usr/local
# tar zxvf mysql-3.22.27.tar.gz
# cd mysql-3.22.27
設定 configure 安裝選項,選擇安裝目錄 (prefix)以及支援中文 Big5 碼(with-charset=big5):
# ./configure --prefix=/usr/local/mysql \
#--with-charset=big5
開始編譯並安裝:
# make
# make install
# scripts/mysql_install_db
最後一個步驟是用來產生 MySQL grant tables(會建立一個 mysql 資料庫和一些 tables,用來管理使用 MySQL 的授權資訊,也就是使用者有哪些使用資料庫的權限)。
三、啓動、停止 MySQL
要啓動 MySQL 的方法:(以本文將 MySQL 安裝在 /usr/local/mysql 爲例)
# /usr/local/mysql/share/mysql.server start
注意在第一次執行前,須將 mysql.server 設成可執行(chmod 744 mysql.server),另外可將這行指令加在 /etc/rc.d/rc.local 檔中,讓 MySQL 在開機時自動啓動。
要停止 MySQL 的方法:
# /usr/local/mysql/bin/mysqladmin shutdown
如果你爲 MySQL Administrator root 帳號(非作業系統的 root)設了密碼,要停止 MySQL則必須像下列這樣做,MySQL 會詢問你 root 的密碼後纔會執行 shutdown 的工作:
# /usr/local/mysql/bin/mysqladmin -u root -p shutdown
四、管理與使用 MySQL 簡介
在你開始前MySQL 提供了許多工具 (Client Tools)來與 MySQL 資料庫 Server 連線,其中最主要的爲mysql 交談式連線工具與 mysqladmin 公用程式,大部份時候使用者會用 mysql 來和資料庫Server 交談。底下就以 mysql 連線工具來介紹如何維護與使用 MySQL。(以本文安裝爲例,mysql 工具位於 /usr/local/mysql/bin/mysql)。
mysql 的使用語法如下:
mysql [-u username] [-h host] [-p[password]] [dbname]
MySQL 資料庫有自己一套使用者帳號與權限管控方法,所以這邊所指定的 username 與 password 是 MySQL 的使用者與密碼,而不是作業系統的使用者與密碼(當然任何使用者都能執行 mysql ,然後以 MySQL 的任何帳號進入使用) 。
在你第一次安裝好 MySQL 時,MySQL 的管理帳號爲 root,沒有設定密碼 (非作業系統的 root)。所以在開始前,請先照下列步驟爲 root 設好密碼:
使用 mysql 與 MySQL 資料庫 Server 連線:
# /usr/local/mysql/bin/mysql -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 201 to server version: 3.22.27
Type 'help' for help.
mysql>
在下了 mysql -u root mysql 指令,指定以 root 帳號並開啓 mysql 系統資料庫,連線至 MySQL 後,會看到一些提示訊息與 mysql 工具的提示符號,以後大部份的工作皆在此提示符號下完成。
更改 MySQL系統管理者 root 密碼:
mysql> update user set password=password('新密碼') where user='root';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
注意每個指令後要加上一個分號 ";" 纔會讓 mysql 開始執行。而第二道指令會讓已載入記憶體的mysql 系統資料庫更新,最後離開 mysql 工具程式。
在更新 root 密碼後,日後要與 MySQL 連線的方法爲:
mysql -u root -p新密碼
或者是這樣,讓 mysql 詢問 root 的密碼:
mysql -u root -p
資料庫維護
接下來,我們以簡單的通訊錄資料庫作爲例子,來介紹如何用 mysql 工具程式來做資料庫的維護(新增、授權、資料表維護等)。
首先,以 MySQL root 帳號連線後建立一 addbook 資料庫:
# /usr/local/mysql/bin/mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 207 to server version: 3.22.27
Type 'help' for help.
mysql> create databae addbook;
Query OK, 1 row affected (0.00 sec)
指定使用 addbook 資料庫,並建立一個 friends 資料表:
mysql> use addbook;
Database changed
mysql> create table friends (
-> name Char(15),
-> telphone VarChar(20),
-> icq Char(10),
-> address VarChar(30)
-> );
Query OK, 0 rows affected (0.00 sec)
新增幾筆資料,並查詢看看:
mysql> insert into friends values(
-> "maa", "29016710", "46243046", "臺北縣新莊市"
-> );
Query OK, 1 row affected (0.00 sec)
mysql> insert into friends (name, icq, telphone, address ) Values (
-> "cxlin", "39425893", "7654321", "臺北縣"
-> );
Query OK, 1 row affected (0.01 sec)
mysql> select * from friends;
---------------------------------+
| name | telphone | icq | address |
---------------------------------+
| maa | 29016710 | 46243046 | 臺北縣新莊市 |
| cxlin | 7654321 | 39425893 | 臺北縣 |
---------------------------------+
2 rows in set (0.00 sec)
第二個 insert 指令指定了資料欄位的插入順序,用法較第一個爲彈性,而第一個指令必須依資料表建立結構時的順序插入資料。更新、刪除資料表記錄:
mysql> update friends set address = "桃園縣" where name = "cxlin";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from friends where name = "cxlin";
----------------------------+
| name | telphone | icq | address |
----------------------------+
| cxlin | 7654321 | 39425893 | 桃園縣 |
----------------------------+
1 row in set (0.00 sec)
mysql> delete from friends where name = "maa";
Query OK, 1 row affected (0.01 sec)
mysql> select * from friends;
----------------------------+
| name | telphone | icq | address |
----------------------------+
| cxlin | 7654321 | 39425893 | 桃園縣 |
----------------------------+
1 row in set (0.00 sec)
最後,建好資料庫與資料表後,把 addbook 資料庫中所有資料表的使用權限(select、insert、update、delete)授權給 maa@localhost(再次提醒,此處的 maa 爲 MySQL 的使用者帳號,而非作業系統的 maa 帳號):
mysql> grant select, insert, update, delete
-> on addbook.*
-> to maa@localhost identified by '1234567';
Query OK, 0 rows affected (0.00 sec)
之後,可用 maa 的身份進入 MySQL 存取 addbook 資料庫:
# /usr/local/mysql/bin/mysql -u maa -p addbook
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 211 to server version: 3.22.27
Type 'help' for help.
mysql> status
--------------
./mysql Ver 9.36 Distrib 3.22.27, for pc-linux-gnu (i686)
Connection id: 26
Current database: addbook
Current user: maa@localhost
Server version 3.22.27
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /tmp/mysql.sock
Uptime: 2 hours 29 min 33 sec
Threads: 11 Questions: 107 Slow queries: 0 Opens: 11 Flush tables: 1
Open 7
--------------
收回資料庫使用權限的方法如下(以 MySQL root 進入):
mysql> revoke delete on addbook.* from maa@localhost;
Query OK, 0 rows affected (0.00 sec)
mysql> revoke all privileges on addbook.* from maa@localhost;
Query OK, 0 rows affected (0.00 sec)
第二個指令用來收回全部的權限。
mysqladmin 公用程式的使用
mysqladmin 公用程式可用來維護 MySQL 比較一般性的工作(新增、刪除資料庫、設定使用者密碼及停止 MySQL 等等),詳細的說明可以使用 mysqladmin --help 來查看。(以本文的安裝爲例 mysqladmin 位於 /usr/local/mysql/bin/mysqladmin)。
新增資料庫 dbtest
# /usr/local/mysql/bin/mysqladmin -u root -p create dbtest
Enter password:
Database "dbtest" created.
刪除資料庫
# /usr/local/mysql/bin/mysqladmin -u root -p drop dbtest
Enter password:
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.
Do you really want to drop the 'dbtest' database [y/N]
y
Database "dbtest" dropped
設定使用者密碼(將 maa 的密碼改爲 7654321,mysqladmin 會先詢問 maa 的原密碼)
# /usr/local/mysql/bin/mysqladmin -u maa -p password 7654321
Enter password:
#
停止 MySQL 服務
# ./mysqladmin -u root -p shutdown
Enter password:
注意,shutdown MySQL 後,必須由作業系統的 root 帳號執行下列指令才能啓動 MySQL:
/usr/local/mysql/share/mysql/mysql.server start
六、結語:
MySQL 資料庫的確是值得推廣的一個產品,它的穩定性已經穩得大家的贊同,只要你曾經學習過SQL Language(結構化查詢語言),相信要摸熟 MySQL 的使用只消一兩個小時的時間。如果搭配PHP (Personal HomePage Program)和 Apache Web Server,更可很輕鬆建構一個與資料庫結合的動態 Web Site。如果再配合 phpMyAdmin 這個 Web 化的 MySQL 管理工具,建立 MySQL 的資料庫和 MySQL 的管理將會更加方便。