MYSQL简介
- 关系型数据库
MYSQL数据库是一个关系型数据库,关系型数据库就是指,建立在关系模型的基础上,由多张互相连接的二维表组成的数据库 - 数据模型
通过客户端连接数据库管理系统(DBMS),通过DBMS创建数据库,再通过数据库创建数据表 - MYSQL启动与连接
–启动,以管理员身份运行命令行net start mysql80
,关闭net stop mysql80
–连接,可以用mysql自带的客户端命令行运行,也可以在系统的命令行里输入mysql -u root -p
SQL语法
- 通用语法
- sql语法是以英文分号
;
结尾,可以多行书写,或使用空格来增强语句的可读性 - MYSQL数据库的语句不区分大小写,但是关键字建议使用大写
- 注释: 单行注释:
--
,#
多行注释:/* */
- sql语法是以英文分号
- 分类
- DDL 数据库定义语言
- DML 数据库操作语言
- DQL 数据库查询语言
- DCL 数据库控制语言
DDL
将DDL语句主要分为数据库,表,字段来讲解
DDL的数据库操作
- 创建新的数据库
create database 数据库名;
- 删除数据库
drop database 数据库名;
- 查询所有数据库
show databases;
- 查询当前数据库
select database();
- 使用,进入数据库
use 数据库名;
- 创建新的数据库
表操作
在进行表操作时,必须先进入数据库中(use)- 创建新的表
1
2
3
4
5create table 表名(
字段1 类型 [comment 注释], #有逗号,
字段2 类型 [comment 注释], #[]表示里面可有可无
last字段 类型 [comment 注释] #最后一个字段后面没有逗号
)[comment 注释]; #语句结束需要用分号; - 删除表
drop table 表名;
- 修改表名
alter table 旧表名 rename to 新表名;
- 查询当前数据库所有表
show tables;
- 查询指定表的建表语句
show creat table 表名;
- 创建新的表
字段操作
- 增加表中的字段
alter table 表名 add 字段名 类型 [comment 注释] [约束];
- 删除表中的字段名
alter table 表名 drop 字段名;
- 修改表中的字段数据类型
alter table 表名 modify 字段名 新数据类型;
- 修改表中的字段名和字段类型
alter table 表名 change 旧字段名 新字段名 新数据类型 [comment 注释] [约束];
- 查询表结构(所有的字段)
desc 表名;
- 增加表中的字段
DML
DML是数据操作语言,主要对表中的数据进行增删改的操作
数据的增加
- 给指定字段添加数据
insert into 表名(字段1,字段2,...) values(值1,值2,...);
//指定字段添加一行数据 - 给全部字段添加数据
insert into 表名 values(值1,值2,...);
//有几个字段就要填写几个值,添加一行数据 - 指定字段批量添加数据
insert into 表名(字段1,字段2,...) values(值1,值2,...),(值1,值2,...);
//指定字段添加好几行 - 全部字段批量添加数据
insert into 表名 values(值1,值2,...),(值1,值2,...);
//values有几个括号就有几行值 - 注意: 字符串和日期型数据需要包含在引号中,数据的大小不能超过规定大小
- 给指定字段添加数据
数据的删除
delete from 表名 [where 条件];
delete删除的不是某一字段的值,而是符合条件的那一整行值,如果没有条件则删除全部数据。
如果要删除某一字段的值可以用update将值改为NULL;数据的修改
update 表名 set 字段名1=值1,字段名2=值2,...[where 条件];
条件控制着哪几行做修改,如果没有条件,则修改整张表格
DQL
DQL是数据查询语言,主要用来查询数据
基本查询
- 查询指定字段
select 字段1,字段2,... from 表名;
- 查询所有字段
select * from 表名;
//*代表所有字段,但是不太直观 - 设置别名
select 字段1[as 别名1],字段2 [as 别名2],... from 表名;
- 去除重复内容
select [distinct] 字段列表 from 表名;
加上distinct即可
- 查询指定字段
条件查询
过滤不符合条件的数据select 字段列表 from 表名 where 字段1 条件 [and 字段2 条件...];
条件:between 最小值 and 最大值
在最小值(包含)和最大值(包含)之间的结果in()
在只要满足in()中的其中一个条件的数据都会被打印出来like 占位符
占位符**_**代表一个字符(如__
表示两个字符大小的数据), **%**代表任意个字符(如%x
代表所有以x结尾的数据)is null
,is not null
数据是null- 其余常见
>
,<
,>=
,<=
,=
,!= 和 <>
,and 和 &&
,or 和 ||
,not 和 !
聚合函数
聚合函数都是作用于数据的某一列的(某一字段), 是某一列的运算(null值不参与所有聚合函数的运算)select 聚合函数(字段列表) from 表名;
- 常见聚合函数
分组查询
select 聚合函数(字段列表) from 表名 [where 条件] group by 分组字段名(或聚合函数) [having 分组后再次过滤的条件];
where 是分组前的过滤, group by 是分组, having 是分组之后的过滤where
不能对集合函数进行判断,而having
可以
举个例子:select school,count(*) from student where age<16 group by school having count(student)>100;
含义:查询所有年龄小于16的学生(select count(*) from student where age<16
),并根据学校进行分组(group by school
),统计各个学校的学生数量(count(*)
),选出学生大于一百的学校(having count(student)>100
)排序查询
- 语法:
select 字段列表 from 表名 order by 字段1 [desc],字段2 [desc];
- desc表示该查询结果为降序排序,如果不写,则默认是升序asc
- 如果有多个字段进行排序,当第一个字段相同时,再按照第二个字段的排序
- 语法:
分页查询
分页查询的语法,不同的数据库有不同的实现,这里介绍mysql的limit
语法:select 字段列表 from 表名 limit 起始值,查询数据数;
注意: 起始值是以0作为开始,展示的数据是从(起始值+1)开始
如第一页可以表示成:select age from user limit 0,5;
//表示从第1条数据开始,展示后面的5条数据(包含第一条)
例如select * from user limit 0,1;
//表示展示这张表中第一行的的全部数据编写顺序与执行顺序
蓝色代表编写顺序,红色序号代表执行顺序
DCL
DCL是数据控制语言,主要作用是管理用户,控制访问权限
联合查询
联合查询(union查询),就是把多次查询的结果合并起来,形成一个新的查询结果集
1 | select 字段列表 from 表a |
注意: union
去重, union all
不去重
对于联合查询的多张表的列数必须保持一致,字段类型也必须保持一致。