一,数据库的类型
数据库就是对大量的数据进行存储和管理
数据库的类型分为关系型数据库和非关系型数据库
1.1关系型数据库
关系型数据库的典型代表为:
- 大型数据库 oracle
- 企业级数据库 mysql sqlserver
- 轻量级数据库 sqlite
关系型数据库的特点时可以通过表产生关系关联,每个表中都会存储结构化的数据,支持sql结构化查询
关系型数据库的组织结构时数据库管理系统DBMS,数据库DB,表table,行row,列column
1.2 非关系型数据库
非关系型数据库的典型代表为
- 文档数据库 mongdb
- 内存数据库 redis
非关系型数据库的典型特点是高度可扩展性: - 非关系型数据库设计用于处理大规模数据集和高并发读写操作。它们能够轻松地扩展以适应不断增长的数据量和负载。
- 灵活的数据模型:非关系型数据库通常采用灵活的数据模型,如键值对、文档、列族和图形等。这种灵活性允许开发人员根据应用程序的需求自由组织和存储数据。
- 高性能:非关系型数据库通常采用基于内存的存储引擎,以提供快速的读写性能。它们还可以使用分布式架构和并行计算来实现高吞吐量和低延迟。
- 分布式存储:非关系型数据库通常采用分布式存储架构,数据可以在多个节点上进行分片和复制,提高数据的可用性和容错性。
二,MySQL数据库
2.1 MySQL的数据类型
数字类型
- int 整形
- bigint 整数
- float 浮点型
- double 双精度
- decimal 高精度
字符串类型 - char 长度
- varchar 可变长度
- text 长文本
bool 类型 - 0 false
- 1 true
日期时间 - data 日期
- time 时间
- datatime 日期时间
- timestamp 时间戳
枚举 - enmu 可以默认选择
2.2 数据库的命令
按下win + R键 打开命令行窗口
值得注意在MySQL数据库中输入命令是不区分大小写的
- 连接数据库 mysql -uroot -p
- 输入密码 密码为数据库安装时所创建的密码
- show databases 展示所有数据库
- use 数据库名字 使用数据库
- create database if not exists 数据库名字 chaset = utf8 创建一个数据库
- drop database 数据库名字 删除数据库
2.3 数据库中的表
- create table 表名 (列名 类型 约束信息 ,列名,类型,约束信息 )
约束信息 - primary key 主键 一个表必须有一个主键
- not null 非空
- auto_increment 自增长
- default 默认
- unique 唯一
- foreign key 外键
外键 - constraint 外键名 命名
- foreign key(列名)references 主表(列)
- casade 父表删除子表跟着删除 on update cascase on delete cascade
- restrict 约束
- alter table 表名 add 列名 datetime default current_timestamp; 时间戳
删除表信息 - delete from 表名 删除一个表
- delete from 表名 where 条件 根据条件删除
条件 - / >大于
- < 小于
- <> 不等于
- != 不等于
- / >= 大于等于
- <= 小于等于
多个条件 - and
- or
成员运算符 - in
- not in
模糊查询 - 名字 使用一个下划线来代替名字中的一个字
- 使用%代替所有
判断是否为空 - is null
- not is null
2.4 表中增加列
全列插入
- 一行 insert into 表名 values(列1,列2 )
- 多行 insert into 表名 values(值1,值2),(值1,值2)
局部插入 - 一行 insert into 表名(列1 ,列2)values(值1,值2)
- 多行 insert into 表名(列1)values (值1)
- 指定插入 insert into 表名 set 列名 = 值
更改表中信息 - rename table 表名 to 表名 更名表名
- alter table add 列名 类型 约束信息
- alter table change 列名 新列名 类型 约束信息
- alter drop 列名
- update 表名 set 列名 = 值 ,列名= 值 where 条件 不加田间会导致全表更改
查看表中信息 - desc 表名
- show tables 查看所有表信息
- select *from 表名
- select 列名,列名
三,MySQL 常用技术
3.1 select 调用
- select user()当前用户
- version 版本
- database()当前表
- current_time 时间
- current_date 日期
- current_timestamp 时间戳
3.2 聚合函数
- sum 总和
- max 最大值
- min 最小值
- avg 平均数
- count 个数
排序
select *from order by 列名 asc 升序 desc 降序
分页
select *from limit n 显示前n个
select *from limit m,m 显示page页,每页显示size个
去重
select distinct 列名 from 表中信息
3.3 关联查询
- 嵌套查询 一个查询结果作为另一个的查询内容
- 连接查询 select *from 表名,表名;
- select *from 表名 inner join 表名 on 表名.列=表名.列
- 左外连接 内连接结果+坐标内容 (右侧不NULL)
- 右外连接 内连接结果+右表内容
- 全连接 左外连接 union 右外连接
3.4 用户与授权
创建用户
create user ‘temp1’@‘%‘identified by ‘密码’;
分配权限
分配全部权限
grant all on *.*to ‘temp1’@’%’;
分配部分权限
grant select,insert on mydb.*to’temp2’@‘%’;
删除用户
drop user ‘temp2’@‘%’;
flush privileges 刷新
四,视图
视图就是一张虚拟表方便查询
修改表就等同于操作真实表隐藏真实表结构
创建视图
不要求写sql语句
使用navicat工具创建视图
使用视图
就等同于使用表
五,函数与存储过程
函数与存储过程都是存储在服务器上的可以提升数据的安全
客户端不需要关注具体的实现
可以自定义数据库级别
函数
经过计算返回一个结果
需要指定形参,指定返回值
例程就是函数
select 函数名(实参);
在黑窗口中,在相应的库下,可以使用select+函数名(实参);进行调用
存储过程
一套sql笑傲做,没有返回值
在黑窗口调用:call(过程名(实参));模式:in(相当于不可变类型);进行调用
六,索引
索引是一种优化技术
特点:可以提升查询效率
实现的本质是要预先存储一些额外数据,牺牲存储空间,提升查询效率
索引类型
- 主键索引
- 唯一索引
- 普通索引
何时定义索引 - 索引不是创建的越多越好
- 如果表的查询修改频率非常高,不适合创建索引
- 如果表的查询频率非常高,几乎不修改,非常适合创建索引
索引方法 - BTREE 大数据量,适合范围比较
- HASH 适合小数据量 适合精准的等值比较
七,事务
事务是 mysql数据库对应的一系列操作要么全部执行然后提交 要么全部执行失败然后回滚
- 成功 commit
- 失败 rollback
MySQL终端默认自动提交 - set autocommit = 0 取消自动提交
- set autocommit = 1 设置自动提交
事务相关
开始事务 - start transaction; 默认不会自动提交
结束事务 - commit 成功提交
- rollback 失败回滚
特性
ACID原则 - 原子性 不可再分
- 一致性 执行前后数据要保持一直
- 隔离性多个事务相互不影响
- 永久性 一旦提交,则执行完毕,永不该表
八,存储引擎
数据的存储的实现方式 不同的存储引擎适合不同的场景
关键字 create table()engine = 引擎名字
常用的存储引擎
innoDB 特点
- 支持事务
- 支持行级锁定,阻塞
- 支持外键
- 综合能力强,使用大多数场景
MyiSAM 特点 - 查询,排序速度非常快
- 不支持外键
memory 特点 - 读写内存速度最快
- 但是不能持久化
- 不能再本地保存
CSV特点 - 使用逗号隔开
- 适合导入导出操作
九,使用python操作数据库
使用流程
- 导入模块
代码如下(示例):
import pymysql
- 构建连接
代码如下(示例):
con = pymysql.connect(host="localhost", port=3306, user="root", password="123456")
- 构建游标
代码如下(示例):
cur = con.cursor()
- 通过游标执行sql
代码如下(示例):
sql = "show databases;"
cur.execute(sql)
- 处理sql结果
datas = cur.fetchall()
for data in datas:
print(data[0])
- 释放游标与连接
代码如下(示例):
cur.close()
con.close()
fetch
- fetchone 获取一个
- fetchmany 获取指定个数 默认获取一个
- fatchall 获取所有
scroll - 偏移游标位置
- relative 相对 正值向后 负值向前
- absolute 绝对 0-n
execute与xecutemany - 用于执行sql语句
- 第一个参数是sql字符串 使用%s占位符
- 第二个参数是args 列表元组字典