数据持久化:将数据从内存转移到硬盘(长久保存数据的存储介质)
数据库(database)— 存储数据,管理数据
关系模型–关系代数–关系运算–谓词逻辑
关系运算:选择,投影,笛卡尔积,并集,差集,重命名
用二维表保存数据
行(row)—记录(record)—元组(tuple)
列(col)—字段(field)—属性(attribute)
主键(primary key )
外键(foreign key)
数据定义语言(DDL) - create / drop / alter / rename / truncate
用于建库建表
数据操作语言(DML) - insert / delete / update / select
数据控制语言(DCL) - grant / revoke
事务控制语言(TCL) - start transaction / commit / rollback
Oracle/MySQL/DB2/SQLserver/PostgreSQL/MariaDB
MySQL
reliable/mature/open-source
中小型网站开发的黄金组合---LAMP=Linux+APache+MySQL+PHP
不区分大小写,声明式编程语言,关注结果不关注过程,领域控制语言(DCL)
Data Definition Language-数据定义语言:create / drop / alter
创建数据库
create database school default charset utf8mb4;
create database:固定写法
school:库名
default charset:设置默认的字符集
utf8mb4:库中数据的格式,最大4字节的utf-8编码--MySQL8默认
删除数据库
drop database if exists school; 如果数据库不存在也不会报错
修改数据库的字符集
alter database school default charset utf8mb4;
修改数据库的字符集,不要轻易修改,最好在创建的时候就设置好
切换数据库
use school;
创建数据表
create table tb_student
(
stu_id integer not null comment '学号',
stu_name varchar(20) not null comment '姓名',
stu_gender boolean not null default 1 comment '性别',
stu_birth datetime default '2000-1-1' comment '出生日期',
primary key (stu_id)
) engine=innodb comment '学生表';
:: comment--起解释作用
:: default--默认
删除表
drop table if exists tb_student;
修改表
修改表添加列----alter table tb_student add column 新列的信息
alter table tb_student add column stu_addr varchar(200) default '' comment '家庭住址';
alter table tb_student add column stu_tel varchar(20) not null comment '联系电话';
修改表删除列
alter table tb_student drop column stu_tel;
修改表修改列
修改列的信息
alter table tb_student modify column stu_gender char(1) default '男' comment '性别';
修改列的名字
alter table tb_student change column stu_gender stu_sex char(1) not null default 'M' comment '性别';
数据操作语言
插入数据
insert into 表名 (列名,...) values (...,...,....);
批处理--批量插入数据
insert into 表名 (列名,...) values (...,...,....),(...,...,....),(...,...,....)...;
删除数据
-- 在删除操作中,=表示相等性判断,不是复制操作
-- 删除的时候通常会带上where子句,而其中条件通常都是主键
delete from 表名 where 判断条件
-- 删除college_id为5的数据
delete from college where college_id=5;
-- 删除college_id 为 3 和 4 的数据
delete from college where college_id in (3,4);
delete from college-- 删除全表的话会报错,如果必须要这种操作,必须要将安全模式关掉
on delete set null--设置为空值,在删除父表的时候子表将引用父表的列设置为空-前提是该项允许为空
on update cascade--级联,在更新父表的时候子表也会同时更新
on update restrict--默认restrict表示不允许父表删除和更新
更新数据
update
查询数据
select
sum / avg / max / min / count / var_pop / var_samp / stddev_pop / stddev_samp /
rank / dense_rank / row_number / lead / lag
rank() over (partition by ... order by ...)
数据控制语言
-- 授权
grant
-- 召回
revoke
通过mysql的帮助系统 了解mysql的数据类型
help data types; / ? data types;
bigint(64bit--->8byte--->-2^63~2^63-1) bigint unsigned(0~2^64-1)
integer/int(32bit--->4byte--->-2^31~2^31-1)
smallint(16bit--->2byte--->-32768~32767)
tinyint(8bit--->1byte-->-128~127)
float/double-->不推荐使用
decimal-->decimal(10,2)--10为有效长度,2位小数个数
char
varchar--->varchar(20)---65535/16383
longtext-->4G--->不推荐使用
date
time
datetime
timestamp--时间戳---不推荐使用
json数组
json对象
MySQL WOrkbench---> 免费,强大,界面不够漂亮
Navicat for MySQL/Premium---> 商业软件
SQLyog---> CE/EE
多对一/一对多关系:在多的一方添加外键列
eg:员工-部门,用户-订单
多对多关系:使用中间表,将多对多变成两个一对多关系
eg:学生-课程,读者-图书,订单-商品
一对一关系:一对一关系是多对一关系的特例,在多的一方添加外键列
eg:用户-身份证,人-指纹,网卡-MAC地址
视图(View)是一种虚拟表,它是基于一个或多个表的查询结果而创建的。与实际的物理表不同,视图并不实际存储数据,而是根据查询语句动态地生成结果集。
视图可以看作是一个虚拟的表格,它提供了一种方便的方式来查询和处理数据。通过视图,可以将多个表中的数据组合在一起,从而实现更复杂的查询和分析。
封装 在功能上相对独立且会被重复使用的代码
字符串函数/ 数值函数 / 逻辑控制函数 / 聚合函数 / 开窗函数(窗口函数)
create function foo(param1 type1,param2 type2)
returns type3 no sql
begin
end
把一组SQL语句放在一起,加入程序逻辑,提前编译好保存在服务器上,
将来需要使用这组SQL语句时,直接调用即可
互联网产品因为会遭遇高并发和大流量,所以不推荐使用存储过程,因为使用存储过程会增加数据库的开销。
创建存储过程
create procedure foo(in param1 type1,out param2 type2)
begin
end
使用游标
declare c cursor for select ...;
open c;
fetch c into ...;
close c;
把多个写数据的操作(增删改)视为不可分割的原子性操作,要么全都成功,要么全都失败。
explain
-- type--->ALL --> index -->range --> ref --> eq_ref --> const
-- key--->实际用到的索引
-- rows--->预估扫描的行数
-- extra
主键上自带索引,索引就是数据本身—>聚集索引
我们自己创建的索引都是非聚集索引—>通过列找到主键—>通过主键查聚集索引得到数据
索引通常要创建在经常用作查询条件的列上(where子句)
索引需要额外的存储空间,而且索引虽然让查询变快了,但是增删改操作都会变得更慢,不要滥用索引!!!
复合索引遵循最左匹配原则
模糊查询如果遵循最左匹配索引也能用
where子句中使用了or,在索引列上使用函数都会导致索引失效
~ 创建索引
create index ... on ... (.... ...);
~ 删除索引
drop index ... on ...;
alter table ... drop index ... ;
~索引的底层结构是B+树,因为它有非常好的I/0性能。
~ 加密:把明文变成密文的过程叫加密,把密文变回明文的过程叫解密。
- 对称加密:加密和解密是同一个密钥。
- 非对称加密:加密和解密不是同一个密钥,有公钥和私钥之分。
~ 摘要:通过一个单向哈希函数给一个对象生成一个签名(指纹)。
- MD5 / SHA1 / SHA256
~ 编码:从一种表示方式转换成另外的表示方式,逆操作叫做解码。