数据库介绍
基本介绍
数据库:存储数据的仓库,本质时一个文件管理系统
【DBMS:数据库管理系统】
使用数据库的目的时对数据进行【CRUD】create/read/update/delete 处理
数据库对数据的存储是持久化方式保存
常见的数据库:
oracle mysql sqlserver redis elasticsearch
数据分类:
oracle mysql sqlserver 关系型数据库
redis 基于内存
elasticsearch 搜索数据库
实体类与表结构对应关系
| Java | 表结构 |
|---|---|
| 类 | 表 |
| 成员属性 | 表头字段 |
| 对象 | 表中每一行的记录 |
SQL
结构化查询语言(Structured Query Language)简称SQL,SQL语句就是对数据库进行操作的一种语言。
SQL分类:
- DDL 数据库定义语言 用来定义数据库、表
- DML 数据库操作语言 用来对记录操作 update delete insert
- DCL 数据库控制语言 权限 用户
- DQL 数据库查询语言 select 它不是官方分类
- TCL 事务控制语言 事务
DDL
DDL 数据库定义语言 用来定义数据库、表
对库的操作
创建数据库
-- 格式
create database if not exists 库名 default character set 编码;
-- 需求: 创建名称为db1的数据库
create database db1;
-- 需求: 当db2数据库不存在是创建名称为db2数据库
create database if not exists db2;
-- 需求: 创建名称为db3数据库,并指定字符集为gbk
create database db3 character set gbk;
查看数据库
-- 格式
- 查看所有数据库
show database;
- 查看数据库的创建语句
show create database 数据库名;
-- 需求:查询Mysql数据管理系统中所有的数据库
show databases;
-- 需求:查询db3数据库的建库语句
show create databaase db3;
修改数据库
-- 格式
drop database 数据库名
-- 从数据库管理系统中删除名称为db2的数据库
drop database db2;
使用数据库
- 格式
- 查看正在使用的数据库 select database();
- 切换数据库 use 数据库名
-- 查看正在使用的数据库
select database();
-- 使用db1数据库
use db1;
对表的操作
创建表
- 创建表
- 格式
create table 表名(
字段名1 类型 约束,
字段名2 类型 约束,
......)
-- 注意事项:
- 字段要使用逗号分开
- 定义字段时它的格式 字段名称 类型
mysql中常用 的数据类型
- 数字类型 整数 小数
- 字符 定长 变长
- 日期 date time datetime
char与varchar区别
# char 定长 长度不可改变
# varchar 变长 长度根据数据量进行改变,更节省空间。
- 示例
-- 需求:创建student表包含
-- id整数
-- name变长字符串长20
-- sex性别定长型1
-- birthday字段日期类型
create table student(
id int,
name varchar(20),
sex char(1),
birthday date
)
-- 需求:创建一个student2表,结构与student相同
create table student2 like student;
查看表
- - 格式
- 查看所有表 show tables;
- 查看表结构 desc 表名
- 查看创建表的语句 show create table 表名
-- 需求:查看mysql数据库中的所有表
show tables;
-- 需求:查看student表的结构
desc student;
-- 需求:查看student表的建表语句
show create table student;
修改表
-- 添加表列 --
- 格式
alter table 表名 add 字段名 类型;
-- 需求:为student表添加一个新的字段nianling,类型为varchar(2)
alter table student add nianling varchar(2);
-- 修改表列类型 --
alter table 表名 modify 字段名 类型;
-- 需求:将student表中的nianling字段的类型改为int(11)
alter table student modify nianling int(11)
-- 修改表列名 --
alter table 表名 change 旧字段名 新字段名 类型;
-- 需求:将student表中的nianling字段名改成age,类型int(2)
alter table student change nianling age int(2);
-- 修改表名 --
RENAME TABLE 表名 TO 新表名;
-- 需求:将student表名称改为stu
rename table student to stu;
-- 修改字符集 --
ALTER TABLE 表名 character set 字符集;
-- 需求:将stu表的字符集修改为gbk, 再将其修改回来
alter table character stu set gbk;
alter table character stu set utf8;
删除表
-- 删除列 --
ALTER TABLE 表名 DROP 列名;
-- 需求:将student表中的age字段从表中删除
alter table student drop age;
-- 删除表 --
drop table if exists 表名
-- 需求:直接删除student2表
drop table student2;
-- 需求:判断表是否存在,若存在则删除表
drop table if exists student2;
DML
新增操作(insert)
注意事项:
- 值与字段个数,顺序,类型都必须对应
- 值的数据大小必须再字段的长度范围内
- 除了书值类型,其它的字段类型的值必须使用引号
- 如果要插入控值,可以不写或者插入null
格式
insert into 表名(字段1,字段2,....) values(值1,值2,值....)
/*
值只要不是数字,都用引号引起来
如果向表中插入所有字段的值,可以省略字段名
*/
insert into 表名 values(值1,值2,值....)
-- 添加一条记录(写出所有字段方式): id为1,姓名为张三,性别为男,生日为2018-05-02
insert into (id,name,sex,birthday)values(1,'张三','男','2018-05-02');
-- 添加一条记录(省去字段名称不写方式): id为2,姓名为李四,性别为男,生日为2012-05-02
insert into values(2,'李四','男','2012-05-02');
-- 添加一条记录:姓名为王五,性别为男
insert into (name,sex)values('王五','男');
蠕虫复制
格式
insert into 源表名 select * from 目标表名
-- 1.快速创建一张stu2表,结构与stu一样
create table stu2 like stu;
-- 2.查询stu2表结构和表中的数据
desc stu2;
select*from stu2;
-- 3.蠕虫复制stu表中的数据到stu2表中
insert into stu select*from stu2;
【重:】mysql中的insert语句中的value与values有什么区别,分别在什么场景使用?
value插入多条记录性能会更高。
values更适用于一条记录
更新操作(update)
格式
update 表名 set 字段名1=值1 , 字段名2=值2
update操作时,一般是有条件修改
update 表名 set 字段名1=值1 , 字段名2=值2,... where 条件
-- 需求:修改表中的性别为'女'
update stu set sex='女';
-- 需求:将表中id为1的性别改为男
update stu set sex='男' where id=1;
删除操作(delete)
格式
delete from 表名 where 条件
-- 需求:删除id为2的学生信息
delete from stu where id=2;
-- 需求:删除整张表中的所有数据
delete from stu;
truncate table stu;
【注意:】truncate和delete的区别
- truncate是将表结构删除,在重新创建一个表结构; truncate是DDL
- delete 是一行一行删除记录 delete是DML语句
DQL
基本查询操作
-
查询所有
格式 : select * from 表
-- 需求:查询所有的商品. select*from product; -
查询指定列名
格式: select 字段1,字段2,… from 表
-- 需求:查询商品名和商品价格. select pname,price from product -
别名查询
格式 可以对表或字段起别名,使用 as来操作,as还可以省略
-- 表别名:查询商品名称和价格 select pro.pname ,pro.price from product as pro; -- 列别名:查询商品名称和价格 select pname as 商品名,price as 价格 from product as 商品; -
去重复查询
格式 使用 distinct
-- 需求:查看商品表中有那些价格. select distinct price from product; -
查询结果参与运算
格式
-- 需求:将所有商品的价格+10元进行显示. (查询结果可参与运算) select *,ifnull(price,0)+10 from product;
条件查询
比较、逻辑、in
-
格式
- 比较运算 > < >= <= = !=
- 逻辑 and or not
- in(值1,值2,值3)
-
示例
-- 比较练习 -- 查询math分数大于80分的学生 select *from student where math>80; -- 查询english分数小于或等于80分的学生 select *from student where math>=80; -- 查询age等于20岁的学生 select *from student where age=20;; -- 查询age不等于20岁的学生 select *from student where age!=20; -- 逻辑练习 -- 查询age大于35且性别为男的学生(两个条件同时满足) select *from student where age>35 and sex= '男'; -- 查询age大于35或性别为男的学生(两个条件其中一个满足) select*from student where age>35 or sex='男'; -- 查询id是1或3或5的学生 select*from student where id=1 or id=3 or id=5; -- in练习 -- 查询id是1或3或5的学生 select*from student where id in(1,3,5); -- 查询id不是1或3或5的学生 select*from student where id not in(1,3,5);
between…and与like
-
格式
- between …and … >= and <=
- like 模糊查询 两种通配符 % 通配所有 _ 通配一个
-
示例
-- between..and 练习 -- 查询english成绩大于等于75,且小于等于90的学生 select *from student where english between 75 and 90; -- like 练习 -- 查询姓马的学生 select *form student where like '马%'; -- 查询姓名中包含'德'字的学生 select *form student where like '%德%'; -- 查询姓马,且姓名有三个字的学生 select *form student where like '马__';
排序
order by 关键字
-
格式
select * from 表 order by 字段 asc[desc 降序] ,字段 asc[desc 降序]
默认是asc 代表升序
多个字段代表当前一个字段相同,根据后一个字段进行排序
-
示例
-- 查询所有数据,使用年龄降序排序 select *from student order by age; -- 查询所有数据,在年龄降序排序的基础上,如果年龄相同再以数学成绩降序排序 select *from student order by age desc math;注:order by 一般是在语句最后
聚合函数
【count、max、min、avg】
-
格式
聚合函数也叫分组函数,它的作用是对一列数据进行统计 常用 count max min avg sum
- count 统计个数
- max 最大
- min 最小
- avg 平均值
- sum 求和
-
示例
-- 查询学生总数 select count(*) from student; -- 查询年龄大于40的总数 select count(*)from student where age>40; -- 查询数学成绩总分 select sum(math) from student ; -- 查询数学成绩平均分 select avg(math)from student; -- 查询数学成绩最高分 select max(max) from student; -- 查询数学成绩最低分 select min(math)from student;
分组查询
【分组函数group by ,使用having进行条件过滤】
-
格式
分组使用的是group by ,它是根据某一个字段对数据进行区分,区分后重要的数据的统计,这时就需要使用聚合函数(sum/count/max/min/avg)
-
示例
-- 按性别分组 select sex from student group by sex; -- 查询男女各多少人 select sex,count(*)from student group by sex; -- 查询年龄大于25岁的人,按性别分组,统计每组的人数 select sex,count(*)from student where age>25 group by sex; -- 查询年龄大于25岁的人,按性别分组,统计每组的人数,并只显示性别人数大于2的数据 select sex,count(*)from student where age>25 group by sex having count(*)>2;
【注意:】 where 是在group by 前进行了条件的过滤,简单理解就是where是在group by 前执行了,如果我们分组后在进行条件过滤,需要使用的是having
分页limit
【使用limit对数据进行分页】
-
格式
limit可以对数据进行分页显示
select * from 表 limit n,m
n 开始行
m 每页显示多少条
【显示页数 】 算法 limit *(页码-1)每页显示条数, 每页显示条数
-
示例
-- 查询学生表中数据,从第三条开始显示,显示6条 select)from student limit 2,6;
书写顺序:
select 字段 from 表 where 条件 group by 字段 having 条件 order by 字段 limit m,n;
执行顺序:
-
from 表
-
where 条件
-
group by 字段 having 条件
-
select
-
order by
-
limit m,n
这篇博客介绍了MySQL数据库的基本概念,包括数据库的作用、常见的数据库类型以及实体类与表结构的对应关系。详细讲解了SQL语言,分为DDL、DML、DQL等类别,涵盖对数据库和表的操作,如创建、查看、更新、删除,以及查询操作,如基本查询、条件查询、排序、聚合函数、分组查询和分页。此外,还强调了INSERT、UPDATE、DELETE和TRUNCATE的区别,以及LIMIT在分页查询中的应用。
250

被折叠的 条评论
为什么被折叠?



