数据库基础—上
- 一. 数据库概念
- 1.1 术语
- 1.2 查询操作
- 1.3 操作符:star:
- 二. 数据库定义-DDL
- 2.1 操作库
- 2.2 操作表
- 2.3 列类型
- 2.4 完整性约束:star:
- 三. 数据库操作-DML:star:
- 3.1添加
- 3.2 修改
- 3.3 删除
- 四. 数据库查询-DQL:star:
- 4.1 指定查询字段
- 4.2 联表查询
- 4.3 分组、排序、分页
- 4.4 子/嵌套查询
- 4.5 函数
一. 数据库概念
MySQL 是一个关系型数据库管理系统
1.1 术语
DataBase - 数据库
DBMS - 数据库管理系统
DBS -数据库系统
1.2 查询操作
操作名称 | 符号 | 说明 |
⭕️选择 | σ | 选择符合条件的字段 |
⭕️投影 | Π | 显示选中的列 |
连接 | ⋈ | 有可比属性组的连接 |
除 | ÷ | 等值连接,并且与S属于元组有组合 |
交 | ∩ | 属于R 并且 属于S |
⭕️差 | - | 属于R,不属于S |
⭕️并 | ∪ | 属于R 或者 属于S |
⭕️笛卡尔积 | × | 列数两表相加,行数两表相乘 |
* 注:自然连接是在等值连接的基础上,去除重复的列。
*注:说明部分为个人理解,仅供参考
1.3 操作符⭐️
- and、or:对应 && 和 ||
- in:用来指定条件范围,范围中的条件个数有限且明确
a in(a1,a2...)
- between:用来指定条件范围,条件个数无限,包括开始和结束值
- ont:用于否定给出的条件(取反)
- is null:是否为空
- like:匹配
a like b
(用 % 表示0到多个,用 _ 表示1个字符)
例:匹配姓王的人 : select * from studen where Sname like '王%'
二. 数据库定义-DDL
不设置字符集编码(如utf8)则不支持中文
2.1 操作库
- 增:
create database 库名
- 删:
drop database 库名
- 使用:
use 库名
- 查看所有数据库:
show databases
注:可以将数据库保存到指定位置以及所在字符集
2.2 操作表
- 查看所有表
show tables
- 查看表的定义
show create table 表名
- 创建表
create table 表名(...)
- 修改表
- 修改表名
alter table 旧表名 rename as 新表名
- 添加字段
alter table 表名 add 字段名 字段类型
- 删除字段
alter table 表名 drop 字段名
- 修改字段约束
alter table 表名 modify 字段名 约束;
- 修改字段名称
alter table 表名 change 旧字段名 新字段名 约束;
**【区别】**modify只能修改约束,change可以修改约束和字段名
- 删除表
drop table 表名;
2.3 列类型
- 数值:int、float、double、decimal(金融等高精度适用)
- 字符:char、varchar、text
- 日期:datatime(YY-MM-DD HH-mm-ss)、timestamp(时间戳)
- null
2.4 完整性约束⭐️
2.4.1 实体完整性
主键约束:primary key
2.4.2 参照完整性
外键约束:foreign key(列名) references 表名(列名)
2.4.1 用户自定义完整性
非空:not null
唯一:unique
检查:check 例check(Ssex in('男','女'))
默认值:default
备注:comment
三. 数据库操作-DML⭐️
数据库的意义:数据存储、数据管理
3.1添加
格式:insert into 表名(字段名) values(1列数据),(2列数据)
--不指定列名
mysql> insert into `demo01` values('李四',1002,'男');
--指定列名
mysql> insert into `demo01`(`name`,`id`) values('孙五',1003);
--同时插入多行
mysql> insert into `demo01` values('灵六',1006,'男'),('灵七',1007,'女');
注:表名后面不指定列名时,需按顺序依次填入值
3.2 修改
格式:update 表名 set 修改目标 where 判断条件;
3.3 删除
格式:delete from 表名 where 删除条件;
四. 数据库查询-DQL⭐️
4.1 指定查询字段
【格式】:
select <目标列> from <表名>
[inner join <联合的表> on <比对属性表达式>]
[where <条件表达式>]
[group by <列名> having <条件表达式>]
[order by <列名> [asc|desc]]
[limit 起始行,pagesize]
- 选择全部列可用通配符 * 替代
- 为表或列起别名,使用 AS 关键字
select * from table as T
- 需按【格式】中的顺序使用条件语句
4.2 联表查询
等值连接 inner join
select <目标列>
from tableA as a
inner join tableB as b
on a.key = b.key
左连接 left join:返回左表所有的值,右表无匹配则为null
右连接 right join:返回右表所有的值,左表无匹配则为null
自连接(了解):一张表拆成两张,自己连接自己
自连接例:
select a.'tname',b.'tname'
from tabe as a,tabe as b
where a.'sonid' = b.'faderid'
4.3 分组、排序、分页
分组 group by <列名> having <条件表达式>
一般和sum、max、avg等聚合函数一起使用
select r.studentno,s.studentname,sum(studentresult) as '总分'
from result r
inner join student s
on r.studentno = s.studentno
group by r.studentno
排序 order by [asc|desc]
例:order by <列名> asc
分页 limit
页面大小(行数):pageSize
单前页:n
起始参数值:(n-1)*pageSize
总页数:总行数/pageSize(向下取值)
4.4 子/嵌套查询
查询语句条件中嵌套另一个查询语句
例:任意科目分数大于90分的学生信息
select * from student
where studentno in(
select studentno from result
where score > 90
)
4.5 函数
函数 | 描述 | 参数 |
count() | 计算行数 | 任意列、*、1 |
sum() | 求和 | / |
avg() | 平均值 | / |
max()\min() | 最大值\最小值 | / |
distinct | 去重 | / |
MD5() | 加密 | 密码列表 |
*注:经过加密的元素在数据库中以密文形式显示,相同的值多次加密密文相同
SELECT * FROM pass
WHERE users=3001 AND `password`=MD5(123456)