關(guān)于MySQL的簡單總結(jié)
MySQL是最著名的開源數(shù)據(jù)庫,容易上手且功能強(qiáng)大,Yahoo!、BBC News等著名站點(diǎn)都使用了MySQL數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲
在Linux環(huán)境中可以通過/etc/my.cnf對MySQL服務(wù)器進(jìn)行配置(在Windows中是一個叫my.ini的文件),有接近300個配置參數(shù)可以用來在啟動MySQL服務(wù)器時控制其行為(包括:內(nèi)存、日志、錯誤報告等等)
在Linux環(huán)境中可以通過service mysqld start來啟動MySQL服務(wù),通過service mysqld stop來停止MySQL服務(wù)(在Windows中可以通過net start mysql來啟動,通過net stop mysql來停止,也可以通過控制面板中的性能和維護(hù)中的管理工具中的服務(wù)來啟動和停止MySQL服務(wù))
在服務(wù)器啟動后,可以通過輸入mysqladmin –u root –p variables命令來查看配置參數(shù),可以通過在mysql客戶端中輸入show variables;來查看
MySQL支持多種存儲引擎,可以通過show engines;來查看MySQL支持的所有存儲引擎,或通過show variables like ‘%storage_engine%’;來查看當(dāng)前使用的存儲引擎;如果需要修改所使用的存儲引擎可以用alter table t_YYY type=XXX;或alter table t_YYY engine=XXX;來修改指定的表所使用的存儲引擎,也可以通過在my.cnf(my.ini)文件中加入default-storage-engine=XXX來指定默認(rèn)的存儲引擎,下面是對各種存儲引擎的一個簡單說明:
² MyISAM:默認(rèn)的MySQL插件式存儲引擎,不支持事務(wù),但是在Web、數(shù)據(jù)倉儲等大數(shù)據(jù)量應(yīng)用環(huán)境下最常使用的存儲引擎之一
² InnoDB:最常用的用于事務(wù)處理的存儲引擎,具有眾多特性,包括ACID事務(wù)支持,在Windows環(huán)境下是默認(rèn)的存儲引擎
² BDB:可替代InnoDB的事務(wù)引擎,支持COMMIT、ROLLBACK和其他事務(wù)特性,但在5.1之后的版本中不復(fù)存在
² Memory:將所有數(shù)據(jù)保存在RAM中,在需要快速查找引用和其他類似數(shù)據(jù)的環(huán)境下,可提供極快的訪問,但服務(wù)器關(guān)閉時不能持久存儲
² MRG_MYISAM:允許MySQL DBA或開發(fā)人員將一系列等同的MyISAM表以邏輯方式組合在一起,并作為1個對象引用它們,對于數(shù)據(jù)倉儲等VLDB環(huán)境十分適合
² Archive:為大量很少引用的歷史、歸檔、或安全審計(jì)信息的存儲和檢索提供了完美的解決方案
² Federated:能夠?qū)⒍鄠€分離的MySQL服務(wù)器鏈接起來,從多個物理服務(wù)器創(chuàng)建一個邏輯數(shù)據(jù)庫,適合于分布式環(huán)境或數(shù)據(jù)集群環(huán)境
² NDBCluster:MySQL的簇式數(shù)據(jù)庫引擎,尤其適合于具有高性能查找要求的應(yīng)用程序,這類查找需求還要求具有最高的正常工作時間和可用性
MySQL支持豐富的數(shù)據(jù)類型:
² 時間日期類:DATE / DATETIME / TIME / TIMESTAMP / YEAR
² 數(shù)值類: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服務(wù)器
mysql –u username –p database_name
mysql –h hostname –u username –p database_name
2. 修改MySQL提示符
prompt XXX
\c |
記錄輸入多少個命令的提符 |
\d |
提示當(dāng)前數(shù)據(jù)庫 |
\D |
提示當(dāng)前日期 |
\h |
提示當(dāng)前服務(wù)器主機(jī) |
\u |
提示用戶名 |
\U |
提示用戶名@主機(jī) |
3. 操作數(shù)據(jù)庫
a) 創(chuàng)建數(shù)據(jù)庫:create database db_name;或mysqladmin –u root –p create db_name
b) 切換到某數(shù)據(jù)庫:user db_name;
c) 刪除數(shù)據(jù)庫:drop database db_name;
4. 操作表
a) 創(chuàng)建表:create table t_name (col1, definition, col2, definition, … , coln, definition);
b) 顯示表結(jié)構(gòu):desc t_name;
c) 列出所有表:show tables;
d) 修改表結(jié)構(gòu)
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) 創(chuàng)建用戶并授權(quán):grant privilege1, privilege2, … , privilegen on db_name.t_name to 'username'@'host' identified by 'userpassword'; (說明:如果要將所有權(quán)限分配給用戶可以用all privileges代替授權(quán)項(xiàng)目;如果要將所有數(shù)據(jù)庫的所有表授權(quán)給該用戶,可以用*.*表示;可以用'%'所有站點(diǎn);如果沒有通過identified by 設(shè)置用戶口令,之后可以用set password for 'username'@'host' = password('serpassword');來設(shè)置口令)
b) 召回用戶權(quán)限:revoke privilege1, … , privilegen from 'username'@'host';(說明:可以用all privileges代表召回所有權(quán)限)
c) 重命名用戶:rename user 'username1'@'host1' to 'username2'@'host2';
6. 存儲函數(shù)(例子)
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. 觸發(fā)器(例子)
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