2010年1月15日 星期五

MySQL 學習筆記

於 Linux System 中, 可使用:
/usr/bin/mysql -u root -p
輸入密碼後進入mysql command mode.

第一次創建 MySQL 的 root 密碼, 可使用
/usr/bin/mysqladmin -u root password '值'

使用者帳號資訊, 儲存位置在: mysql database 's user table 內.


一, 基本指令:
1) show databases; 顯示所有的資料庫
2) use mydatabse; 使用 "mydatabase" 這個資料庫
3) show tables; 顯示該資料庫內所有的 table 名稱
4) select * from mytable; 查詢列出 mytable 內的所有資料
5) show processlist; 顯示目前正在使用 MySQL 的 process 內容.


二, 修改 root 密碼:
> UPDATE user SET password=PASSWORD(MD5('1234'));
> FLUSH PRIVILEGES;
or
> SET PASSWORD FOR root=PASSWORD('1234');
變更 root 在本地位置的密碼為 '1234'


三, MySQL 設定檔介紹:
********************************************************
Linux 路徑: /usr/share/mysql/
Windows 路徑: C:\Program Files\MySQL\MySQL Server 5.0
主要設定檔位置: (Linux) /etc/my.cnf
(Windows) c:\windows\my.ini
********************************************************
-- 各設定檔的記憶體參考 --
my-small.ini (windows) <= 64MB

my-medium.ini (windows) 32MB~64MB
my-large.ini (windows) 512MB
my-huge.ini (windows) 1GB~2GB
my-innodb-heavy-4G.ini (windows) 4GB RAM, InnoDB only, few connections, heavy queries.

四, 升級MySQL
(windows)
1) 先行備份當前的 DB.
2) 由 http://dev.mysql.com/downloads/ 處下載最新的 MySQL 版本
3) 升級前, 先停止 MySQL service.
若為 service ---
C:\> NET STOP MYSQL
若不為 service ---
C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqladmin -u root shutdown
4) 4.1 版升級到 5.1 版, 必須先行卸載 MySQL program.
C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld --remove

五, 建立資料庫
> create database 'mylibrary';

六, 新增資料
> INSERT INTO table (`欄位1`,`欄位2`..) VALUES ('值1','值2');

