一、多表查询的两种方式
1、连表查询
select * from p1 inner join p2 on p1.id=p2.pid;
inner join 内连接
如果出现某个表中的数据在另一个表中没有对应的字段匹配,就不会显示
left join 左连接
以左边的表为主表,出现没有对应的记录时,右边表中的直接不显示,左边表中的用null填充显示没有的字段值。
right join 右连接
跟左连接相反
union 全连接
两个表直接的左连接语句和右连接语句中间用union连接就是全连接,会显示所有的记录
2、子查询
把其他的查询语句当条件写到小括号中用来查询
二、小知识点补充
1、concat和concat_ws
这里的两个方法和group_concat()的作用是一样的,显示某个字段中的所有的值,concat和group_concat()一样的使用方式,concat_ws则是在第一个参数位置写中间用于分隔的符号,后面写需要获取数据的字段名称,这样就会用统一的分隔符分隔记录值。
2、exists
这里的exists用的是子查询的方式来使用的,当子查询的语句有结果的时候就会运行整个查询语句,否则就不运行整个查询语句
3、alter操作
通过中介接上add、change、modify、drop可以做到表的字段的增删改
三、Navicat软件
这是一款数据库第三方软件,所有的常用功能都已经包装成了一个个按钮供我们使用,所有的操作都比较简单,不具体展开了。
sql注释语法
--
/**/
四、多表查询练习题
解题思路:
1、确定需要用掉的表
2、根据表关系拆解题目需求
3、根据拆分开的需求一步步求结果
4、使用子查询结合前面的结果得到答案
五、pymysql模块
import pymysql
conn.pymysql.connect(
host=ip地址
port=端口号
user=mysql用户名
password=密码
db=数据库名称
charset=字符编码类型
autocommit=Ture 针对增删改自动确认,不确认的话这些操作不能执行,或是在下方使用conn.commit()进行确认
)
conn.cursor()产生游标对象
sql = sql语句
cursor.execute(sql)执行sql语句,如果需要传参的话,也写在后面用逗号隔开套在一个小括号里,否则会出现sql注入现象。
cursor.fetchall()获取执行结果
fetchall获取所有的结果
fetchone获取一条记录结果
fetchmany(5)获取五条结果,可以指定获取的记录数量
获取结果的时候跟文件的光标移动相似,获取了fetchall之后,就没有别的内容可以获取了,这时候用到scroll(类型,mode)
类型有三种1、0、-1
分别表示从文件的当前位置继续移动
从文件的开头开始移动
从文件的末尾开始移动
六、视图
在MySQL中我们可以把多表查询的结果设置成视图,也就是把结果存成另一个表
create view teacher2course as
select * from teacher inner join course on teacher.tid = course.teacher_id;
但是不推荐频繁使用,因为视图表跟普通表看着一模一样,不好分辨, 到那时视图表不能进行除查之外的操作
七、触发器
关键词tigger
create trigger 触发器的名字 before/after insert/update/delete on 表名 for each row
begin
sql语句
end
只能对增删改进行触发,根据操作的前后分成六个状态。
由于内部的sql语句也是用分号结尾的,这就会导致混乱,因此我们使用delimiter修改语句结束符号,然后执行完触发器代码后再改回分号。
delimiter $$
八、事务
事务的四个特性(ACID)
原子性
执行事务的时候要么所有的语句都成功,要么就让所有的语句都执行失败,回到执行前的状态
一致性
无论事务执行成功,最后的记录数量应该是不变的
隔离性
多个事务之间相互独立,不受影响
持久性
事务的修改是永久的,修改之后数据就保存到数据库中了
在sql中需要使用start transaction开启事务
然后再用rollback回退到之前的状态
commit作用相当于保存数据到数据库中,如果没有执行commit数据都没有保存到数据库中
savepoint相当于虚拟机的镜像,保存一个锚点,用于回退
事务之间的相互影响
因为事务之间具有隔离性
这就导致会出现下列影响状态
脏读
一个事务数据的时候,另一个事务没有使用commit提交数据保存,这时候数据有可能会回滚
不可重复度
就是理想状态下的查询,另一个事务修改数据,倒是别的事务在执行两个相同的查询语句出现两个不同的结果
幻读
如果两个事务,一个执行修改操作,一个执行增加记录操作,增加记录的人先提交了,然后修改的事务也提交了,这时候增加的记录就会小时,好像发生了幻觉
丢失更新
两个事务同时修改记录,会出现覆盖的情况,导致数据更新丢失
针对这些状态
mysql的innodb存储引擎有下面这些隔离级别来处理
read uncommitted
未提交读
执行事务的时候如果没有提交,其他事务也可以读取数据,这个隔离级别对应的就是脏读
read committed
提交读
跟未提交读相反,提交了之后别的事务才能读取这是默认的隔离级别
repeatable read
可重复读
可以解决脏读,但是不能解决幻读
serializable
可串行读
强制让事务串行执行
九、存储过程
相当于python中的自定义函数,用于封装一些功能,关键词procedure
十、函数
跟我们之前用的min、max、avg等函数一样,
常见的还有Trim、LTrim、RTrim,这个方法跟python中的字符串内置方法strip一样
Lower、Upper
转换字母大小写
Left、Right
获取左右起始位置指定个数字符
Soundex
根据英文的发信模糊获取记录
date_format
时间函数,用于获取时间
十一、流程控制
跟python一样分成if和while,分支结构和循环结构。
跟python不同的是两者需要在结尾的地方写上end if/while
同时if条件的后面要写生then,while条件的后面需要写do
十二、索引
所谓的索引就相当于是书本的目录,方便我们查找的,提高效率
mysql主要有两种索引方式:B-Tree和hash索引
在mysql中索引也叫键,比如
primary key
unique (key)unique可以不写key
index key
其中primary key叫做聚集索引
其他两个叫做辅助索引
前两个键是有约束条件的
index key没有,他只是用于索引查找的
根据查找的条件,我们把索引分成
覆盖索引
select后面的查询字段跟条件判断中的字段是一个
非覆盖索引
跟覆盖索引相反
索引的数据结构
索引的底层其实是树结构
树结构也有很多中
比如二叉树,只能有两个分支
b树
当数据很多的时候,我们从磁盘找数据,就相当于大海捞针,因此有了b树
b树会吧数据先分类
根分支存数据的分类
中间的支点叫做枝
最下方的交叶
b+/b*树跟b树类似
b+树是在叶之间叶弄了连接,可以直接查找
b*树就是在枝之间也加了连接,可以互相查找
索引失效的情况
1、当模糊查询的时候前面如果是%开头就不会使用索引查询
2、当记录很少的时候也不会使用索引
3、如果查询语句中有or也不会使用索引
4、如果查询的时候表中数据有null,查询的时候条件处如果是is not null也不会使用索引
5、如果条件处用了计算或是函数也不会使用索引
十三、慢查询
我们使用查询语句的时候如果用到了索引,就会有一个叫索引扫描类型
这个类型就是判断代码效率的,我们在使用的时候需要在语句前面加上explain就可以查看扫描类型
在编写代码的时候不能处于第一级index,最少需要处于第二级range
十四、前端
前端可以看成是网页中的画面
后端就是处理前端获取到的数据的
学习前端,对于我们学后端的来说是为了了解一些基础知识,防止被人在工作的时候给骗了
前端三剑客
html和css和JavaScript
分别代表网页的骨架
网页的外表
控制网页的动作执行
十五、http超文本传输协议
就是使用浏览器充当客户端的b/s架构
当我们通过浏览器访问的时候,对传输的数据是有要求的,需要符合http协议
http协议的四大特性
1、基于请求
当客户端和服务端建立联系的时候只有发送请求的时候,服务端才会相应,别的时候不联系
2、基于tcp和ip作用在应用层
3、无状态
不会记住建立过关系的客户端或服务端,每次建立连接,都把你当成第一次见面
4、无连接/短连接
相当于输出传输结束就会断开连接,不同于tcp协议
报文格式
分成请求报文和相应报文
请求报文格式
请求首行(请求方式和协议版本)
请求头(一些kv键值对形式的数据)
空行(/r/n)
请求体(发送的数据,但是不是所有的数据都放在这里发送)
响应报文格式
响应首行(响应状态码和协议版本)
响应头(一些kv键值对类型的数据)
空行(/r/n)
响应体(让浏览器展示给用户看得数据)
响应码类型
1开头的表示发送了请求还在等待响应
2开头表示接受到了服务端的响应数据,比如200就是接受到了数据的状态
3表示重定向,所谓重定向就是在点击网页的时候,没有跳转到本来应该去的网页,比如点购物的时候如果没登陆会要求你先登陆
4开头表示客户端那里有问题
5开头表示服务端除了问题
在公司中我们还会自定义一些状态码,通常是10000起步
十六、html
html又叫超文本标记语言
用于创建网页,文件的后缀名通常是html或是htm
html的注释语法是< ! --这里写内容-- >
我们在pycharm中就可以编写网页
创建了一格html文件后我们可以看到文件的上面是字符编码等配置信息,在往下就是分成head和body两块
head中编写跟浏览器交互的配置
body就是放一些展示内容(主要给用户看的)
然后html中的东西都是通过标签创建的
这里我们通过标签的形式分成单标签(自闭合标签)和双标签,也就是是否需要用两个标签包裹内容来分类的。
十七、head常见标签
title标签
首先说一下title标签,这就是设置浏览器上方网页名称的地方
meta标签
定义网页源信息
比如搜索关键字和介绍
style标签
设置标签的样式
link标签
用于引入外部的css文件
script标签,可以引入外部的js代码,也可以编写js代码
十八、body内常见标签
h标签
标题
p标签
段落
u、i、s、b
下划线、斜体、删除线、加粗
img标签
图片标签
- src属性指定图片存储的路径
- width/height属性指定我们图片的宽度,高度会等比例缩放! 不要两个属性一起改,会变形的。
- title属性用来设置鼠标悬停时的提示信息
- alt属性用来设置当我们图片加载失败的时候,显示的信息。
标签的分类方式二
通过标签能否独占一行分成块级标签和行内标签
p标签不能嵌套块级标签
别的标签之间都是可以大(块级)内部的套小(行内)的
常见的符号
因为在html代码中各种符号都有特殊作用
因此我们用下列形式表示这些符号方式冲突
1. 空格
2.> 大于
3.< 小于
4.& &符
5.¥ ¥
6.© ©
7.® ®
body内布局标签
div和span
其中的话div是块级标签
span是行内标签
我们的网页在编写的时候通常用的都是div标签
超链接标签
a标签
内部的href属性写上地址就可以点击跳转
写上id属性的话,就可以做到页面的上下跳转
target属性可以设置跳转的方式,默认情况是__self,这个状态下会在原网页上跳转,改成__blank就会变成打开一个新的网页然后跳转
列表标签
ul
有序列表
ol排序方式、li
标题列表
dt大标题
dd
表格
table
thead
tbody
tr
th
十九、表单标签
form标签和input标签
form嵌套input标签,然后input内部写上类型,就可以接收各种类型的数据,达成各种功能,不需要自行编写,常见的类型有text、password、date、email、radio、file
多选列表用的是select标签
如果想要选择多个还需要加上multiple属性
补充说明
当我们在获取输入的时候需要写上name属性,这就相当于字典数据值的键名称,没有name属性的数据无法被使用,浏览器不会传输给后端,如果需要使用默认值,可以使用value属性进行设置
input标签理论上应该绑定一个lable标签,这样我们在点击标签的时候就会自动跳转到输入框内
当我们在写标签属性的时候,如果值跟名称一样可以简写
二十、css
css也叫层叠样式表
是一门样式语言,主要用于标签的外观修改美化
首先需要说一下标签的两个属性
class
相当于班级分类
id
相当于身份证号
我们在学css之前需要先学习标签的查找,这两个属性在分类查找中起到关键作用
css的注释语法
/* 内容 */
引入css代码的多种方式
1、在head中写上style标签编写css代码进行设置
2、使用link导入css文件
3、在便签的内部使用style属性设置
通常来说我们工作中用的都是第二种,第一种可以在学习的时候使用,第三种不推荐
二十一、css选择器
1.标签选择器(直接按照标签名查找标签)
div {
color: red;
}
2.类选择器(按照标签的class值查找标签)
.c1 {
color: green;
}
3.id选择器(根据标签的id之精准查找标签)
#d1 {
color: yellow;
}
4.通用选择器(直接选择页面所有的标签)
* {
color:blue;
}
这上面是四个基本的选择器
选择器之间还可以组合使用
1.后代选择器(空格隔开)
div内部的span标签设置字体颜色
div span {
color: red;
}
2.儿子选择器(大于)
选择所有父级是 <div> 标签的 <span> 标签
div>span {
color: yellow;
}
3.毗邻选择器(加号)
符合条件(需要是span便签)并且与父标签(div)相邻
div+span {
color: yellow;
}
4.弟弟选择器(小波浪号)
div后面所有的兄弟span标签(也就是同级标签)
div~span {
color: yellow;
}
选择器之间还可以嵌套使用
同时查找div、p、span三种同级标签,修改他们的颜色,改为黄色
div,p,span { # 多个选择器合并查找
color: yellow;
}
修改id值为d1的标签和class值为c1的标签,还有外层span标签的颜色,改为绿色
#d1,.c1,span {
color: green;
}
div.c1 { 查找class含有c1的div
color: red;
}
div#d1 { 查找id是d1的div
color: red;
}
.c1 p.c2 { 查找含有c1的class值的标签里面的含有c2样式值的p标签
color: antiquewhite;
}
我们也可以使用属性选择器进行选择
[username] { 按照属性名查找
color: red;
}
伪类选择器
:hover:只会在用户将指针挪到元素上的时候才会激活,一般就是链接元素;
:focus:只会在用户使用键盘控制,选定元素的时候激活(被点击之后采用的样式);
ps:a标签补充说明,针对没有点击过的网址,默认是蓝色,点击过的则为紫色。
伪元素选择器
用css代码创建网页中不存在的元素,给他添加样式,这里的不存在表示的是不能选中
二十二、选择器优先级
在选择器相同的情况下,如果导入方式不同,会使用处于下方的代码的导入结果
如果选择器不同,导入方式相同
内联样式(样式内部的style属性)>id选择器>类选择器>标签选择器
简单概括一下就是范围越大优先级越低
二十三、css样式调解
字体属性
字体大小
font-size: xxpx;
字体的粗细
font-weight:normal;
这里的粗细属性有很多
normal是标准粗细
bold是粗体
bolder更粗
lighter更细
这里也可以设置数值修改粗细
文本颜色
color:
颜色属性有三种类型的值来设置
第一种是用六位的十六进制数前面加#号
第二种是颜色单词
第三种是rgb或rgba来设置,a的作用是设置透明度,输入0-1之间的小数
然后我们在调颜色的时候可以在pycharm左边的颜色方块里面选颜色,也可以用微信的截图功能查看某些颜色的rgb值
文字属性
文字对齐
text-align:
left左对齐
right右对齐
center居中
文字装饰
text-decoration:
none默认,没有装饰
underline下划线
overline在文本的上面加条线
这里就要说到a标签中的文字了,默认情况下是有一条下划线的,如果想要去掉的话就要设置成none类型
首行缩进
text-indent:
后面跟xxpx可以设置缩进的像素值
背景属性
比如我们定义一个div布局标签,然后内部写上一些属性就可以给这个div标签设置背景属性
background-color:设置颜色
background-image:设置背景图片,背景普通会出现在背景颜色上方
background-repeat:设置重复的方式,默认情况下一张图片会重复填充,直到填充满所在的范围
repeat-x
横向填充
repeat-y
竖向填充
no-repeat
不填充
background-position:center center;
这是设置图片的位置
二十四、边框
边框的关键字border
分成三个方面来定义边框属性
边框宽度
border-width
边框样式
border-style
边框颜色
border-color
上面的属性在设置的时候可以在中间插入left、right、top、bottom来设置上下左右边框的单独设置
设置圆形边框
border-radius:50%
二十五、display属性
当值为none 的时候表示不显示当前标签,
这里需要跟visibility:hidden对比记忆
display设置为none的时候是看不出来的
visibility只是隐藏了内容,但是仍旧需要占用网页的空间
二十六、css盒子模型
margin:外边距,相当于盒子和别的盒子之间的距离
padding:内填充相当于盒子到物品的举例
border:边框,框住物品的盒子
content:内容,相当于盒子中的物品
p标签自带margin 16px
body默认margin 8px
ul默认padding-left=40
我们可以根据left、right、top、bottom几个关键词跟上面的四个属性拼接来调整距离。
二十七、浮动
给标签设置float属性就可以让他浮动,这就相当于是图片的图层一样,left是左浮动,right是右浮动,none是没有浮动
浮动的设置会导致边框中没有内容,而变成一条线,这时候我们就要用clear属性来解决问题
clear就是取下送浮动,他只对标签自身起作用
我们可以设置边框的宽高来解决,也可以用clear:both来解决
二十八、溢出
当一个边框中内容多到显示不下的时候,就会溢出来显示
这时候需要设置overflow属性的值来修改这些内容的显示方式
visible是默认值,溢出的内容会显示在外面
hidden是把溢出的部分藏起来
auto是让内容藏在边框中,可以通过滚动条查看
二十九、定位
position:
定位分成三种
相对定位:relative
针对当前位置进行重新定位
绝对定位:absolute
根据某个标签的位置进行定位
固定:fixed
根据浏览器的页面位置进行定位,也就是相对固定
三十、z-index属性
我们可以给他设置数值
数值越大表示这个标签的图层越上面
标签:回顾,第十,color,标签,索引,内容,div,选择器,属性 From: https://www.cnblogs.com/zhihuanzzh/p/16949773.html