第五周内容回顾
第五周内容回顾
9/6
约束条件
unsigned
zerofill
not null
default
unique
primary key
auto_increment
foreign key
表关系和外键
外键就是用于记录表与表之间的联系
通过从两个表的不同层面思考能否与多个数据对应
有一个YES一个NO是一对多
两个YES是多对多
两个NO是一对一(有可能是一眼就能看出的没有关系)
外键
外键约束都要加上
级联更行 on update cascade
级联删除 on delete cascade
一对多:
1.先创建被关联的表
2.再创建有外键的表
多对多:
1.两个表都要加入外键约束
2.两者的外键关系存放在另一个表中
一对一:
1.可以将外键创在任意表中 一般创在常用的那个表里
2.通过在外键关联的数据后加上unique标签来与一对多区分
9/7
单表查询关键字
# where用于数据没分类前的筛选
select * from t1 where ...;
# like用于模糊查询配合% _使用,跟在在where后面
select * from t1 where name like '%e%';
# group by分组分完之后就个体就不在有意义了所以select后跟的也是分组的字段
select job from t1 group by job;
# 聚合函数max min avg count sum用来配合分类使用
select job,count(id) from t1 group by job;
# having用于分组后的过滤和where功能一样但是用于group by之后
select job,sum(salary) from t1
where age > 20 ,
group by job,
having sun(salary) > 1000000;
# distinct去重 用于去掉完全一样的数据 一般要指定字段也可以做到类似联合唯一的复合去重
select distinct name,age from t1;
# order by排序不加关键字默认升序加desc降序
select * from t1 order by salary desc,age;
# limit用来取指定条数数据给一个参数是取几条两个参数前一个是跳过多少条后面是取几条
select * from t1 limit 3,3;
# regexp正则 通过一串特殊符号指定对所要查找文本的限定
select * from t1 regexp ...
修改表语句
alter table t1 modify 旧字段名 新字段名 新数据类型 约束条件;
alter table t1 change 旧字段名 新字段名 新数据类型 约束条件;
alter table t1 drop 字段名;
alter table 旧名 rename 新名字;
9/8
拼接
select age,group_concat(name,'|',salary) from emp group by age;
select concat(name,'|',salary) from emp;
select concat_ws('|',name,age,salary) from emp;
多表查询
1.联表法
将两张表通过关键字inner join内链接(left join左链接,right join右链接,union全链接)关键字组合成一张表
然后通过表名点字段名筛选获取想要的数据
# 即把SQL语句查询出来的结果当成一张表使用
2.子查询
先去一张表中索引到与另一张表有关的数据
通过索引到的数据再去另一张表中查询所需数据
# 即把SQL语句查询出来的结果当成一个条件使用
'''复杂情况下可能出现两种方法一起使用'''
可视化软件
Navicat数据可视化软件,用于很多数据库特别是mysql的可视化
软件帮助用户可以通过简单的鼠标操作就能完成一些基本操作,不容易出错,也提高效率
功能:SQL语句能实现的简单操作软件里都可以实现
少有的一些无法直接通过操作软件写入的需求也可以通过在软件里打开SQL语句自行添加
9/9
多表查询练习总环节
先查看表查询的要求明确大概方法(联表还是子查询)
然后根据要求一步步写注释写出思路
根据注释一步步完善SQL语句切莫着急跳步
python第三方模块
# 下载模块
1.通过cmd终端指令
pip install ...
2.通过pycharm左下的Terminal输入指令
pip install ...
3.通过pycharm快捷键
file setting ...
# 切换源
1.终端临时切换
加-i 仓库地址
2.pycharm切换
在下载第三方模块的地方点左下manage添加仓库地址
3.通过修改python配置文件永久修改
# 查错
1.有timeout
网的问题重试或者换网
2.有版本号的
版本太低 输入后面建议输入的代码
3.别的问题
百度解千愁
pymysql
import pymysql
conn=pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='db1',
charset='utf8'
)
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from ...'
cursor.execute(sql)
info_dict = cursor.fetchall()
print(info_dict)
9/10
pymysql补充
autocommit='True'
fetchall # 获取全部执行结果
fetchone # 获取一行执行结果
scroll # 移动光标
sql注入
利用一些特殊符号和特殊语法的形式
组合出违背编程者意愿的语句
就统称sql注入
将敏感数据放在execute里面提交就行
sql其他补充
# 用户管理
1.创建用户
create user 用户名 identified by '密码';
"""修改密码"""
set password for 用户名 = Password('新密码');
set password = Password('新密码'); # 针对当前登录用户
2.重命名
rename user 新用户名 to 旧用户名;
3.删除用户
drop user 用户名;
# 事物
四大特征: ACID
A:原子性
C:一致性
I:独立性
D:持久性
# 视图
通过表查询生成虚拟表
'不推荐用'
# 触发器
对于满足sql的一些条件后执行相应语句
值得深度学习'自搜'
# 函数
和python中内置函数一样
学会使用多看看
# 流程控制
1.if条件语句
if i = 1 then
select 1;
elseif i = 2 then
select 2;
else
select 7;
end if;
2.while条件语句
set num = 0 ;
while num < 10 DO
select
num ;
set num = num + 1 ;
end while ;
# 索引
就是通过添加索引键能加快搜索速度