七, 建立資料表(table)
> CREATE TABLE `table` (
`ID` int(4) NOT NULL AUTO_INCREMENT,
`name1` varchar(32) NOT NULL,
`nam2` varchar(255) NOT NULL,
PRIMARY KEY (`ID`),
KEY `name1` (`name1`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

八, 刪除資料
> DELETE FROM table WHERE `欄位`='值';

九, 更新資料
> UPDATE table SET `更新欄位`='要更新的值' WHERE `條件欄位`='條件值';

十, 備份資料庫
> mysqldump database -u root -p --databases --add-drop-database --add-drop-table > outdb.sql

十一, 還原資料庫
> mysql database -u root -p "<" outdb.sql

[註一]
要將 mysql 的 DB 含內容匯出, 可使用
mysqldump DB [TABLE]

若只要匯出所有各TABLE 不含內容, 可以使用
mysqldump -d DB [TABLE]

註: [] 內的 TABLE 如果加入, 則只會秀出 TABLE 的資料
Example: mysqldump -d DB TABLE

要在匯出的TABLE上加入DROP TABLE 的描述, 需要添加 --add-drop-table 參數
EX: mysqldump -d --add-drop-table DB [TABLE]


十二, 新建使用者

mysql> GRANT ALL PRIVILEGES ON *.* TO monty@localhost
IDENTIFIED BY 'something' WITH GRANT OPTION;

mysql> GRANT ALL PRIVILEGES ON *.* TO monty@"%" 
IDENTIFIED BY 'something' WITH GRANT OPTION;
可以從任何地方連接伺服器的一個完全的超級用戶,但是必須使用一個密碼('something'做這個。注意,我們必須對monty@localhostmonty@"%"發出GRANT語句。如果我們增加localhost條目,對localhost的匿名用戶條目在我們從本地主機連接接時由mysql_install_db創建的條目將優先考慮,因為它有更特定的Host字段值,所以以user表排列順序看更早到來。

mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;
可以從localhost沒有一個密碼進行連接並且被授予reloadprocess管理權限的用戶。這允許用戶執行mysqladmin reloadmysqladmin refreshmysqladmin flush-*命令,還有mysqladmin processlist。沒有授予資料庫有關的權限。他們能在以後通過發出另一個GRANT語句授權。

mysql> GRANT USAGE ON *.* TO dummy@localhost;
可以不用一個密碼連接的一個用戶,但是只能從本地主機。全局權限被設置為'N'--USAGE權限類型允許你無需權限就可設置一個用戶。它假定你將在以後授予資料庫相關的權限。

下列例子增加一個用戶custom,他能從主機localhostserver.domainwhitehouse.gov連接。他只想要從localhost存取bankaccount資料庫,從whitehouse.gov存取expenses資料庫和從所有3台主機存取customer資料庫。他想要從所有3台主機上使用密碼stupid.
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON bankaccount.*
TO custom@localhost
IDENTIFIED BY 'stupid';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON expenses.*
TO custom@whitehouse.gov
IDENTIFIED BY 'stupid'; 
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON customer.*
TO custom@'%'
IDENTIFIED BY 'stupid';

十三, 權限相關欄位說明:
> privileges 對資料庫的操作權限
> database 資料庫
> table  資料表
> password 登入的密碼
> user  登入的帳號
> host  可登入的主機名稱
WITH GRANT OPTION 設定用戶是否有授權的權限

權限參數說明:
> ALL [PRIVILEGES] 設置除 GRANT OPTION 之外的所有簡單權限
> ALTER  允許具有 ALTER TABLE 權限
> CREATE 允許具有 CREATE TABLE 權限
> CREATE TEMPORARY TABLES 允許具有建立 temp table 權限
> CREATE USER 允許具有 CREATE USER, DROP USER, RENAME USER 和 REVOKE ALL PRIVILEGES 權限
> CREATE VIEW 允許具有 CREATE VIEW 權限
> DELETE 允許具有 DELETE 權限
> DROP  允許具有 DROP TABLE 權限
> EXECUTE 允許具有執行已儲存的子程序之權限
> FILE  允許具有 SELECT...INTO OUTFILE 和 LOAD DATA INFILE 權限
> INDEX  允許具有 CREATE INDEX 和 DROP INDEX 權限
> INSERT 允許具有 INSERT 權限
> LOCK TABLES 允許對擁有 SELECT 權限的 TABLE 使用 LOCK TABLE
> SELECT  允許具有 SELECT 權限
> SHOW DATABASES 允許具有 show 所有資料庫的權限
> SHUTDOWN 允許具有 mysqladmin shutdown 權限
> UPDATE 允許具有 UPDATE 權限
> GRANT OPTION 允許授予權限

Example:
建立一個可備份所有資料庫的使用者.
> Grant SELECT, LOCK TABLES on *.* to 'backupuser'@'localhost' identified by 'password';


十四, 刪除授權:
> Revoke privileges on database[.table] from username@hostname;
privileges 指的是 對資料庫的操作權限

[以上部分資料來自 http://www.sy3es.tnc.edu.tw/teaching/php_mysql/mysql.htm ]


十五, 顯示欄位屬性
show columns from TABLE名稱;
ex: show columns from `mysql`;


十六, 新增欄位到 TABLE
alter table TABLE名稱 欄位名稱 屬性;
ex: ALTER TABLE `mysql` makefile varchar(255) default NULL;

十七, 重建索引
註:由於該Table 可能使用時間長了,中間可能有刪除/新增資料,以至於索引值可能發生跳號的現象,此時可以使用重建索引,即可將該索引重新整理。
REPAIR TABLE tbl_name QUICK;