1、数据库概念
一个存储数据的地方
-
数据按照分类存储到不同的表
- 简单的电子表格
-
非常高效快速查询其中的数据
2、为什么学习数据库
-
关注页面操作,还需要检查数据库中的数据是否正确
-
出现bug时,能够定位到问题原因
-
造数据,修改数据-测试环境
3、数据库类型
关系型数据库
-
mysql、Oracle、SQL server......
-
特点
-
数据行
-
数据列(字段)
-
数据表(数据行的集合)
-
数据库(数据表的集合)
-
4、MySQL的安装
-
安装指导
-
默认安装路径
- C:\Program Files\MySQL\MySQL Server 8.0\bin
-
验证MySQL是否安装成功
-
输入命令mysql -u root -p
-
输入正确密码
-
进入mysql页面
-
5、SQL
在数据库进行操作的语言
关系型数据库都支持使用sql语言进行操作
DDL(数据定义)
进行数据库表的管理
-
查看有哪些数据库
- show databases;
-
查看数据库
- Show tables;
-
使用某个指定的数据库
-
Use 数据库的名;
-
例如:Use test1;
-
-
创建数据库
-
Create database 数据库名;
-
例如:Create database test3;
-
-
创建表
-
create table 表名(字段名 类型 约束,字段名 类型 约束);
-
创建某个数据库下的表
- create table 数据库名.表名(字段名 类型 约束,字段名 类型 约束);
-
DQL(数据查询)
-
数据进行查询
- Select * from 表名;
-
指定字段进行查询
- select 字段名1,字段名2 from 表名;
-
取全部
- *
-
取别名
- select 字段名1 as 别名1, 字段名2 as 别名2 from 表名;
-
as也可以省略掉
- select 字段名1 别名1, 字段名2 别名2 from 表名;
-
条件查询
-
Where
-
select * from 表名 where 查询内容;
-
-
运算符
-
比较运算符
-
大于>
-
小于<
-
大于等于>=
-
小于等于<=
-
等于=
-
不等于!=
-
-
NULL值
-
is not NULL
-
查询字段不等于空的内容
-
select * from 表名 where 字段 is not NULL;
-
-
is NULL
-
查询字段为空的内容
-
例如:select * from 表名 where 字段 is NULL;
-
-
-
范围查找
-
查找某个区间的值
-
between 值1 and 值2
-
例如:select * from 表名 where 字段 between 1 and 3;
-
-
查找不包含在此区间的值
-
not between 值1 and 值2
-
例如:select * from 表名 where 字段 not between 1 and 3;
-
-
集合范围
- in(值1,值2,值3)
-
不在该集合范围内
- not in(值1,值2,值3)
-
-
逻辑运算符
-
and
-
并且
-
例如:select * from product where pid in(4,8,3) and num>= 10;
-
-
or
-
或者
-
select * from product where pid = 1 or num>= 10;
-
-
-
模糊查询
-
查询以x结尾的内容
-
like '%x'
-
例如:select * from product where pname like '%S';
-
-
查询以x为开头的内容
-
like 'x%'
-
例如:select * from product where pname like '华%';
-
-
查询包含x的内容
-
like '%x%'
-
例如:select * from product where pname like '%O%';
-
-
-
排序
-
正序
-
order by asc
-
例如:select * from product order by asc;
-
-
倒序
-
order by dasc
-
例如:select * from product order by dasc;
-
-
-
函数
-
max()最大值
- select max(字段) from 表名;
-
min()最小值
- select mix(字段) from 表名;
-
avg()平均值
- select avg(字段) from 表名;
-
sum()求和
- select sum(字段) from 表名;
-
count()多少条数据
-
*查询时,有空值也算做一行
- select count(*) from 表名;
-
具体的某个字段count,有null的这一行,会过了不进行计算
- select count(字段) from 表名;
-
-
version()版本号
- select version()
-
-
分组
-
group by
-
配合函数使用
-
例如 :select classid,sex,count(sex) from student group by sex,classid
-
-
having
-
分组后条件查询
-
例如:select classid,avg(score) a from student where score >60 group by classid having a>=80;
-
-
-
-
多表查询
-
SQL join
-
内关联
-
内连接,取交集,A表和B表有交集的数据我才要
-
SELECT * from A表名 inner join (sql语法) B表名 ON A.key=B.key;
-
A.key=B.key连接字段;
-
语法示例:SELECT * from dept inner join emp ON dept.dno = emp.deptno;
-
-
左关联
-
左连接,a表存在的数据
-
left join
-
语法示例:SELECT * from dept left join emp ON dept.dno = emp.deptno;
-
a表里面存在的内容,b表不存在的内容
-
select* from A left join B on dept.key=emp.key B的外键 is null;
-
语法示例:select *from dept RIGHT join emp on dept.dno = emp.deptno where emp.deptno is null:
-
-
-
右关联
-
右连接,只要B表存在的数据,我都要
-
right join
-
语法示例:SELECT * from dept right join emp ON dept.dno=emp.deptno;
-
b表里面存在的内容,a表不存在的内容
-
select * from A right join B on dept.key=emp.key B的外键is null;
-
语法示例:select * from dept RlGHT join emp on dept.dno=emp.deptno where emp.deptno is null;
-
-
-
-
DML(数据操作)
-
修改
-
update 数据库名.表名 set 字段名=要修改的内容 where 条件;
-
例如:UPDATE 'test1'.'info_test01' SET 'name'='张二' WHERE id=1;
-
-
添加
-
INSERT INTO '表名' (字段1,字段2,字段3)
VALUES (字段1值,字段2值,字段3值);
-
例如:
INSERT INTO 'info_test01' ('id','name','gw')
VALUES (2,'张三','测试');
-
-
删除
-
删除指定的某个数据
-
delete from 表名 where 字段 = 值;
-
例如:delete from 'info_test01' where id = '4';
-
-
删除整张表的信息
- delete from 表名;
-
TPL(事务处理)
对事务进行处理
-
处理操作量大,复杂度高的数据。
-
通过事务的整体保证数据的一致性
-
事务控制语句
-
开始事务
- begin;
-
提交事务
- commit;
-
回滚事务
- rollback;
-
6、Navicat
- 连接MySQL
- 使用navicat建表
7、数据库表的字段
-
名称
- 序号、名字、年龄,通常以英文+数字或者纯英文的方式命名
-
类型
-
数据类型
-
整数
-
字符串
-
时间类型
-
-
-
长度
-
定义的长度,输入内容需遵守定义长度的规则
-
varchar默认是255
-
int默认是0
-
-
不是NULL
- 必填项,勾选不能为空
-
键(key)
- 唯一的,不可以重复
-
注释
- 描述
-
自动递增
- 自动的填充数值
8、外键
-
主键
-
能够确定一条记录的唯一标识,不能重复,不为空
- 例如:身份证号、工号、学号等
-
-
外键
-
用于与另一张表关联,能确定另一张表记录的字段,用于保持数据的一致性
-
表的外键是另一个表的主键
-
9、索引
索引是一种数据结构,可以提高查询性能,降低查询时间的复杂度
占用空间,增删改表会降低效率
-
查看索引
- show index from 表名;
-
创建索引的sql
-
create index 索引名字(index_字段名)on 表名(字段);
-
语法案例:CREATE INDEX index_ename on emp(ename);
-
-
索引原则
-
where后面用的比较多字段,都可以加索引
-
join的字段 加索引
-