MySQL:语法速查手册【持续更新...】

在这里插入图片描述
在这里插入图片描述

一、定义基本表

1、常用的完整性约束

  • 主码约束
primary key
  • 外键约束
foreign key
  • 唯一性约束
unique
  • 非空性约束
not null
  • 取值约束
check

2、例题

【例1】建立一个“学生”表Student,由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一

create table Student(
	Sno char(5) not null unique,
    Sname char(20) unique,
    Ssex char(1),
    Sage number,
    Sdept char(15)
);

【例2】建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno, Cno)为主码

create table SC(
	Sno char(5),
    Cno char(3),
    Grade number,
    Primary key(Sno, Cno)
);

二、修改基本表

1、语法格式

ALTER TABLE <表名>
[ ADD <新列名> <数据类型> [ 完整性约束 ] ]
[ DROP <完整性约束名> ]
[ MODIFY <列名> <数据类型> ];
  • ADD子句:增加新列和新的完整性约束条件
  • DROP子句:删除指定的完整性约束条件
  • MODIFY子句:用于修改列名和数据类型

2、例题

【例1】向Student表增加 “入学时间” 列,其数据类型为日期型

alter table Student add Scome date;

【例2】将年龄的数据类型改为字符型

alter table Student modify Sage char;

【例3】删除学生姓名必须取唯一值的约束

alter table Student drop unique(Sname);

三、删除基本表

1、语法格式

drop table <表名>

2、例题

【例1】删除Student表

drop table Student;

四、建立与删除索引

1、语法格式

-- 建立索引
CREATE [UNIQUE] INDEX <索引名> ON <表名>(<列名>[<次序>][,<列名>[<次序>] ]);
-- 删除索引
DROP INDEX <索引名>;

2、例题

【例1】为学生 - 课程数据库中的Student,Course,SC三个表建立索引。

  • Student表按学号升序建唯一索引

  • Course表按课程号升序建唯一索引

  • SC表按学号升序和课程号降序建唯一索引

create unique index Stusno on Student(Sno);
create unique index Coucno on Course(Cno);
create unique index SCno on SC(Sno ASC, Cno DESC);

【例2】删除Student表的Stusname索引

drop index Stusname;

五、查询

SELECT [ALL|DISTINCT]   <目标列表达式> [<别名>]
                 [<目标列表达式>[<别名>]]FROM    <表名或视图名>[<别名>]
                [<表名或视图名>[<别名>] ][ WHERE <条件表达式> ]
[ GROUP BY <列名> [, <列名>][ HAVING <条件表达式> ] ]
[ ORDER BY <列名> [, <列名>][ ASC|DESC ] ];

① from 子句 —— 指定查询对象(基本表或视图)

② where 子句:指定查询条件

③ group by 子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组

④ having 短句:筛选出满足指定条件的组

⑤ order by 子句:对查询结果表按指定列值的升序或降序排序

以下是示例数据库

学生 - 课程数据库
学生表:
        Student(Sno,Sname,Ssex,Sage,Sdept)
课程表:
        Course(Cno,Cname,Cpno,Ccredit)
学生选课表:
         SC(Sno,Cno,Grade) 

1、单表查询

① 选择表中的若干列

《查询指定列》

【例1】查询全体学生的学号与姓名

select Sno, Sname from Student;

【例2】查询全体学生的姓名、学号、所在系

select Sname, Sno, Sdept from Student;

《查询全部列》

【例】查询全体学生的详细记录

select  Sno,Sname,Ssex,Sage,Sdept from Student;
select * from Student;

《查询经过计算的值》

【例】 查全体学生的姓名及其出生年份(列别名)

select Sname, Sage as 2021-Sage from Student;

② 选择表中的若干元组

《消除取值重复的行》

在SELECT子句中使用 DISTINCT 短语

数据如下:

Sno        Cno       Grade
-----      ---       ----
19001       1         92
19001       2         85
19001       3         88
19002       2         90
19002       3         80
  • 查询选修了课程的学生学号
-- 未优化前
select Sno from SC;
selct all Sno from SC;

 结果: Sno   
	19001  
    19001  
    19001  
    19002  
    19002
-------------------------
-- 优化后
select distinct Sno from SC;
 结果: Sno   
	19001  
    19002

《查询满足条件的元组》

  1. 比较大小
=, >, <, >=, <=, !=<>, >, !<

【例1】查询计算机系全体学生的名单

select Sname from Student where Sdep = 'CS';

【例2】查询所有年龄在20岁以下的学生姓名及其年龄

select Sname, Sage from Student where age < 20;
select Sname, Sage from Student where not age >= 20;

【例3】查询考试成绩有不及格的学生的学号

