了解SQL
术语
RDBMS Relational Database Management System - 关系数据库管理系统
DBMS Database Management System - 数据库管理系统
database 数据库 - 保存有组织的数据的容器(通常是一个文件或一组文件)
table 表 - 某种特定类型数据的结构化清单
schema 模式 - 关于数据库和表的布局及特性的信息
column 列 - 表中的一个字段。所有表都是由一个或多个列组成的。
datatype 数据类型 - 每个表列都有相应的数据类型,它限制(或容许)该列中存储的数据
row 行 - 表中的一个记录
primarykey 主键 - 一列(或一组列),其值能够唯一区分表中每个行
foreignkey 外键 - 为某个表中的一列,它包含另一个表的主键值,定义了两个表之间的关系
SQL Structured Query Language - 一种专门用来与数据库通信的语言
SQL优点
不是某个特定数据库供应商专有的语言。几乎所有重要的DBMS都支持SQL。
简单易学。它的语句全都是由描述性很强的英语单词组成,而且这些单词的数目不多。
灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。
Linux安装
相关软件包
mysql-server MySQL服务器。
mysql-client MySQL 客户端程序,用于连接并操作Mysql服务器。
mysql-devel 库和包含文件,如需编译其它MySQL客户端,例如Perl模块,需要安装该RPM
mysql-shared 该软件包包含某些语言和应用程序需要动态装载的共享库(libmysqlclient.so*)
mysql-bench MySQL数据库服务器的基准和性能测试工具
安装命令
apt-get install mysql-server
开启服务(三种方式)
systemctl start mysql
mysql.server start
mysqld
--safe-mode 装载减去某些最佳配置的服务器;
--verbose 显示全文本消息(为获得更详细的帮助消息与--help联合使用);
--version 显示版本信息然后退出。
验证
mysqladmin --version
mysql -u root -p
配置文件
/etc/my.cnf
MySQL简介
特点
成本 - MySQL是开放源代码的,一般可以免费使用(甚至可以免费修改)
性能 - MySQL执行很快(非常快)
可信赖 - 某些非常重要和声望很高的公司都用MySQL来处理自己的重要数据
简单 - MySQL很容易安装和使用
mysql - MySQL command-line tool
选项参数
-u <user> 用户名
-p <password> 密码
-h <host> 主机
-P <port> 端口
命令
HELP [command] 显示[指定命令]的帮助
USE <database> 选择数据库
SHOW DATABASES 显示数据库
SHOW TABLES 获得一个数据库内的表的列表
SHOW COLUMNS FROM <table> 显示表的列的描述信息
DESCRIBE <table> 显示表的列的描述信息
SHOW STATUS 用于显示广泛的服务器状态信息
SHOW CREATE DATA BASE 显示创建特定数据库
SHOW CREATE TABLE 显示创建特定数据表
SHOW GRANTS 用来显示授予用户的安全权限
SHOW ERRORS 用来显示服务器错误消息
SHOW WARNINGS 用来显示服务器警告消息
INFORMATION_SCHEMA 获得和过滤模式信息。
mysqladmin - MySQL Administrator MySQL服务器的管理器
选项和参数
-u <user> 用户名
-p <password> 密码
命令
create databasename 创建一个新数据库
drop databasename 删除一个数据库及其所有表
extended-status 给出服务器的一个扩展状态消息
flush-hosts 洗掉所有缓存的主机
flush-logs 洗掉所有日志
flush-tables 洗掉所有表
flush-privileges 再次装载授权表(同reload)
kill id,id,... 杀死mysql线程
password 新口令,将老口令改为新口令
ping 检查mysqld是否活着
processlist 显示服务其中活跃线程列表
reload 重载授权表
refresh 洗掉所有表并关闭和打开日志文件
shutdown 关掉服务器
status 给出服务器的简短状态消息
variables 打印出可用变量
version 得到服务器的版本信息
检索数据 SELECT
例:
SELECT <column> FROM <table> 检索指定的列
SELECT <column_1,column_2> FROM <table> 检索多个指定的列
SELECT * FROM <table> 检索所有的列
SELECT DISTINCT <column> FROM <table> 检索指定的列,只返回不同的值
SELECT <column> FROM <table> LIMIT 5 检索指定的列中前5行
SELECT <column> FROM <table> LIMIT 5,4 检索指定的列中第5行之后的4行
SELECT last_insert_id() 获取最后通过自动增量生成的值
子句及其顺序
SELECT 要返回的列或表达式
FROM 从中检索数据的表(仅在从表选择数据时使用)
WHERE 行级过滤
GROUP BY 分组说明(仅在按组计算聚集时使用)
HAVING 组级过滤
ORDER BY 输出排序顺序
LIMIT 要检索的行数
排序 ORDER BY
ORDER BY <column> 排序
ORDER BY <column_1,column_2> 按照多个列排序
ORDER BY <column> DESC 按照降序排序
ORDER BY <column_1> DESC, <column_2> 对column_1降序排序在以column_2排序
过滤数据 WHERE
WHERE <condition> 依据条件对数据进行筛选
WHERE <condition_1> AND <condition_2> 两个条件需同时满足
WHERE <condition_1> OR <condition_2> 匹配任意条件
WHERE <column> IN <value_1,value_2> 值为value_1,value_2其中之一
WHERE NOT <condition> 否定之后的条件
WHERE <column> IS NULL 筛选column为NULL的数据
支持的条件操作符
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
BETWEEN 5 AND 10 在指定的两个值之间
通配符 Like
通配符:
% 匹配任意字符出现任意次数
_ 匹配任意字符一次
例
WHERE <column> LIKE 'word%'
正则表达式 REGEXP
例
WHERE prod_name REGEXP '1000' 列中包含1000
WHERE prod_name REGEXP '.000' . 匹配任意字符
WHERE prod_name REGEXP '1000|2000' | 为或者
WHERE prod_name REGEXP '[123] Ton' 匹配 [] 内的几个字符之一
WHERE prod_name REGEXP '[1-5] Ton' 范围匹配
WHERE vend_name REGEXP '\\.' \\为转义字符,匹配后面的特殊字符
字符类
[:alnum:] 任意字母和数字(同[a-zA-Z0-9])
[:alpha:] 任意字符(同[a-zA-Z])
[:blank:] 空格和制表(同[\\t])
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意数字(同[0-9])
[:graph:] 与[:print:]相同,但不包括空格
[:lower:] 任意小写字母(同[a-z])
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v])
[:upper:] 任意大写字母(同[A-Z])
[:xdigit:] 任意十六进制数字(同[a-fA-F0-9])
重复元字符
- 0个或多个匹配
* 1个或多个匹配(等于{1,})
? 0个或1个匹配(等于{0,1})
{n} 指定数目的匹配
{n,} 不少于指定数目的匹配
{n,m} 匹配数目的范围(m不超过255)
定位符
^ 文本的开始
$ 文本的结尾
[[: 词的开始
[[:>:]] 词的结尾
计算字段
相关函数
Concat() 拼接
RTrim() 去掉右边空格
LTrim() 去掉左边空格
Trim() 去空格
Now() 返回当前日期和时间
别名
AS <alias> 给予列一个别名,可用于 列 和 表
算术操作符
+ 加
- 减
* 乘
/ 除
例
SELECT Concat(column_1,column_2,...) FROM vendors
SELECT column_1,column_2,column_1 * column_2 AS alias FROM table
SELECT column AS alias FROM table AS t
数据处理函数
文本处理函数
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写
Convert() 转换字符集
日期和时间处理函数
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分
数值处理函数
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切
聚集函数
聚集函数
AVG() 返回某列的平均值
COUNT() 返回某列的行数,除COUNT(*)外忽略NULL值
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和
DISTINCT 只聚集不同的值
例: SELECT AVG(DISTINCT <column>) FROM <table>;
分组数据
GROUP BY 分组
例: SELECT <column>, COUNT(*) FROM <table> GROUP BY <column>;
GROUP BY <column> WITH ROLLUP 可得到每个分组以及每个分组汇总级别的值
HAVING 在分组后进行过滤
例: SELECT <column> FROM <table> GROUP BY <column> HAVING <condition>;
子查询
例: SELECT <column> FROM <table> WHERE <column> IN (SELECT ...);
联结表
概念
内部联结: 也称为等值联结(equijoin),它基于两个表之间的相等测试。
外部联结: 连接时需要包含没有关联行的那些行,分为左外部联结和右外部联结
自然联结: 排除多次重复的列出现,使每个列只返回一次。
关键字
INNER JOIN ON 内部联结
LEFT OUTER JOIN ON 左外部联结
RIGHT OUTER JOIN 右外部联结
例:
SELECT <column-1>,<column-2> FROM <table-1> INNER JOIN <table-2> ON table-1.column = table-2.column
例:
SELECT <column-1>,<column-2> FROM <table-1>, <table-2> WHERE table-1.column = table-2.column
例:
SELECT <column-1>,<column-2> FROM <table-1> LEFT OUTER JOIN <table-2> ON table-1.column = table-2.column
例:
SELECT <column-1>,<column-2> FROM <table-1> RIGHT OUTER JOIN <table-2> ON table-1.column = table-2.column
组合查询 UNION
概念:
执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。通常称为并(union)或复合查询(compoundquery)。
UNION规则:
UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔
UNION中的每个查询必须包含相同的列、表达式或聚集函数
列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型
只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后
UNION 会自动去除重复的行,UNION ALL 不会
例:
SELECT <column> FROM <table> UNION SELECT <column> FROM <table>;
例:
SELECT <column> FROM <table> UNION ALL SELECT <column> FROM <table>;
全文本搜索
支持引擎: MyISAM 支持全文搜索,但 InnoDB 不支持
如何启用: CREATE 创建表时,通过 FULLTEXT(<column>) 指定须全文搜索的列,可多个。
等级值与排序
全文搜索 相对与 LIKE 会对结果进行排序,排序依赖与计算出的等级值
Match()和Against()用来建立一个计算列-搜索计算出的等级值
SELECT <column> Match(<column>) Against(<text>) AS <alias> FROM <table>
忽略的词
短词被忽略且从索引中排除。短词定义为那些具有3个或3个以下字符的词,可修改。
MySQL带有一个内建的非用词(stopword)列表,这些词被忽略,可覆盖。
如果一个词出现在50%以上的行中,则将它作为一个非用词忽略,不适用IN BOOLEAN MODE
如果表中的行数少于3行,则全文本搜索不返回结果,因为50%规则
忽略词中的单引号。例如,don't 索引为 dont
不具有词分隔符(包括日语和汉语)的语言不能恰当地返回全文本搜索结果
相关函数
Match() 指定被搜索的列,传递给Match()的值必须与FULLTEXT()定义中的相同
Against() 指定要使用的搜索表达式,除BINARY方式,否则不区分大小写
例:
SELECT <column> FROM <table> WHERE Match(<column>) Against(<text>)
查询扩展
概念: 基于所查询出来的行内的的关键字进行再次查询,扩展出更多的结果。
关键字: WITH QUERY EXPANSION
例:
SELECT <column> FROM <table> WHERE Match(<column>) Against(<text>,WITH QUERY EXPANSION)
布尔文本搜索
概念: 可实现要匹配的词,要排斥的词,排列提示,表达式分组等,无FULLTEXT索引也可使用
关键字: IN BOOLEAN MODE
全文本布尔操作符
+ 包含,词必须存在
- 排除,词必须不出现
> 包含,而且增加等级值
< 包含,且减少等级值
() 把词组成子表达式(允许这些子表达式作为一个组被包含、排除、排列等)
~ 取消一个词的排序值
* 词尾的通配符
"" 定义一个短语(与单个词的列表不一样,它匹配整个短语以便包含或排除这个短语)
例:
SELECT <column> FROM <table> WHERE Match(<column>) Against(<text>,IN BOOLEAN MODE)
例 包含text1,排除text2开头的行:
SELECT <column> FROM <table> WHERE Match(<column>) Against('text1 -text2*',IN BOOLEAN MODE)
例 包含text1 和 text2 的行:
SELECT <column> FROM <table> WHERE Match(<column>) Against('+text1 +text2',IN BOOLEAN MODE)
例 包含text1 或 text2 的行:
SELECT <column> FROM <table> WHERE Match(<column>) Against('text1 text2',IN BOOLEAN MODE)
例 包含text1 text2 的行:
SELECT <column> FROM <table> WHERE Match(<column>) Against('"text1 text2"',IN BOOLEAN MODE)
例 包含text1 或 text2 增加前者的等级,降低后者的等级:
SELECT <column> FROM <table> WHERE Match(<column>) Against('>text1 <text2',IN BOOLEAN MODE)
数据插入 INSERT
插入完整的行
两种语法
INSERT INTO <table> VALUES(value-1,value2);
INSERT INTO <table>(column-1,column-2) VALUES(value-1,value2);
省略列
该列定义为允许NULL值(无值或空值)
在表定义中给出默认值。这表示如果不给出值,将使用默认值
降低优先级
INSERT LOW_PRIORITY INTO
插入多个行
INSERT INTO <table>(column-1,column-2) VALUES(value-1,value2),(value-1,value2);
插入检索出的数据
INSERT INTO <table-1>(column-1,column-2) SELECT column-1,column-2 FROM <table-2>;
更新数据
更新特定行
UPDATE <table> SET column-1=value-1,column-2=value-2 WHERE <condition>;
更新所有行
UPDATE <table> SET column-1=value-1,column-2=value-2;
或略发生错误
UPDATE IGNORE <table> ...
删除数据
删除特定的行
DELETE FROM <table> WHERE <condition>;
删除所有行
DELETE FROM <table>;
更快的删除(删除原表,重建新表)
TRUNCATE TABLE ...
创建和操纵表
关键字
AUTO_INCREMENT 自动增量
NOT NULL 不允许NULL值
NULL 允许NULL值
PRIMARY KEY (column[,column-1]) 主键,可指定多个列
DEFAULT <value> 指定默认值
ENGINE=<engine-type> 指定引擎类型
引擎类型
InnoDB 可靠的事务处理引擎,不支持全文本搜索;
MEMORY 在功能等同于MyISAM,数据存储在内存中,速度很快,适合于临时表
MyISAM 是一个性能极高的引擎,它支持全文本搜索,但不支持事务处理。
创建表 例
CREATE TABLE <table>
(
column-1 int NOT NULL AUTO_INCREMENT,
column-2 char(50) NOT NULL ,
column-4 decimal(8,2) NULL DEFAULT 1,
PRIMARY KEY (column-1, column-2)
...
) ENGINE=InnoDB;
更新表
增加列
ALTER TABLE <table> ADD <column> <datatype>;
删除列
ALTER TABLE <table> DROP COLUMN <column>;
删除表
DROP TABLE <table>;
重命名表
重命名一个表
RENAME TABLE <old-table> TO <new-table>;
重命名多个表
RENAME TABLE <old-table> TO <new-table>,<old-table> TO <new-table>;
视图
概念:
视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。
为什么使用视图:
重用SQL语句。
简化复杂的SQL操作。在编写查询后,可以方便地重用它而不必知道它的基本查询细节。
使用表的组成部分而不是整个表。
保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限。
更改数据格式和表示。视图可返回与底层表的表示和格式不同的数据。
视图的规则和限制
与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名字)。
对于可以创建的视图数目没有限制。
为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。
ORDER BY可以用在视图中
视图不能索引,也不能有关联的触发器或默认值。
视图可以和表一起使用。例如,编写一条联结表和视图的SELECT语句。
语法
CREATE VIEW <viewname> AS ... 创建视图
SHOW CREATE VIEW <viewname>; 查看创建视图的语句
DROP VIEW <viewname>; 删除视图
CREATE OR REPLACE VIEW 创建或更新视图
如下情况下视图无法被更新
分组(使用GROUP BY和HAVING);
联结;
子查询;
并;
聚集函数(Min()、Count()、Sum()等);
DISTINCT;
导出(计算)列。
存储过程
执行存储过程
语法
CALL <procedure>([@param[,...]])
创建存储过程
语法
CREATE PROCEDURE <procedure>([[IN|OUT|INOUT] param datatype [,..]])
BEGIN
...
END;
命令行存储过程中的语句包含分隔符
原理: DELIMITER 可临时修改语句分隔符
例:
DELIMITER //
CREATE PROCEDURE productpricing()
BEGIN
SELECT Avg(prod_price) AS priceaverage
FROM products;
END //
DELIMITER ;
删除存储过程
DROP PROCEDURE <procedure>
变量
规则
变量名必须以 @ 开始
关键字
IN 传递给存储过程
OUT 从存储过程传出,如这里所用
INOUT 对存储过程传入和传出
调用变量 例:
SELECT @<param>;
创建存储过程中使用变量 例:
CREATE PROCEDURE <procedure>(
OUT <param> INT
)
BEGIN
SELECT <column> INTO param FROM <table>;
END;
检查存储过程
SHOW CREATE PROCEDURE <procedure>;
游标
概念
在存储了游标之后,应用程序可以根据需要滚动或浏览其中的数据。
只能用于存储过程(和函数)
使用步骤
创建游标 --> 打开游标 --> 检索各行 --> 关闭游标
创建游标
语法:
DECLARE <cursor_name> CURSOR FOR <select_statement>
例:
CREATE PROCEDURE <procedure>()
BEGIN
DECLARE <cursor_name> CURSOR
FOR
SELECT <column> FROM <table>;
END;
打开游标
OPEN <cursor_name>;
关闭游标
CLOSE <cursor_name>;
使用游标数据
FETCH [[NEXT] FROM] <cursor_name> INTO <var_name>;
触发器
支持触发器的语句
DELETE; INSERT; UPDATE; BEGIN ... END;
创建触发器
Tip
仅支持表 只有表才支持触发器,视图和临时表不支持。
每个表每个事件每次只允许一个触发器
如果BEFORE触发器失败,MySQL将不执行请求的操作
需要信息
trigger_name 触发器名
trigger_time { BEFORE | AFTER }
trigger_event { INSERT | UPDATE | DELETE }
trigger_order { FOLLOWS | PRECEDES } other_trigger_name
语法
CREATE TRIGGER <trigger_name>
<trigger_time> <trigger_event> ON <table>
FOR EACH ROW
[trigger_order]
<rigger_body>
删除触发器
Tip
触发器不能更新或覆盖。只能删除后重新创建。
语法
DROP TRIGGER <trigger_name>;
使用触发器
INSERT触发器
在INSERT触发器代码内,可引用一个名为NEW的虚拟表,访问被插入的行
在BEFORE INSERT触发器中,NEW中的值也可以被更新(允许更改被插入的值)
AUTO_INCREMENT列:NEW在INSERT之前包含0,INSERT之后包含新的自动生成值
DELETE触发器
可以引用一个名为OLD的虚拟表,访问被删除的行
OLD中的值全都是只读的,不能更新
UPDATE触发器
可以引用一个名为OLD的虚拟表访问更新之前的值,名为NEW的虚拟表访问新更新的值
在BEFORE UPDATE触发器中,NEW中的值可能也被更新
OLD中的值全都是只读的,不能更新
事务处理
概念
用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。
事物开始
START TRANSACTION
回滚
ROLLBACK
提交
概念
一般的MySQL语句都是直接针对数据库表执行和编写的,提交(写或保存)操作是自动进行的
在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用COMMIT语句
当COMMIT或ROLLBACK语句执行后,事务会自动关闭
例:
START TRANSACTION;
DELETE FROM <table>;
COMMIT;
保留点
创建保留点
SAVEPOINT <identifier>;
回滚至保留点
ROLLBACK TO <identifier>;
释放保留点
自动释放
保留点在事务处理完成(执行一条ROLLBACK或COMMIT)后自动释放
明确释放
RELEASE SAVEPOINT
设置默认提交
SET autocommit=[0|1];
字符集和语言
相关概念
字符集 字母和符号的集合
编码 某个字符集成员的内部表示
校对 规定字符如何比较的指令
查看支持的字符集列表
SHOW CHARACTER SET;
查看所支持校对的完整列表
SHOW COLLATION;
_cs 区分大小写
_ci 不区分大小写
查看正在使用的字符集
SHOW VARIABLES LIKE 'character%';
查看正在使用的校对
SHOW VARIABLES LIKE 'collation%';
创建表时指定字符集和校对
CREATE TABLE <table>
(
...
) DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;
为每个列单独设置校对
CREATE TABLE <table>
(
columnn1 INT,
columnn2 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci
) DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;
在语句中指定校对
SELECT * FROM <table> ORDER BY <column> COLLATE latin1_general_cs;
用户管理
Tip:
帐号信息存储在 mysql 数据库中
获取所有帐号密码
SELECT user FROM user;
创建帐号
CREATE USER <username> IDENTIFIED BY <password>;
重命名帐号
RENAME USER <username> TO <newUserName>;
修改自己的密码
SET PASSWORD = Password(<password>);
修改其他用户密码
SET PASSWORD FOR <username> = Password(<password>);
删除用户账号
DROP USER <username>;
查看账户权限
SHOW GRANTS FOR <username>;
设置权限
语法
GRANT <priv_type> ON <priv_level> TO <username>;
例 允许用户user在db数据库中的所有表中使用SELECT:
GRANT SELECT ON db.* TO user;
取消权限
语法
REVOKE <priv_type> ON <priv_level> FROM <username>;
权限说明
ALL 除GRANT OPTION外的所有权限
ALTER 使用ALTER TABLE
ALTER ROUTINE 使用ALTER PROCEDURE和DROP PROCEDURE
CREATE 使用CREATE TABLE
CREATE ROUTINE 使用CREATE PROCEDURE
CREATE TEMPORARY TABLES 使用CREATE TEMPORARY TABLE
CREATE USER 使用CREATE USER、DROP USER、RENAME USER
和REVOKE ALL PRIVILEGES
CREATE VIEW 使用CREATE VIEW
DELETE 使用DELETE
DROP 使用DROP TABLE
EXECUTE 使用CALL和存储过程
FILE 使用SELECT INTO OUTFILE和LOAD DATA INFILE
GRANT OPTION 使用GRANT和REVOKE
INDEX 使用CREATE INDEX和DROP INDEX
INSERT 使用INSERT
LOCK TABLES 使用LOCK TABLES
PROCESS 使用SHOW FULL PROCESSLIST
RELOAD 使用FLUSH
REPLICATION CLIENT 服务器位置的访问
REPLICATION SLAVE 由复制从属使用
SELECT 使用SELECT
SHOW DATABASES 使用SHOW DATABASES
SHOW VIEW 使用SHOW CREATE VIEW
SHUTDOWN 使用mysqladmin shutdown(用来关闭MySQL)
SUPER 使用CHANGE MASTER、KILL、LOGS、PURGE、MASTER
和SET GLOBAL。还允许mysqladmin调试登录
UPDATE 使用UPDATE
USAGE 无访问权限
数据库维护
备份数据库
Tip:
由于数据库文件总是处于打开和使用状态,普通的文件备份不一定总是有效
为了保证所有数据被写到磁盘,可能需要在进行备份前使用FLUSH TABLES语句
命令行工具
mysqldump 转存所有的数据库至外部文件
mysqlhotcopy 从一个数据库复制所有工具
MySQL命令
BACKUP TABLE 转储所有数据到某个外部文件
SELECT INTO OUTFILE 转储所有数据到某个外部文件
RESTORE TABLE 复原数据
进行数据库维护
检查表键是否正确
ANALYZE TABLE <table>;
针对更多问题对表进行检查
语法
CHECK TABLE <table> ... [option] ...;
支持的检查方式
QUICK 只进行快速扫描
FAST 只检查未正常关闭的表
MEDIUM 检查所有被删除的链接并进行键检验
EXTENDED 执行最彻底的检查
CHANGED 检查自最后一次检查以来改动过的表
修复表(不应经常使用)
REPAIR TABLE
回收删除大量数据后的空间
OPTIMIZE TABLE
查看日志文件
日志类型
错误日志
包含启动和关闭问题以及任意关键错误的细节。此日志通常名为hostname.err,位于data目录中。此日志名可用--log-error命令行选项更改。
查询日志
记录所有MySQL活动,在诊断问题时非常有用。此日志文件可能会很快地变得非常大,因此不应该长期使用它。此日志通常名为hostname.log,位于data目录中。此名字可以用--log命令行选项更改。
二进制日志
它记录更新过数据(或者可能更新过数据)的所有语句。此日志通常名为hostname-bin,位于data目录内。此名字可以用--log-bin命令行选项更改。注意,这个日志文件是MySQL 5中添加的,以前的MySQL版本中使用的是更新日志。
缓慢查询日志
顾名思义,此日志记录执行缓慢的任何查询。这个日志在确定数据库何处需要优化很有用。此日志通常名为hostname-slow.log,位于data目录中。此名字可以用--log-slow-queries命令行选项更改。
刷新日志
FLUSH LOGS
性能相关
查看配置
SHOW VARIABLES;
SHOW STATUS;
进程
显示活动的进程
SHOW PROCESS LIST
杀掉进程
KILL
推迟执行关键字
DELAYED