系统管理 ">系统管理
mysql 服务 ">启动 MySQL 服务
通过 windows 服务管理器启动 MySQL 服务
开始 -->运行 -->输入 services.msc 命令 -->启动 MySQL 服务
通过 DOS 命令启动 MySQL 服务
net start mysql
停止 MySQL 服务
通过 windows 服务管理器启动 MySQL 服务
开始 -->运行 -->输入 services.msc 命令 -->停止 MySQL 服务
通过 DOS 命令停止 MySQL 服务
net stop mysql
数据库 ">登录 MySQL 数据库
通过 DOS 命令来登陆:
mysql -h 主机的地址 -u 用户名 -p 密码
使用 MySQL Command Line Client 登录, 它在你安装 MySQL 的目录中
数据库的基本操作
创建数据库的语法格式:
create databases 数据库名称 ;
例: 创建一个名称为 xiaoxu 的数据库, SQL 语句如下:
create databases xiaoxu ;
查看数据库的语法格式:
show databases ;
查看某个已创建好的数据库的语法格式:
show create databases 数据库名称 ;
修改数据库编码的语法格式:
alter database 数据库名称 default character set 编码方式 collate 编码方式_bin ;
例: 将数据库 xiaoxu 的编码修改为 gbk,SQL 语句如下所示:
alter database xiaoxu default character set gbk collate gbk_bin ;
删除数据库的语法格式:
drop database 数据库名称 ;
数据表的基本操作
创建数据表语法格式:
create table 表名
{字段名 1, 数据类型[完整性约束条件],
字段名 2, 数据类型[完整性约束条件],
...
字段名 n, 数据类型[完整性约束条件],
}
查看数据表的语法格式:
show create table 表名 ;
或者
describe 表名 ;
简写为
desc 表名 ;
修改数据表:
1. 修改表名的语法格式:
alter table 旧表名 rename [to] 新表名 ;
2. 修改字段名的语法格式
alter table 表名 change 旧字段名 新字段名 新数据类型 ;
例: 将数据表 grade 中的 name 字段改为 username, 数据类型保持不变
alter table grade change name username varchar(20) ;
3. 修改字段的数据类型的语法格式
alter table 表名 modify 字段名 数据类型 ;
例: 将数据表 grade 中的 id 字段的数据类型由 int(11)修改为 int(20)
alter table grade modify id int(20) ;
4. 添加字段的语法格式
alter table 表名 add 新字段名 数据类型
[约束条件] [FIRST|AFTER 已存在的字段名]
例: 将数据表 grade 中添加一个没有约束条件的 int 类型的字段 age.
alter table grade add age int(10) ;
5. 删除字段的语法格式:
alter table 表名 drop 字段名 ;
6. 修改字段的排列位置的语法格式:
alter table 表名 modify 字段名 1 数据类型 first|after 字段名 2
例 1: 将数据表 grade 的 username 字段修改为表的第一个字段
alter table grade modify username varchar(20) first ;
例 2: 将数据表 grade 的 id 字段插入到 grade 字段后面
alter table grade modify id int(20) after grade ;
7. 删除数据表的语法格式
drop table 表名 ;
添加, 更新与删除数据的操作
添加数据
1. 在表中, 为所有字段添加数据的 insert 语句有两种, 分别如下:
insert 语句中指定所有字段名, 其语法语法格式
insert into 表名(字段名 1, 字段名 2, ...)
value(值 1, 值 2, ...)
例: 向 student 表中添加一条新记录, 记录中 id 字段的值为 1,name 字段的值为'zhangsan',grade 字段的值为 98.5
假设已创建如下表:
- create table student(
- id int(4),
- name varchar(20) not null,
- grade float
- );
向 student 表中插入一条数据, 代码如下所示
- insert into student(id,name,grade)
- values(1,'zhangsan',98.5);
insert 语句中不指定字段名, 其语法格式
insert into 表名 values(值 1, 值 2, ...)
注意: 由于 insert 语句中没有指定字段名, 添加值的顺序, 必须和字段在表中已经定义的顺序相同
例: 向已添加纪录的 student 表中添加一条新记录, 记录中 id 字段的值为 3,name 字段的值为'wangwu',grade 字段的值为 61.5, 可参考第一种方法的例子
- insert into student
- values(3,'wangwu',61.5)
2. 为表中的指定字段添加数据, 其语法格式
insert into 表名(字段名 1, 字段 2, ...)
values(值 1, 值 2, ...)
例: 向 student 表中添加一条新记录, 记录中 id 字段的值为 4,name 字段的值为 "zhaoliu",grade 字段不指定值
- insert into student(id,name)
- values(4,'zhaoliu') ;
insert 语句的其它用法:
为表中指定的字段或者全部字段添加数据, 其语法格式
insert into 表名
set 字段名 1 = 值 1 [, 字段名 2 = 值 2, ...]
例: 向 student 表中添加一条新记录, 该条记录中 id 字段的值为 5,name 字段的值为'boya',grade 字段的值为 99
- insert into student
- set id = 5, name = 'boya', grade = 99 ;
为表中同时添加多条记录, 其语法格式
insert into 表名 [(字段名 1, 字段名 2, ...)]
- values(值 1, 值 2, ...),(值 1, 值 2, ...),
- ...
- (值 1, 值 2, ...) ;
例: 向 student 表中添加三条新记录.
假设已创建如下表:
- create table student(
- id int(4),
- name varchar(20) not null,
- grade float
- );
添加新记录如下
- insert into student
- values (6,'lilei',99),
- (7,'hanmeimei',100),
- (8,'poly',40.5) ;
更新数据
更新表中的记录, 其语法格式
update 表名
set 字段名 1 = 值 1 [, 字段名 2 = 值 2, ...]
[where 条件表达式]
update 更新部分数据
更新 student 标准那个 id 字段值为 1 的记录, 将记录中的 name 字段的值更改为'caocao',grade 字段的值更改为 50.
在更新数据前, 首先使用查询语句查看 id 字段值为 1 的记录, 执行结果如下
- select * from student
- where id = 1 ;
更新结果如下
- select * from student
- set name = 'caocao', grade = 50
- where id = 1 ;
例 2: 更新 student 表中 id 字段值小于 4 的记录, 将这些记录的 grade 字段值都更新为 100.
在更新数据前, 首先使用查询语句查看 id 字段值小于 4 的记录, 执行结果如下
- select * from student
- where id <4 ;
更新结果如下
- update student
- set grade = 100
- where id < 4 ;
update 更新全部数据
例: 更新 student 表中全部记录, 将 grade 字段值都更新为 80
- update student
- set grade = 80 ;
删除数据
删除数据有两种方法:
第一种: delete 语句
删除表中的记录, 其语法格式
delete from 表名 [where 条件表达式]
delete 删除部分数据
例: 在 student 表中, 删除 id 字段值为 11 的记录.
在删除之前, 首先使用查询语句查看 id 字段值为 11 的记录, 执行结果如下
- select * from student
- where id = 11 ;
delete 删除全部数据
在 delete 语句中, 若没用使用 where 子句, 则会将表中的所有记录都删除
例: 删除 student 表中的所有记录.
delete from student ;
第二种: truncate 语句
truncate [table] 表名
例: 删除 student 表中的所有记录
"hljs sql">truncate table student ;
delete 语句 truncate 语句的异同点
相同点: 都能删除表中的所有数据的功能.
不同点:
delte 语句:
delete 语句是 DML 语句;
delete 语句后面可以跟 where 子句, 通过指定 where 子句中的条件表达式只删除满足条件的记录;
delete 语句删除表中所有记录后, 再次向表中添加记录时, 自动增加字段的值为删除时该字段的最大增加 1;
使用 delete 语句时, 每删除一条记录都会在日志中记录.
truncate 语句:
truncate 语句通常被认为是 DDL 语句;
truncate 语句只能用于删除表中的所有记录;
truncate 语句删除表中的数据后, 再次向表中添加记录时, 自动增加字段的默认初始值重新由 1 开始;
使用 truncate 语句时, 不会在日志中记录删除的内容, 因此 truncate 语句的执行效率比 delete 语句高.
查询数据
简单查询
select 语句的语法格式如下
"hljs sql">select [distinct] *| {字段名 1, 字段名 2, 字段名 3, ...}
from 表名
[where 条件表达式 1]
[group by 字段名 [having 条件表达式 2]]
[order by 字段名 [asc|desc]]
[limit [offset] 记录数]
查询所有字段有两种方法
第一种:
在 select 语句中列出所有字段名来查询表中的数据, 其语法格式
"hljs sql">select 字段名 1, 字段名 2, ... from 表名 ;
第二种:
使用星号 ("*") 通配符来代替所有的字段名, 其语法格式如下
"hljs sql">select * from student ;
查询指定字段, 其语法格式如下
"hljs sql">select 字段名 1, 字段名 2, ... from 表名 ;
按条件查询
带关系运算符的查询
在 select 语句中, 最常见的是使用 where 子句指定查询条件对数据进行过滤, 其语法格式如下
"hljs sql">select 字段名 1, 字段名 2, ...
from 表名
where 条件表达式 ;
常见的关系运算符如下表所示
关系运算符 | 说明 | 关系运算符 | 说明 |
---|---|---|---|
= | 等 于 | <= | 小于等于 |
< > | 不等于 | > | 大 于 |
!= | 不等于 | >= | 大于等于 |
< |
例: 查询 student 表中 grade 大于 80 的学生姓名.
"hljs sql">select name, grade from student where grade> 80;
带 in 关键字的查询
in 关键字用于判断某个字段的值是否在指定集合中, 若字段的值在集合中, 则满足条件, 该字段所在的记录将被查询出来. 其语法格式如下
"hljs sql">select * | 字段名 1, 字段名 2, ...
from 表名
where 字段名 [not] in (元素 1, 元素 2, ...)
说明: 在上面的语法格式中,"元素 1, 元素 2, ..." 表示集合众的元素, 即指定的条件范围. not 是可选参数, 使用 not 表示查询不在 in 关键字指定集合范围中的记录.
例: 查询 student 表中 id 值为 1,2,3 的记录.
"hljs sql">select id, grade, name, gender from student where id in (1,2,3) ;
带 between and 关键字的查询
between and 用于判断某个字段的值是否在指定的范围之内, 其语法格式如下
"hljs sql">select *|{字段名 1, 字段名 2, ...}
from 表名
where 字段名 [not] between 值 1 and 值 2 ;
说明: 在上面的语法格式中,"值 1" 表示范围条件的起始值,"值 2" 表示范围条件的结束值. not 是可选参数, 使用 not 表示查询指定范围之外的记录, 通常情况下,"值 1" 小于 "值 2", 否则查询不到任何结果.
例: 查询 student 表中 id 值在 2~5 之间的学生姓名.
"hljs sql">select id, name from student where id between 2 and 5 ;
空值查询
在数据表中, 某些列的值可能为空值(null), 空值不同于 0, 也不同于空字符串. 在 MySQL 语句中, 使用 is null 关键字来判断字段的值是否为空值, 其语法格式如下
"hljs sql">select *| 字段名 1, 字段名 2, ...
from 表名
where 字段名 is [not] null ;
例: 查询 student 表中 gender 为空值的记录.
"hljs sql">select id, name, grade, gender from student where gender is null ;
带 distinct 关键字的查询
很多表中某些字段的数据存在重复的值. 有时, 需要过滤掉查询记录中重复的值, 可以使用 distinct 关键字来实现这种功能, 其语法格式如下
"hljs sql">select distinct 字段名 from 表名 ;
说明:"字段名" 表示要过滤重复记录的字段
例: 查询 student 表中 gender 字段的值, 查询记录不能重复.
"hljs sql">select distinct gender from student ;
distinct 关键字还可以作用于多个字段, 其语法格式如下
"hljs sql">select distinct 字段名 1, 字段名 2, ...
from 表名 ;
说明: 只有 distinct 关键字指定的多个字段值都相同, 才会被认作是重复记录
例: 查询 student 表中的 gender 和 name 字段, 使用 distinct 关键字作用于这两个字段.
"hljs sql">select distinct gender, name, from student ;
带 like 关键字的查询
like 关键字可以判断连个字符串是否相匹配, 其语法格式如下
"hljs sql">select *|{字段名 1, 字段名 2, ...}
from 表名
where 字段名 [not] like '匹配字符串' ;
说明:"匹配字符串" 指定用来匹配的字符串, 其值可以是一个普通字符串, 也可以是包含百分号 (%) 和下划线 (_) 的通配字符串. 百分号和下划线统称为通配符.
百分号 (%) 通配符
百分号通配符能匹配任意长度的字符串, 包括空字符串. 例如, 字符串 "c%" 匹配以字符 c 开始, 任意长度的字符串, 如 "ct","cut","current" 等等.
例 1: 查找 student 表中 name 字段值以字段 "s" 开头的学生 id.
"hljs sql">select id, name, from student where name like "s%" ;
说明 1: 百分号通配符可以出现在通配字符串的任意位置
例 2: 查询 student 表中 name 字段值以字符 "w" 开始, 以字符 "g" 结束的学生 id.
"hljs sql">select id, name, from student where name like 'w%g' ;
说明 2: 在通配字符串中可以出现多个百分号通配符
例: 查询 student 表中 name 字段值包含字符 "y" 的学生 id.
"hljs sql">select id, name from student where name like '%y%' ;
下划线 (_) 通配符
下划线通配符与百分号通配符有些不同, 下划线通配符只匹配单个字符. 若要匹配多个字符, 需要使用多个下划线通配符.
注意: 若使用多个下划线匹配多个连续的字符, 下划线之间不能有空格
例 1: 查询 student 表中 name 字段值以字符串 "wu" 开始, 以字符串 "ong" 结束, 并且两个字符串之间只有一个字符的记录.
"hljs sql">select * from student where name like "wu_ong" ;
例 2: 查询 student 表中 name 字段值包含 7 个字符, 并且以字符串 "ing" 结束的记录.
"hljs sql">select * from student where name like '____ing' ;
百分号和下划线通配符进行的查询操作
注意: 若要匹配字符串中的百分号和下划线, 则使用右斜线 ("\") 对百分号和下划线进行转义
例: 查询 student 表中 name 字段值包括 "%" 的记录.
假设 student 表中以存在如下记录
- "hljs sql">insert into student(name, grade, gender)
- values('sun%er', 95, '男') ;
带 and 关键字的多条件查询
在使用 select 语句中, 有时为了使查询结果更加精确, 可以使用多个查询条件, 其语法格式如下
"hljs sql">select *|{字段名 1, 字段名 2, ...}
from 表名
where 条件表达式 1 and 条件表达式 2 [... and 条件表达式 n] ;
例: 查询 student 表中 id 字段值小于 5, 并且 gender 字段值为 "女" 的学生姓名.
"hljs sql">select id, name, gender from student where id <5 and gender = '女' ;
带 or 关键字的多条件查询
在使用 or 关键字时, 只要记录满足任意一个条件就会被查询出来, 其语法格式如下
"hljs sql">select *|{字段名 1, 字段名 2, ...}
from 表名
where 条件表达式 1 or 条件表达式 2 [... or 条件表达式 n] ;
例: 查询 student 表中 id 字段值小于 3 或者 gender 字段值为 "女" 的学生姓名.
"hljs sql">select id, name,gender from student where id <3 or gender = '女' ;
or 和 and 关键字一起使用的情况
注意: and 的优先级高于 or
例: 查询 student 表中 gender 字段值为 "女" 或者 gender 字段值为 "男", 并且 grade 字段值为 100 的学生姓名.
- "hljs sql">select name, grade, gender
- from student
- where gender = '女' or gender = '男' and grade = 100 ;
高级查询
聚合函数
实际开发中, 经常需要对某些数据进行统计, 例如统计某个字段的最大值, 最小值, 平均值等.
函数名称 | 作用 | 函数名称 | 作用 |
---|---|---|---|
count() | 返回某列的行数 | max() | 返回某列的最大值 |
sum() | 返回某列值的和 | min() | 返回某列的最小值 |
avg() | 返回某列的平均值 |
以上表中的函数对一组值进行统计, 并返回唯一值, 这些函数被称为聚合函数.
count()函数
count()函数用来统计记录的条数, 其语法格式如下
"hljs sql">select count (*) from 表名 ;
例: 查询 student 表中一共有多少条记录
"hljs sql">select count(*) from student ;
sum()函数
sum()函数是求和函数, 用于求出表中某个字段所有值的总和, 其语法格式如下
"hljs sql">select sum(字段名) from 表名 ;
例: 求出 student 表中 grade 字段的总和.
"hljs sql">select sum(grade) from student ;
avg()函数
avg()函数用于求出某个字段所有值的平均值, 其语法格式如下
"hljs sql">select avg(字段名) from 表名 ;
例: 求出 student 表中 grade 字段的平均值
"hljs sql">select avg(grade) from student ;
max()函数
max()函数是求最大值的函数, 用于求出某个字段的最大值, 其语法格式如下
"hljs sql">select max(字段名) from 表名 ;
例: 求出 student 表中 grade 字段的最大值
"hljs sql">select max(grade) from student ;
min()函数
min()函数是求最小值的函数, 用于求出某个字段的最小值, 其语法格式如下
"hljs sql">select min(字段名) from 表名 ;
例: 求出 student 表中 grade 字段的最小值
"hljs sql">select min(grade) from student ;
对查询结果排序
使用 order by 对查询结果进行排序, 其语法格式如下
"hljs sql">select 字段名 1, 字段名 2, ...
from 表名
order by 字段名 1[asc|desc], 字段名 2 [asc|desc] ...
说明: 参数 asc 表示按照升序进行排序, desc 表示按照降序进行排序. 默认情况下, 按照 asc 方式进行排序.
例: 查出 student 表中的所有记录, 并使用参数 asc 按照 grade 字段升序方式进行排列.
- "hljs sql">select * from student
- order by grade asc ;
注意: 在按照指定字段进行排序时, 若某条记录的字段值为 null, 则这条记录会在第一条显示, 因为 null 值可以被认为是最小值
分组查询
使用 group by 按某个字段或者多个字段中的值进行分组, 字段中值相同的为一组, 其语法格式如下
"hljs sql">select 字段名 1, 字段名 2, ...
from 表名
group by 字段名 1, 字段名 2, ... [having 条件表达式]
说明: having 关键字指定条件表达式对分组后的内容进行过滤, 需要注意的是, group by 一般和聚合函数一起使用.
由于分组查询比较复杂, 下面分几种情况对分组查询进行详解.
单独使用 group by 分组
单独使用 group by 关键字, 查询的是每个分组中的一条记录.
例: 查询 student 表中的记录, 按照 gender 字段值进行分组.
"hljs sql">select * from student group by gender ;
group by 和聚合函数一起使用
group by 和聚合函数一起使用, 可以统计出某个或者某些字段在一个分组中的最大值, 最小值, 平均值等.
例: 将 student 表按照 gender 字段值进行分组查询, 计算出每个分组中各有多少名学生.
"hljs sql">select count(*), gender from student group by gender ;
结果说明: group by 对 student 表按照 gender 字段中的不同值进行了分组, 并通过 count()函数统计出每个组个数.
group by 和 having 关键字一起使用
例: 将 student 表按照 gender 字段进行分组查询, 查询出 grade 字段值之和小于 300 的分组.
"hljs sql">select sum(grade), gender from student group by gender having sum(grade) <300 ;
having 关键字和 where 关键字的异同点
相同点: 都用于设置条件表达式对查询结果进行过滤
不同点:
having 关键字:
having 关键字后可以跟聚合函数, 通常情况下, having 关键字都和 group by 一起使用, 用于对分组后的结果进行过滤.
where 关键字:
where 关键字不能后跟聚合函数.
使用 limit 限制查询结果的数量
limit 关键字可以指定查询结果从哪一条记录开始以及一共查询多少条信息, 其语法格式如下
"hljs sql">select 字段名 1, 字段名 2, ...
from 表名
limit [offset,]记录数
说明: limit 后面可以跟两个参数, 第一个参数 "offset" 表示偏移量, 若偏移量为 0, 则从查询结果的第一条记录开始; 偏移量为 1, 则从查询结果中的第二条记录开始, 以此类推. offset 为可选值, 若不指定, 其默认值为 0. 第二个参数 "记录数" 表示返回查询记录的条数.
例 1: 查询 student 表中的前 4 条记录.
"hljs sql">select * from student limit 4 ;
例 2: 查询 student 表中 grade 字段值从第 5 位到第 8 位的学生(从高到底).
"hljs sql">select * from student order by grade desc limit 4, 4 ;
为表和字段取别名
为表取别名的语法格式如下
"hljs sql">select * from 表名 [as] 别名 ;
例: 为 student 表起一个别名 s, 并查询 student 表中 gender 字段值为 "女" 的记录.
"hljs sql">select * from student as s where s.gender = '女' ;
为字段取别名的语法格式如下
"hljs sql">select 字段名 [as] 别名 [, 字段名 [as] 别名, ...] from 表名 ;
例: 查询 student 表中的所有记录的 name 和 gender 字段值, 并为这两个字段起别名 stu_name 和 stu_gender.
"hljs sql">select name as stu_name, gender stu_gender from student ;
来源: http://www.bubuko.com/infodetail-2558731.html