select distinct Sno from SC where Grade < 60;
  1. 确定范围
between ... and ...
not between ... and ...

【例1】查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄

select Sname, Sdept, Sage from Student where Sage between 20 and 23;

【例2】查询年龄不在20~23岁之间的学生姓名、系别和年龄

select Sname, Sdept, Sage from Student where not Sage between 20 and 23;
  1. 确定集合
IN <值表>
NOT IN <值表>

【例】查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别

select Sname, Ssex from Student where Sdept in ('IS', 'MA', 'CS');
  1. 字符串匹配
LIKENOT LIKE
[NOT] LIKE<匹配串>[ESCAPE<换码字符>]
  • 固定模版字符串

【例】查询学号为95001的学生的详细情况

select * from Student where Sno like '19001';
select * from Student where Sno = '19001';
  • 通配符
    • % —— 代表任意长度
    • _ —— 代表单个字符

【例1】查询所有姓刘学生的姓名、学号和性别

select Sname, Sno, Ssex from Student Sname like '刘%';

【例2】 查询姓 “欧阳” 且全名为三个汉字的学生的姓名

select Sname from Student where Sname like '欧阳_';

【例3】查询名字中第2个字为"阳"字的学生的姓名和学号

select Sname, Sno from Student where like '_阳%';

【例4】查询所有不姓刘的学生姓名

select Sname from Student Sname not like '刘%';
  • 转义字符(escape短语)

【例】查询DB_Design课程的课程号和学分

select Cno, Ccredit from Course where Cname like 'DB\_Design' escape '\';
  1. 涉及空值的查询
is nullis not null

【例】某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号

select Sno, Cno from SC where Grade is null;

【例】查所有有成绩的学生学号和课程号

select Sno, Cno from SC where Grade is not null;	-- 有成绩即不为空
  1. 多重条件查询
  • 用逻辑运算符AND和OR来联结多个查询条件
    • AND的优先级高于OR
    • 可以用括号改变优先级
  • 可用来实现多种其他谓词
    • [NOT] IN [NOT]
    • BETWEEN … AND …

【例1】查询计算机系年龄在20岁以下的学生姓名

select Sname from Student where Sdept = 'CS' and Sage < 20;

【例2】查询信息系(IS)、数学系(MA)和计算机科学系(CS)学生的姓名和性别

select Sname, Ssex from Student where Sdept in ('IS', 'MA',' CS');

【例3】查询年龄在20~23岁(包括20岁和23岁)之间的学生的姓名、系别和年龄

select Sname, Sdept, Sage from Student where Sage between 20 and 23;

③ 对查询结果排序

使用order by子句

  1. 升序:ASC
  2. 降序:DESC

【例1】查询选修了3号课程的学生的学号及其成绩,查询结果按分数降序排列

select Sno, Grade from SC where Cno = '3' order by Grade desc;

结果:

Sno        Grade
-------    -------
19010
19024
19007       92
19003       82
19010       82
19009       75
19014       61
19002       55

【例2】查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列

select * from Student where Sdept, Sage desc;

④ 使用集合函数

  • 计数
