author:skate
time:2011/12/19
mysql学习笔记
1.mysql的基本使用命令
2.mysql的备份与恢复
3.mysql的服务器参数优化
4.mysql的sql优化
5.mysql的不同存储引擎的优化
6.mysql的高扩展、高可用
1.mysql的基本使用命令
show命令的用法。
1. show tables或show tables from database_name; --显示当前数据库或指定数据库中所有表的名称。
2. show databases; --显示mysql中所有数据库的名称。
SELECT DATABASE(); --显示当前使用的数据库
select user(); --显示当前用户
3. show columns from table_name from database_name;
或show columns from database_name.table_name;
或desc table_name; -- 显示表中列名称。
4. show grants for user_name;
或show grants; -- 显示一个用户的权限,显示结果类似于grant 命令。
5. show index from table_name; -- 显示表的索引。
6. show status;
或 show global status;
或 show global status like '%name%'; -- 显示一些系统特定资源的信息,例如,正在运行的线程数量。
7. show variables;
或 show variables like '%name%'; -- 显示系统变量的名称和值。
8. show processlist; -- 显示系统中正在运行的所有进程,也就是当前正在执行的查询。
大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,
就可以查看所有人的进程,包括密码。
10. show privileges; -- 显示服务器所支持的不同权限。
11. show create database database_name; -- 显示create database 语句是否能够创建指定的数据库。
12. show create table table_name; -- 显示create database 语句是否能够创建指定的数据库。
13. show engines; -- 显示安装以后可用的存储引擎和默认引擎。
14. show innodb status; -- 显示innoDB存储引擎的状态。
15. show logs; -- 显示BDB存储引擎的日志。
16. show warnings; -- 显示最后一个执行的语句所产生的错误、警告和通知。
17. show errors; -- 只显示最后一个执行语句所产生的错误。
常用sql语句
SQL分类:
DDL—数据定义语言(Create,Alter,Drop,DECLARE)
DML—数据操纵语言(Select,Delete,Update,Insert)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)
1、说明:创建数据库
Create DATABASE database-name
2、说明:删除数据库
drop database dbname
3.create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表结构:
create table newtable like oldtable;
根据已有的表创建新表结构和数据:
create table tab1 as select * from mysql.db;
删除新表
drop table tabname
4.表增加、编辑、删除列
alter table tab1 add column col_name col_type;
alter table tab1 modify column col_name col_type;
alter table tab1 drop column col_name;
5.添加、删除主键
alter table tab1 add priamry key(col1);
alter table tab1 drop priamry key;
6.创建、删除索引
create [unique] index idx_col1 on tab1(col1);
alter table tab1 drop index idx_col1;
7.创建、删除视图
create view v_aa * select * from tab1;
drop view v_aa;
8.删除表的数据
truncate table tab1;
添加有本地访问权限的用户
grant all privileges on *.* to 'skate'@'localhost' identified by 'skate'with grant option;
添加有远程访问权限的用户
grant all privileges on *.* to 'skate_r'@'%' identified by 'skate_r' with grant option;
删除用户
drop user skate@localhost; (@不加默认为“%”)
权限回收
revoke delete on skatedb.* from skate@'localhost';
创建用户,授权DML
grant select,insert,update,delete on *.* to 'skate'@'%' identified by 'skate' with grant option;
限制用户资源
mysql> grant all on test.* to 'skate_s'@'localhost'
-> identified by 'skate_s'
-> with max_queries_per_hour 20
-> max_updates_per_hour 10
-> max_connections_per_hour 5
-> max_user_connections 2;
在mysql里执行语句:
mysql> SET PASSWORD FOR 'skate_s'@'%'= PASSWORD('skate');
如果只是更改自己的密码,则:
mysql> SET PASSWORD = PASSWORD('password');
在全局级别使用GRANT USAGE语句(在*.*)来指定某个账户的密码:
mysql> GRANT USAGE ON *.* TO 'skate'@'%' IDENTIFIED BY 'skate';
或直接修改MySQL库表:
mysql> UPDATE mysql.user SET Password = PASSWORD('skate') WHERE Host = '%' AND User = 'skate';
mysql> FLUSH PRIVILEGES;
修改root密码:
mysql> update mysql.user set password=password('passw0rd') where user='root';
mysql> FLUSH PRIVILEGES;
使用mysqladmin:
[root@skate tmp]# mysqladmin -uskate -hlocalhost -p password 'skate4';
数据加密
mysql> select password('skate');
+-------------------+
| password('skate') |
+-------------------+
| 194f4666458c9d3e |
+-------------------+
1 row in set (0.00 sec)
mysql> select md5('skate');
+----------------------------------+
| md5('skate') |
+----------------------------------+
| 7e4f29b77429202024e916268abc41ba |
+----------------------------------+
1 row in set (0.01 sec)
mysql> select sha1('skate');
+------------------------------------------+
| sha1('skate') |
+------------------------------------------+
| 71701bcaa4d79fa39647c35a270148ed7ed5ac2e |
+------------------------------------------+
1 row in set (0.00 sec)
授权精确到列
mysql> grant select(col1) on test.tab1 to skate@localhost;
-----end------