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