COUNT([DISTINCT|ALL] *)
COUNT([DISTINCT|ALL] <列名>
  • 计算总和
SUM([DISTINCT|ALL] <列名>
  • 计算平均值
AVG([DISTINCT|ALL] <列名>
  • 求最大值
MAX([DISTINCT|ALL] <列名>
  • 求最小值
MIN([DISTINCT|ALL] <列名>

【例1】查询学生总人数

select count(*) from Student;

【例2】查询选修了课程的学生人数

select count(distinct Sno) from SC;
-- 注:用DISTINCT以避免重复计算学生人数

【例3】计算1号课程的学生 平均 成绩

select AVG(Grade) from SC where Cno = '1';

【例4】查询选修1号课程的学生 最高 分数

select max(Grade) from SC where Cno = '1';

⑤ 对查询结果分组

未对查询结果分组,集合函数将作用于 整个查询结果

对查询结果分组后,集合函数将 分别作用于每个组

====> 使用GROUP BY子句分组

【例1】求各个课程号及相应的选课人数

select Cno, count(Cno) from Sc Group by Cno;
--------------------------------------------
结果:
Cno        COUNT(Sno)
 1             22
 2             34
 3             44
 4             33
 5             48     

【例2】求各个课程号及相应的课程成绩在90分以上的学生人数

select Cno, Count(Sno) from Sc where Grade > 90 Group by Cno;
----------------------------------------
结果
Cno        COUNT(Sno)
 1            13
 2             7
 4             3
 5             8  

====> 使用HAVING短语筛选最终输出结果

【例1】查询选修了3门以上课程的学生学号

select Sno from SC Group by Sno Having Count(*) > 3;

【例2】 查询有3门以上课程在90分以上的学生的学号及90分以上的课程数

select Sno, Count(*) from SC where Grade > 90 Group by Sno Having Count(*) > 3;

HAVING短语与WHERE子句的区别?

  • WHERE子句作用于基表或视图,从中选择满足条件的元组
  • HAVING短语作用于组,从中选择满足条件的组

2、连接查询

同时涉及多个表的查询称为连接查询

一、广义笛卡尔积

select Student.*, Sc.* from Student, SC;
-- .*代表这个表中所有的字段

二、等值与非等值连接查询

连接运算符为 = 的连接操作

 [<表名1>.]<列名1>  =  [<表名2>.]<列名2>
 -- 任何子句中引用表1和表2中同名属性时,都必须加表名前缀。引用唯一属性名时可以加也可以省略表名前缀
select Student.*, Sc.* from Student, SC where Student.Sno == SC.Sno;

三、自身连接查询

一个表与其自己进行连接,称为表的自身连接

  1. 需要给表起别名以示区别
  2. 由于所有属性名都是同名属性,因此必须使用别名前缀

【例】查询每一门课的间接先修课(即先修课的先修课)

select a.Cno, b.Cno from Course a, Course b where a.Cpon = b.Cno;

四、外连接查询

外连接与普通连接的区别

  • 普通连接操作只输出满足连接条件的元组
  • 外连接操作以指定表为连接主体,将主体表中不满足连接条件的元组一并输出

【例】以学生为主体,查询每个学生及其选修课程的情况 (用外连接)

SELECT Student.Sno, Sname, Ssex, Sage, Sdept, Cno, Grade FROM Student,SC
     		WHERE  Student.Sno = SC.Sno(+);

五、复合条件连接查询

WHERE子句中含多个连接条件时,称为复合条件连接

假设学校中性别相同的学生不会重名。现如下设计学生表和选课表:

Std(Sname, Ssex, Sage, Sdept)
StdC(Sname, Ssex, Cno, Grade)

【例1】查询选修2号课程且成绩在90分以上的所有学生的姓名,性别及所在系

select Sname, Ssex, Sdept from Std, StdC 
		where Std.Sname = StdC.Sname and Std.Ssex = StdC.Ssex
		  and StdC.Cno = '2'
		  and StdC.Grade > 90;

【例2】查询每个学生的学号、姓名、选修的课程名及成绩( Student,SC,Course )

select Student.Sno, Student.Sname, Course.Cname, SC.Grade 
from Student, SC, Course 
	where Student.Sno = SC.Sno
    and SC.Cno = Course.Cno;

3、嵌套查询

① 嵌套查询概述

【一个查询块】:一个SELECT-FROM-WHERE语句

【嵌套查询】:将一个查询块嵌套在另一个查询块的 WHERE子句HAVING短语 的条件中的查询


-- 查询所有选修了2号课程的学生姓名
-- 外层查询/父查询
select Sname from Student where Sno in (
    -- 内层查询/子查询
	select Sno from SC where Cno = '02'	
);
  • 子查询的限制

    • 不能使用order by子句
  • 层层嵌套方式反映了 SQL语言的结构化

  • 有些嵌套查询可以用连接运算替代

select Sname from Student, SC where Student.Sno = SC.Sno and Cno = '02';

② 嵌套查询分类

  1. 不相关子查询
  • 子查询的查询条件不依赖于父查询
  1. 相关子查询
  • 子查询的查询条件依赖于父查询

③ 嵌套查询求解方法

一、不相关子查询

【例】查询与“刘晨”在同一个系学习的学生

-- 确定 “刘晨” 所在系名
select Sdept from Student where Sname = '刘晨';
-- 查找所有在IS系学习的学生
select Sno, Sname, sdept from Student where Sdept = 'IS';
-- 合并查询
select Sno, Sname, Sdept from Student where Sdept in (
    select Sdept from Student where Sname = '刘晨';
)

二、 相关子查询

【例】查询所有选修了1号课程的学生学号、姓名。用嵌套查询

select Sno, Sname from Student where exists (
	select * from SC where Sno = Student.Sno and Cno = '1'
);
-- 注: EXISTS 关键字在 SQL 中用于检查子查询是否至少会返回一行数据,它通常与相关子查询一起使用。

④ 引出子查询的谓词

  1. 带有IN谓词的子查询

【例】查询选修了课程名为“信息系统”的学生学号和姓名

-- 最后在Student表中根据这个学生的学号取到相关学生的姓名
select Sno, Sname from Student where Sno in (
    -- 然后根据所找到的课程号在SC中算选出选修了3号课程的学生学号
	select Sno from SC where Cno in (
        -- 首先在Course表中找出课程名为 "信息系统" 的课程号
        select Cno from Course where Cname = '信息系统'
    )
);
  • 连接查询
select Sno, Sname from Student, SC, Course 
		where Student.Sno = SC.Sno and SC.cno = Course.cno
		and Course.Cname = '信息系统'
  1. 带有比较运算符的子查询

【例】查询与 “刘晨” 在同一个系学习的学生

select Sno, Sname, Sdept from Student where Sdept = (
	select Sdept from Student where Sname = '刘晨'
);
  1. 带有ANY或ALL谓词的子查询
  • ANY:任意一个值

  • ALL:所有值

需要配合使用比较运算符:
    > ANY	大于子查询结果中的某个值       
     > ALL	大于子查询结果中的所有值
    < ANY	小于子查询结果中的某个值    
    < ALL	小于子查询结果中的所有值
    >= ANY	大于等于子查询结果中的某个值    
    >= ALL	大于等于子查询结果中的所有值
    <= ANY	小于等于子查询结果中的某个值    
    <= ALL	小于等于子查询结果中的所有值
    = ANY	等于子查询结果中的某个值        
    =ALL	等于子查询结果中的所有值(通常没有实际意义)
    !=(或<>ANY	不等于子查询结果中的某个值
    !=(或<>ALL	不等于子查询结果中的任何一个值

【例】查询其他系中比信息系某一学生年龄小的学生姓名和年龄

select Sname, Sage from Student where Sage < any(
	select Sage from Student where Sdept = 'IS'
) and Sdept <> 'IS';
  1. 带有EXISTS谓词的子查询

exists作为 where 条件时,是先对where 前的主查询进行查询,然后用主查询的结果一个一个的代入exists的子查询进行判断,如果为真则输出当前这一条主查询的结果,否则不输出

  • 存在量词
  • 带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”
    • 若内层查询结果 非空,则返回真值
    • 若内层查询结果为 ,则返回假值

例1:查询所有选修了1号课程的学生姓名

-- 嵌套查询
select sname from Student where exists (
	select * from SC where sno = Student.sno and cno = '1';
);
-- 连接查询
select sname from Student, SC where Student.sno = SC.sno and cno = '1';

例2:查询没有选修了1号课程的学生姓名

select sname from Student where not exists (
	select * from SC where sno = Student.sno and cno = '1';
);

例3:查询与“刘晨”在同一个系学习的学生

-- 不相关子查询
select Sno, Sname, Sdept from Student where Sdept in (
    select Sdept from Student where Sname = '刘晨';
)
-- 带EXISTS谓词的子查询替换
select Sno, Sname, Sdept from Student S1 where exists (
	select * from Student S2 where S2.Sdept = S1.Sdept and S2.Sname = '刘晨'
);

效率对比

  • 不相关子查询 > 相关子查询 > 连接查询
  • 由于带EXISTS量词的相关子查询只关心【内层查询是否有返回值】,并不需要查具体值,因此其效率并不一定低于其他形式的查询

例4:查询选修了课程的学生姓名

-- Way1:
select Sname from Student where exists (
	select * from SC where Sno = Student.Sno
);
-- Way2:
select Sname from Student, SC where Student.Sno = SC.Sno;
-- Way3:
select Sname from Student where sno in (
	select distinct sno from sc
);

例5:查询选修了全部课程的学生姓名

-- 查询没有出现不选所有课的学生
select Sname from Student where not exists (
    select * from Course where not exists (
    	select * from SC where Sno = Student.Sno and Cno = Course.cno
    )
);

例6:查询至少选修了学生19002选修的全部课程的学生号码

-- 不存在这样的课程y, 学生19002选了,但是学生x却没有选
select distinct Sno from SC SCX where not exists (
	select * from SC SCY where SCY.Sno = '19002' and not exists (
    	select * from SC SCZ where SCZ.Sno = SCX.Sno and SCZ.Cno = SCY.Cno
    )
);

4、集合查询

① 并操作(union)

<查询块>
	 UNION
<查询块>
-- 参加UNION操作的各结果表的列数必须相同; 对应项的数据类型也必须相同

例1:查询计算机科学系的学生及年龄不大于19岁的学生

-- way1: 并
select * from Student where Sdept = 'CS' union 
	select * from Student where Sage <= 19;
-- way2: 或
select distinct from Student where Sdept = 'CS' or Sage < 19;

例2:查询学校中所有师生的姓名

select Sname from Student union
	select Sname from Teacher;

② 交操作(intersect)

例1:查询选修课程1的学生集合与选修课程2的学生集合的交集

-- 使用insersect
select Sno from SC where Cno = '1' intersect
	select Sno from SC where Cno = '2';
-- 用 in 谓词
select Sno from SC where Cno = '1' and Sno in (
	select Sno from SC where Cno = '2'
)

例2:查询学生姓名与教师姓名的交集

-- 使用insersect
select distinct Sname from Student intersect
	select distinct Sname from Teacher;
-- 用 in 谓词
select distinct from Student where Sname in (
	select Sname from Teacher;
)

③ 差操作(except, minus)

例1:查询学生姓名与教师姓名的差 ——> 查询学校中未与教师同名的学生姓名

-- 使用except
select distinct Sname from Student except
	select distinct Sname from Teacher;
-- 用 in 谓词
select distinct from Student where Sname not in (
	select Sname from Teacher;
)

④ 对集合操作结果的排序

任何情况下,ORDER BY子句只能出现在最后

5、小结

SELECT [ALL|DISTINCT] <目标列表达式>
           [别名] [<目标列表达式> [别名]]FROM <表名或视图名> [别名] 
           [<表名或视图名> [别名]][WHERE <条件表达式>]
[GROUP BY <列名1>[<列名1>] ...
		   [HAVING <条件表达式>]]
[ORDER BY <列名2> [ASC|DESC] 
           [<列名2> [ASC|DESC] ]];

在这里插入图片描述

  • 56
    点赞
  • 93
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 71
    评论
前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL之间的特性差异 1.5.6. MaxDB和MySQL之间的协同性 1.5.7. 与MaxDB有关的链接 1.6. MySQL发展大事记 1.6.1. MySQL 5.1的新特性 1.7. MySQL信息源 1.7.1. MySQL邮件列表 1.7.2. IRC(在线聊天系统)上的MySQL社区支持 1.7.3. MySQL论坛上的MySQL社区支持 1.8. MySQL标准的兼容性 1.8.1. MySQL遵从的标准是什么 1.8.2. 选择SQL模式 1.8.3. 在ANSI模式下运行MySQL 1.8.4. MySQL对标准SQL的扩展 1.8.5. MySQL与标准SQL的差别 1.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装问题 2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装的MySQL分发版 2.1.3. 怎样获得MySQL 2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动MySQL 2.3.13. 测试MySQL安装 2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从源码安装MySQL 2.8.7. 在Windows下编译MySQL客户端 2.9. 安装后的设置和测试 2.9.1. Windows下安装后的过程 2.9.2. Unix下安装后的过程 2.9.3. 使初始MySQL账户安全 2.10. 升级MySQL 2.10.1. 从5.0版升级 2.10.2. 升级授权表 2.10.3. 将MySQL数据库拷贝到另一台机器 2.11. 降级MySQL 2.12. 具体操作系统相关的注意事项 2.12.1. Linux注意事项 2.12.2. Mac OS X注意事项 2.12.3. Solaris注意事项 2.12.4. BSD注意事项 2.12.5. 其它Unix注意事项 2.12.6. OS/2注意事项 2.13. Perl安装注意事项 2.13.1. 在Unix中安装Perl 2.13.2. 在Windows下安装ActiveState Perl 2.13.3. 使用Perl DBI/DBD接口的问题 3. 教程 3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2. 显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL服务器启动脚本 5.1.4. mysql.server:MySQL服务器启动脚本 5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 5.2.4. MySQL实例管理器配置文件 5.2.5. MySQL实例管理器识别的命令 5.3. mysqld:MySQL服务器 5.3.1. mysqld命令行选项 5.3.2. SQL服务器模式 5.3.3. 服务器系统变量 5.3.4. 服务器状态变量 5.4. mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全问题 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. LOAD DATA LOCAL安全问题 5.7. MySQL访问权限系统 5.7.1. 权限系统的作用 5.7.2. 权限系统工作原理 5.7.3. MySQL提供的权限 5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 5.8.3. 从MySQL删除用户账户 5.8.4. 限制账户资源 5.8.5. 设置账户密码 5.8.6. 使你的密码安全 5.8.7. 使用安全连接 5.9. 备份与恢复 5.9.1. 数据库备份 5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 5.10.1. 数据和排序用符集 5.10.2. 设置错误消息语言 5.10.3. 添加新的符集 5.10.4. 符定义数组 5.10.5. 符串比较支持 5.10.6. 多符支持 5.10.7. 符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制实施细节 6.3.1. 复制主线程状态 6.3.2. 复制从I/O线程状态 6.3.3. 复制从SQL线程状态 6.3.4. 复制传递和状态文件 6.4. 如何设置复制 6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的Auto-Increment 7. 优化 7.1. 优化概述 7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化DISTINCT 7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. DELETE语句的速度 7.2.19. 其它优化技巧 7.3. 锁定事宜 7.3.1. 锁定方法 7.3.2. 表锁定事宜 7.4. 优化数据库结构 7.4.1. 设计选择 7.4.2. 使你的数据尽可能小 7.4.3. 列索引 7.4.4. 多列索引 7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:生成压缩、只读MyISAM表 8.3. mysqlMySQL命令行工具 8.3.1. 选项 8.3.2. mysql命令 8.3.3. 怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. mysqlshow-显示数据库、表和列信息 8.12. myisamlog:显示MyISAM日志文件内容 8.13. perror:解释错误代码 8.14. replace:符串替换实用工具 8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文值 9.1.1. 符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留的处理 10. 符集支持 10.1. 常规符集和校对 10.2. MySQL中的符集和校对
前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 1.4.1. MySQL的历史 1.4.2. MySQL的的主要特性 1.4.3. MySQL稳定性 1.4.4. MySQL表最大能达到多少 1.4.5. 2000年兼容性 1.5. MaxDB数据库管理系统概述 1.5.1. 什么是MaxDB? 1.5.2. MaxDB的历史 1.5.3. MaxDB的特性 1.5.4. 许可和支持 1.5.5. MaxDB和MySQL之间的特性差异 1.5.6. MaxDB和MySQL之间的协同性 1.5.7. 与MaxDB有关的链接 1.6. MySQL发展大事记 1.6.1. MySQL 5.1的新特性 1.7. MySQL信息源 1.7.1. MySQL邮件列表 1.7.2. IRC(在线聊天系统)上的MySQL社区支持 1.7.3. MySQL论坛上的MySQL社区支持 1.8. MySQL标准的兼容性 1.8.1. MySQL遵从的标准是什么 1.8.2. 选择SQL模式 1.8.3. 在ANSI模式下运行MySQL 1.8.4. MySQL对标准SQL的扩展 1.8.5. MySQL与标准SQL的差别 1.8.6. MySQL处理约束的方式 2. 安装MySQL 2.1. 一般安装问题 2.1.1. MySQL支持的操作系统 2.1.2. 选择要安装的MySQL分发版 2.1.3. 怎样获得MySQL 2.1.4. 通过MD5校验和或GnuPG验证软件包的完整性 2.1.5. 安装布局 2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装Zip文件安装MySQL 2.3.7. 提取安装档案文件 2.3.8. 创建选项文件 2.3.9. 选择MySQL服务器类型 2.3.10. 首次启动服务器 2.3.11. 从Windows命令行启动MySQL 2.3.12. 以Windows服务方式启动MySQL 2.3.13. 测试MySQL安装 2.3.14. 在Windows环境下对MySQL安装的故障诊断与排除 2.3.15. 在Windows下升级MySQL 2.3.16. Windows版MySQL同Unix版MySQL对比 2.4. 在Linux下安装MySQL 2.5.在Mac OS X中安装MySQL 2.6. 在NetWare中安装MySQL 2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从源码安装MySQL 2.8.7. 在Windows下编译MySQL客户端 2.9. 安装后的设置和测试 2.9.1. Windows下安装后的过程 2.9.2. Unix下安装后的过程 2.9.3. 使初始MySQL账户安全 2.10. 升级MySQL 2.10.1. 从5.0版升级 2.10.2. 升级授权表 2.10.3. 将MySQL数据库拷贝到另一台机器 2.11. 降级MySQL 2.12. 具体操作系统相关的注意事项 2.12.1. Linux注意事项 2.12.2. Mac OS X注意事项 2.12.3. Solaris注意事项 2.12.4. BSD注意事项 2.12.5. 其它Unix注意事项 2.12.6. OS/2注意事项 2.13. Perl安装注意事项 2.13.1. 在Unix中安装Perl 2.13.2. 在Windows下安装ActiveState Perl 2.13.3. 使用Perl DBI/DBD接口的问题 3. 教程 3.1. 连接与断开服务器 3.2. 输入查询 3.3. 创建并使用数据库 3.3.1. 创建并选择数据库 3.3.2. 创建表 3.3.3. 将数据装入表中 3.3.4. 从表检索信息 3.4. 获得数据库和表的信息 3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. 根据两个键搜索 3.6.8. 根据天计算访问量 3.6.9. 使用AUTO_INCREMENT 3.7. 孪生项目的查询 3.7.1. 查找所有未分发的孪生项 3.7.2. 显示孪生对状态的表 3.8. 与Apache一起使用MySQL 4. MySQL程序概述 4.1. MySQL程序概述 4.2. 调用MySQL程序 4.3. 指定程序选项 4.3.1. 在命令行上使用选项 4.3.2. 使用选项文件 4.3.3. 用环境变量指定选项 4.3.4. 使用选项设置程序变量 5. 数据库管理 5.1. MySQL服务器和服务器启动脚本 5.1.1. 服务器端脚本和实用工具概述 5.1.2. mysqld-max扩展MySQL服务器 5.1.3. mysqld_safe:MySQL服务器启动脚本 5.1.4. mysql.server:MySQL服务器启动脚本 5.1.5. mysqld_multi:管理多个MySQL服务器的程序 5.2. mysqlmanager:MySQL实例管理器 5.2.1. 用MySQL实例管理器启动MySQL服务器 5.2.2. 连接到MySQL实例管理器并创建用户账户 5.2.3. MySQL实例管理器命令行选项 5.2.4. MySQL实例管理器配置文件 5.2.5. MySQL实例管理器识别的命令 5.3. mysqld:MySQL服务器 5.3.1. mysqld命令行选项 5.3.2. SQL服务器模式 5.3.3. 服务器系统变量 5.3.4. 服务器状态变量 5.4. mysql_fix_privilege_tables:升级MySQL系统表 5.5. MySQL服务器关机进程 5.6. 一般安全问题 5.6.1. 通用安全指南 5.6.2. 使MySQL在攻击者面前保持安全 5.6.3. Mysqld安全相关启动选项 5.6.4. LOAD DATA LOCAL安全问题 5.7. MySQL访问权限系统 5.7.1. 权限系统的作用 5.7.2. 权限系统工作原理 5.7.3. MySQL提供的权限 5.7.4. 与MySQL服务器连接 5.7.5. 访问控制, 阶段1:连接核实 5.7.6. 访问控制, 阶段2:请求核实 5.7.7. 权限更改何时生效 5.7.8. 拒绝访问错误的原因 5.7.9. MySQL 4.1中的密码哈希处理 5.8. MySQL用户账户管理 5.8.1. MySQL用户名和密码 5.8.2. 向MySQL增加新用户账户 5.8.3. 从MySQL删除用户账户 5.8.4. 限制账户资源 5.8.5. 设置账户密码 5.8.6. 使你的密码安全 5.8.7. 使用安全连接 5.9. 备份与恢复 5.9.1. 数据库备份 5.9.2. 示例用备份与恢复策略 5.9.3. 自动恢复 5.9.4. 表维护和崩溃恢复 5.9.5. myisamchk:MyISAM表维护实用工具 5.9.6. 建立表维护计划 5.9.7. 获取关于表的信息 5.10. MySQL本地化和国际应用 5.10.1. 数据和排序用符集 5.10.2. 设置错误消息语言 5.10.3. 添加新的符集 5.10.4. 符定义数组 5.10.5. 符串比较支持 5.10.6. 多符支持 5.10.7. 符集问题 5.10.8. MySQL服务器时区支持 5.11. MySQL日志文件 5.11.1. 错误日志 5.11.2. 通用查询日志 5.11.3. 二进制日志 5.11.4. 慢速查询日志 5.11.5. 日志文件维护 5.12. 在同一台机器上运行多个MySQL服务器 5.12.1. 在Windows下运行多个服务器 5.12.2. 在Unix中运行多个服务器 5.12.3. 在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中的复制 6.1. 复制介绍 6.2. 复制实施概述 6.3. 复制实施细节 6.3.1. 复制主线程状态 6.3.2. 复制从I/O线程状态 6.3.3. 复制从SQL线程状态 6.3.4. 复制传递和状态文件 6.4. 如何设置复制 6.5. 不同MySQL版本之间的复制兼容性 6.6. 升级复制设置 6.6.1. 将复制升级到5.0版 6.7. 复制特性和已知问题 6.8. 复制启动选项 6.9. 复制FAQ 6.10. 复制故障诊断与排除 6.11. 通报复制缺陷 6.12. 多服务器复制中的Auto-Increment 7. 优化 7.1. 优化概述 7.1.1. MySQL设计局限与折衷 7.1.2. 为可移植性设计应用程序 7.1.3. 我们已将MySQL用在何处? 7.1.4. MySQL基准套件 7.1.5. 使用自己的基准 7.2. 优化SELECT语句和其它查询 7.2.1. EXPLAIN语法(获取SELECT相关信息) 7.2.2. 估计查询性能 7.2.3. SELECT查询的速度 7.2.4. MySQL怎样优化WHERE子句 7.2.5. 范围优化 7.2.6. 索引合并优化 7.2.7. MySQL如何优化IS NULL 7.2.8. MySQL如何优化DISTINCT 7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN 7.2.10. MySQL如何优化嵌套Join 7.2.11. MySQL如何简化外部联合 7.2.12. MySQL如何优化ORDER BY 7.2.13. MySQL如何优化GROUP BY 7.2.14. MySQL如何优化LIMIT 7.2.15. 如何避免表扫描 7.2.16. INSERT语句的速度 7.2.17. UPDATE语句的速度 7.2.18. DELETE语句的速度 7.2.19. 其它优化技巧 7.3. 锁定事宜 7.3.1. 锁定方法 7.3.2. 表锁定事宜 7.4. 优化数据库结构 7.4.1. 设计选择 7.4.2. 使你的数据尽可能小 7.4.3. 列索引 7.4.4. 多列索引 7.4.5. MySQL如何使用索引 7.4.6. MyISAM键高速缓冲 7.4.7. MyISAM索引统计集合 7.4.8. MySQL如何计算打开的表 7.4.9. MySQL如何打开和关闭表 7.4.10. 在同一个数据库中创建多个表的缺陷 7.5. 优化MySQL服务器 7.5.1. 系统因素和启动参数的调节 7.5.2. 调节服务器参数 7.5.3. 控制查询优化器的性能 7.5.4. 编译和链接怎样影响MySQL的速度 7.5.5. MySQL如何使用内存 7.5.6. MySQL如何使用DNS 7.6. 磁盘事宜 7.6.1. 使用符号链接 8. 客户端和实用工具程序 8.1. 客户端脚本和实用工具概述 8.2. myisampack:生成压缩、只读MyISAM表 8.3. mysqlMySQL命令行工具 8.3.1. 选项 8.3.2. mysql命令 8.3.3. 怎样从文本文件执行SQL语句 8.3.4. mysql技巧 8.4. mysqlaccess:用于检查访问权限的客户端 8.5. mysqladmin:用于管理MySQL服务器的客户端 8.6. mysqlbinlog:用于处理二进制日志文件的实用工具 8.7. mysqlcheck:表维护和维修程序 8.8. mysqldump:数据库备份程序 8.9. mysqlhotcopy:数据库备份程序 8.10. mysqlimport:数据导入程序 8.11. mysqlshow-显示数据库、表和列信息 8.12. myisamlog:显示MyISAM日志文件内容 8.13. perror:解释错误代码 8.14. replace:符串替换实用工具 8.15. mysql_zap:杀死符合某一模式的进程 9. 语言结构 9.1. 文值 9.1.1. 符串 9.1.2. 数值 9.1.3. 十六进制值 9.1.4. 布尔值 9.1.5. 位段值 9.1.6. NULL值 9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留的处理 10. 符集支持 10.1. 常规符集和校对 10.2. MySQL中的符集和校对 10.3. 确定默认符集和校对 10.3.1. 服务器符集和校对 10.3.2. 数据库符集和校对 10.3.3. 表符集和校对 10.3.4. 列符集和校对 10.3.5. 符集和校对分配示例 10.3.6. 连接符集和校对 10.3.7. 符串文符集和校对 10.3.8. 在SQL语句中使用COLLATE 10.3.9. COLLATE子句优先 10.3.10. BINARY操作符 10.3.11. 校对确定较为复杂的一些特殊情况 10.3.12. 校对必须适合符集 10.3.13. 校对效果的示例 10.4. 符集支持影响到的操作 10.4.1. 结果符串 10.4.2. CONVERT() 10.4.3. CAST() 10.4.4. SHOW语句 10.5. Unicode支持 10.6. 用于元数据的UTF8 10.7. 与其它DBMS的兼容性 10.8. 新符集配置文件格式 10.9. 国家特有符集 10.10. MySQL支持的符集和校对 10.10.1. Unicode符集 10.10.2. 西欧符集 10.10.3. 中欧符集 10.10.4. 南欧与中东符集 10.10.5. 波罗的海符集 10.10.6. 西里尔符集 10.10.7. 亚洲符集 11. 列类型 11.1. 列类型概述 11.1.1. 数值类型概述 11.1.2. 日期和时间类型概述 11.1.3. 符串类型概述 11.2. 数值类型 11.3. 日期和时间类型 11.3.1. DATETIME、DATE和TIMESTAMP类型 11.3.2. TIME类型 11.3.3. YEAR类型 11.3.4. Y2K事宜和日期类型 11.4. String类型 11.4.1. CHAR和VARCHAR类型 11.4.2. BINARY和VARBINARY类型 11.4.3. BLOB和TEXT类型 11.4.4. ENUM类型 11.4.5. SET类型 11.5. 列类型存储需求 11.6. 选择正确的列类型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 71
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烽起黎明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值