1.mysql
学习数据库就是学习数据库管理系统(一个数据管理系统可以管理多个数据库)
安装
安装版本:mysql -installter -community-5.7.41.0.msl
流程
1.custom自定义安装
2.选择安装MySQl Server 5.7.41 - x64
3.默认使用TCP、IP协议,端口3306
4.配置用户密码
默认root用户 直接配置密码
自定义用户
用户名
Host % 所有主机都可以访问
Role 角色 DBA
5.配置服务
服务名 MySQl57
开机启动
测试是否安装
win+r-输出cmd-输入 mysql -uroot -p
连接到数据库管理系统 mysql.exe
-h 192.168.11.15 远程访问需要权限
-uroot 用户名
-p3306 端口
-p 密码
2.数据库,表,数据相关SQL语句
2.1 数据库
展示所有数据库 show databases;
查看当前使用的数据库 select database();
创建数据库 create database 数据库名;
不存在创建 create database if not exists数据库名 charset = utf8;
指定编码
create database 数据库名 charset = utf8;
create database 数据库名 character set utf8;
使用数据库 use 数据库名;
删除数据库 drop database 数据库名;
2.2 表
展示当前数据库所有表 show tables;
创建表 create table 表名(列名 类型 约束信息, 列名 类型 约束信息, .... )
查看表 desc 表名;
删除表 drop table 表名;
修改表名 rename table 原始表名 to 新表名;
添加列 alter table 表名 add 列名 类型 约束;
删除列 alter table 表名 drop 列名;
修改列 alter table 表名 change 原始列名 新列名 类型 约束;
2.3 数据
查询数据 select * from 表名
select 列1,列2..... from 表名
select * from 表名 where 条件(id=5);
插入数据
全列插入 insert into 表名 values(列1, 列2, 列3,.....);
插入多行 insert into 表名 values(),(),()....;
缺省插入
insert into 表名 (列1,列2) values (值1,值2);
插入多行 insert into 表名 (列1,列2) values (),(),(),...;
只能写入一行 insert into 表名 set 列1=值1, 列2 = 值2...;
修改数据 update 表名 set 列1=值1,列2=值2 where 条件; 若没有where则修改整个表
删除数据 delete from 表名 where 条件; 若没有where则清空整个表
3.Mysql列的约束
用于限制数据在表中的输入规则
主键primary
外键 foreign key
自增长 auto_increment
唯一 unique
非空 not null
默认 default
4. Mysql数据类型
数字
int
bigint
float单精度
double双精度
decimal高精度
字符串
char长度
varchar可变长度
text长文本
布尔bool
1、0
日期时间
date
time
datetime
year
timestamp
枚举 enum,罗列所以可能
5.外键 创建,添加,删除
外键用于建立表与表之间的关联关系,一个表中的外键是另一个表中的主键
创建表时添加
create table 表名 (列...., constraint 外键名 foreign key(外键列名) reference 主表(主键)) on update cascade on delete cascade;
删除
alter table 表名 drop foreign key 外键名;
6.别名,查询指定列, 条件查询
select 列名 as 别名,列名 as 别名,...from 表名 where 条件
针对查询到的列起别名
多表查询,有共同的列表
7.系统函数与聚合函数
系统函数:
user()当前用户
version()当前数据库版本
database()
current_time
current_date
current_timestamp
聚合函数:
max(列名) :select max(列名) from 表名
min(列名)
sum(列名)
avg(列名)
count(任意列名)
8. 排序、分页,分组,去重
排序: order by 列名 排序方式
asc升序、desc降序
分页:
limit n:显示前n个
limit m, n:从索引m开始显示n个
分组:
group by 针对查询结果分组
select count(*), 列名 from 表名 where 条件
having 针对分组结果进行处理
having 列名条件
去重:
distinct(列名),去重某一列
9.嵌套查询,内连接,左外连接,右外连接,全连接
嵌套查询:一个查询的结果作为另一个查询的内容
内连接:inner join on 连接条件
左外连接:内连接结果+左表内容(右侧补null)
右外连接:内连接结果+右表内容(左侧补null)
全连接:左外连接 union 右外连接
10. 用户创建,授权,删除
查看当前用户:select user()
创建用户:create user 'temp1'@'%' identified by '123456';
分配权限:grant all on *.* to 'temp1'@'%';
grant select , insert on mydb. * to 'temp2'@'%';
删除用户:drop user 'temp2'@'%'
刷新权限:flush privileges;
11.视图
一张虚拟表,修改表等同于操作真实数据,方便查询
创建视图:不要求写SQL,使用navical工具创建
使用视图等同于使用表
12.函数与存储过程
都是存储在服务器上,可以提升数据安全,客户端不需要关注具体实现
函数:经过计算返回一个结果,需要指定一个形参,指定返回值
select 函数名(实参)
存储过程:一套SQL操作,没有返回值
call 过程名(实参)
13. 索引
索引:一种查询优化技术,可以提升查询效率,实现的本质是要预先存储一些额外数据,牺牲存储空间,提升查询效率
索引类型:
主键索引、唯一索引、普通索引
何时定义索引:
索引不是创建越多越好,如果表的修改频率非常高,不适合创建索引
如果表的查询效率非常高,,几乎不修改,适合创建索引
索引方法:
BTREE:大数据量,适合范围比较
HASH:适合小数据量,适合精准的等值比较
14. 事务
MySQl存储引擎innoDB支持事务,MySQl数据库中对应的一系列操作要么全部执行成功然后提交,要么全部失败然后回滚
成功:commit 失败:rollback
mysql终端默认自动提交
取消自动提交:set autocommit = 0;
设置自动提交:set autocommit = 1;
事务相关
开启事务:start transaction;
默认不会自动提交
结束事务:commit;提交成功
rollback; 失败回滚
ACID原则:
原子性:不可再分,全部成功或全部失败
一致性:执行前后数据要保持一致
隔离性:多个事务相互不影响
持久性:一旦提交,则执行完毕,永久改变
15.存储引擎
create table 表名() engine=引擎名
create table myisam_table(id int not null primary key auto_increment,
name varchar(30)) engine=myisam;
数据的存储的实现,不同存储引擎不同场景
常用
InnoDB:
支持事务
支持外键
支持行级别锁定,阻塞
综合能力强,适用大多数场景
默认存储引擎
使用后缀为ibd文件存储内容
MyISAM: 查询,排序速度非常快,不支持外键
Memory: 读取内存速度最快,不能持久化,不能在本地保存
CSV: 使用逗号隔开,适合导入导出操作
16.数据库的备份与恢复
备份:将数据库信息转储为SQL文件、手动创建数据库
恢复:运行SQL文件在目录中找到myk.sql文件打开
17.Mysql与Python基础交互
1.导入模块
2.连接数据库
3.构建游标
4.通过游标执行sql语句
5.处理sql结果
6.释放连接与游标
18.Fetchone fetchall fetchmany scroll execute executemany 方法使用
fetchone:获取表中一条数据
fetchall:获取表中所有数据
fetchmany:获取表中自定义数据
scroll:在结果集中移动游标,允许你在结果集中向前或向后滚动,以便访问不同的行。
execute:用于执行单个SQL查询或操作,并且通常用于执行增删改查操作
executemany:用于执行批量的SQL操作,批量插入多行数据。
19.Mysql辅助类封装
方便地进行数据库操作,提高代码复用性和可维护性