關于MySQL的簡單總結
MySQL是最著名的開源數據庫,容易上手且功能強大,Yahoo!、BBC News等著名站點都使用了MySQL數據庫進行數據存儲
在Linux環境中可以通過/etc/my.cnf對MySQL服務器進行配置(在Windows中是一個叫my.ini的文件),有接近300個配置參數可以用來在啟動MySQL服務器時控制其行為(包括:內存、日志、錯誤報告等等)
在Linux環境中可以通過service mysqld start來啟動MySQL服務,通過service mysqld stop來停止MySQL服務(在Windows中可以通過net start mysql來啟動,通過net stop mysql來停止,也可以通過控制面板中的性能和維護中的管理工具中的服務來啟動和停止MySQL服務)
在服務器啟動后,可以通過輸入mysqladmin –u root –p variables命令來查看配置參數,可以通過在mysql客戶端中輸入show variables;來查看
MySQL支持多種存儲引擎,可以通過show engines;來查看MySQL支持的所有存儲引擎,或通過show variables like ‘%storage_engine%’;來查看當前使用的存儲引擎;如果需要修改所使用的存儲引擎可以用alter table t_YYY type=XXX;或alter table t_YYY engine=XXX;來修改指定的表所使用的存儲引擎,也可以通過在my.cnf(my.ini)文件中加入default-storage-engine=XXX來指定默認的存儲引擎,下面是對各種存儲引擎的一個簡單說明:
² MyISAM:默認的MySQL插件式存儲引擎,不支持事務,但是在Web、數據倉儲等大數據量應用環境下最常使用的存儲引擎之一
² InnoDB:最常用的用于事務處理的存儲引擎,具有眾多特性,包括ACID事務支持,在Windows環境下是默認的存儲引擎
² BDB:可替代InnoDB的事務引擎,支持COMMIT、ROLLBACK和其他事務特性,但在5.1之后的版本中不復存在
² Memory:將所有數據保存在RAM中,在需要快速查找引用和其他類似數據的環境下,可提供極快的訪問,但服務器關閉時不能持久存儲
² MRG_MYISAM:允許MySQL DBA或開發人員將一系列等同的MyISAM表以邏輯方式組合在一起,并作為1個對象引用它們,對于數據倉儲等VLDB環境十分適合
² Archive:為大量很少引用的歷史、歸檔、或安全審計信息的存儲和檢索提供了完美的解決方案
² Federated:能夠將多個分離的MySQL服務器鏈接起來,從多個物理服務器創建一個邏輯數據庫,適合于分布式環境或數據集群環境
² NDBCluster:MySQL的簇式數據庫引擎,尤其適合于具有高性能查找要求的應用程序,這類查找需求還要求具有最高的正常工作時間和可用性
MySQL支持豐富的數據類型:
² 時間日期類:DATE / DATETIME / TIME / TIMESTAMP / YEAR
² 數值類:BIGINT / BIT / DECIMAL / FLOAT / INT / MEDIUMINT / SMALLINT / TINYINT
² 字符(串)類:BINARY / BLOB / LONGBLOB / MEDIUMBLOB / TINYBLOB / CHAR / ENUM / SET / TEXT / LONGTEXT / MEDIUMTEXT / TINYTEXT / VARBINARY / VARCHAR
MySQL圖形化的客戶端:
² PHPMyAdmin:http://www.phpmyadmin.net/
² MySQL Administrator:http://www.mysql.com/products/tools/administrator
² SQLyog:http://www.webyog.com/en
MySQL常用命令和操作:
1. 登錄MySQL服務器
mysql –u username –p database_name
mysql –h hostname –u username –p database_name
2. 修改MySQL提示符
prompt XXX
\c |
記錄輸入多少個命令的提符 |
\d |
提示當前數據庫 |
\D |
提示當前日期 |
\h |
提示當前服務器主機 |
\u |
提示用戶名 |
\U |
提示用戶名@主機 |
3. 操作數據庫
a) 創建數據庫:create database db_name;或mysqladmin –u root –p create db_name
b) 切換到某數據庫:user db_name;
c) 刪除數據庫:drop database db_name;
4. 操作表
a) 創建表:create table t_name (col1, definition, col2, definition, … , coln, definition);
b) 顯示表結構:desc t_name;
c) 列出所有表:show tables;
d) 修改表結構
i. 增加字段:alter table t_name add column xxx definition;
ii. 刪除字段:alter table t_name drop column xxx;
iii. 改變字段:alter tabel t_name change column xxx yyy definition;
e) 刪除表:drop table t_name;
f) 重命名表:alter tabel t_name rename t_new_name;
5. 管理用戶
a) 創建用戶并授權:grant privilege1, privilege2, … , privilegen on db_name.t_name to 'username'@'host' identified by 'userpassword'; (說明:如果要將所有權限分配給用戶可以用all privileges代替授權項目;如果要將所有數據庫的所有表授權給該用戶,可以用*.*表示;可以用'%'所有站點;如果沒有通過identified by 設置用戶口令,之后可以用set password for 'username'@'host' = password('serpassword');來設置口令)
b) 召回用戶權限:revoke privilege1, … , privilegen from 'username'@'host';(說明:可以用all privileges代表召回所有權限)
c) 重命名用戶:rename user 'username1'@'host1' to 'username2'@'host2';
6. 存儲函數(例子)
mysql > delimiter $$
mysql > create function calculate_bonus
-> (employee_id INTEGER) RETURNS DECIMAL(5, 2)
-> BEGIN
-> DECLARE article_count INTEGER;
-> DECLARE bonus DECIMAL(10, 2);
-> SELECT count(id) AS article_count FROM articles
-> WHERE author_id = employee_id;
-> set bonus = article_count * 10;
-> RETURN bonus;
-> END;
-> $$
mysql > DELIMITER ;
mysql > select name, phone, calculate_bonus(id) from authors;
mysql > drop function calculate_bonus;
7. 視圖(例子)
mysql > create view author_view as select name, e-mail, phone from authors ordered by email ASC;
mysql > select * from author_view;
mysql > alter view author_view as select name, phone FROM authors ordered by phone;
mysql > drop view author_view;
8. 觸發器(例子)
mysql > DELIMITER $$
mysql > create trigger article_counter
-> after insert on articles
-> for each row begin
-> update categories set cter = cter + 1 where id = new.category_id;
-> END;
-> $$
mysql > DELIMITER ;
9. 備份(例子)
select * into outfile ‘filename.sql’ from t_name;
mysqldump –u root –p db_name > filename.sql
mysqldump –u root –p --all-databases > filename.sql