Python学习day45-数据库(总结)

 

<style></style>

Python学习day45-数据库(总结)数据库的概念用户基本操作MySQL支持的数据类型MySQL的约束条件多表关系单表与多表查询多表的连接方式子查询视图View事务

Python学习day45-数据库(总结)

今天正式结束数据库的学习,对于之前几天的内容进行一下总结,以及一些小的扩展.

数据库的概念

     
xxxxxxxxxx
12         1
'''
2
数据库:,
3
之前我们了解过,数据库主要包括库(文件夹),表(表结构文件,表数据文件,也就是索引结构),字段(数据的描述),记录(记录的本体)
4




5

关于数据库的分类:
6
对其进行分类主要是效率有区别,分类的标准通常是
7
1. 内存或者硬盘,也就是运行的区域
8
2. 关系或者非关系,即数据库里面表之间的关系
9
3. 存储方式,sql或者key-value的方式
10
数据库的基本连接:
11
即mysql  -h地址 -P 端口 -u 用户名 -p密码
12
'''
   

用户

     
xxxxxxxxxx
5         1
'''
2
用户的操作主要在于数据库对永无的创建以及赋予权限,比如:
3
grant 权限们 on 数据库表.表名 to 用户名@主机名 identified by '密码';
4
另外一些比较基本的操作可以查看前面day41的博客
5
'''
   

基本操作

     
xxxxxxxxxx
39         1
'''
2
数据库的一些基本操作,包括对于数据库,表,字段和数据的.
3
4
库: 
5
创建:create datebase 数据库名;
6
删除:drop database 数据库名;
7
查看所有数据库:show databases;
8
查看指定数据库的详细信息:show create database 数据库名;
9




10

表:
11
增:create table 表名(
12
(属性名1 类型(长度) 约束条件)
13
    ...
14
    (属性名n 类型(长度) 约束条件)
15
)engine=引擎(InnDB) DEFAULT charset=默认字符集;
16
删:drop table 表名;
17
改: 
18
alter table 旧表名 rename 新表名;
19
alter table 表名 change 旧字段名 新字段名 新字段属性
20
alter table 表名 modify 字段名 字段新属性 [字段位置]
21
查:
22
show tables;查看当前库所有表
23
show create table 表名;查看具体表的详细信息
24
desc 表名;查看表结构
25




26

字段:
27
增:
28
insert [into][数据库名.]表名 values(值1,...,值n);
29
alter table 表名 add 新字段 类型[(长度) 约束条件];# 默认末尾增加
30
alter table 表名 add 新字段 类型[(长度) 约束条件] first;# 头部添加
31
alter table 表名 add 新字段 类型[(长度) 约束条件] after 旧字段名;
32
删:
33
delete from [数据库名.]表名 where 条件
34
alter table 表名 drop 字段名;
35
改:
36
update [数据库名.]表名 set 字段1=新值1,字段n=新值n  where 字段=旧值;
37
查:
38
select * from [数据库名.]表名;
39
'''
   

MySQL支持的数据类型

     
x
        1
'''
2
1. 整型
3
tinyint:1字节 -128~127 默认长度为4
4
smallint:2字节 -32768~32767 默认长度为6
5
mediumint:3字节 -8388608~8388 607
6
int:4字节 -2147483648~2147483647 默认长度为11
7
bigint:8字节 -9233372036854775808~9223372036854775807
8
2. 浮点型
9
float:4字节,3.4E–38~3.4E+38 *
10
double:8字节,1.7E–308~1.7E+308
11
decimal:M要比D的最大值基础上+2
12
限制存储宽度
13
(M, D) => M为位数,D为小数位,即总位数至少要比小数位多两位
14
3. 字符串
15
char(4):以4个字符存储定长存储数据,效率高,
16
varchar(4):数据长度决定字符长度,为可变长度存储数据
17
char: 一定按规定的宽度存放数据, 以规定宽度读取数据, 通常更占空间
18
varchar: 首先根据数据长度计算所需宽度, 并在数据开始以数据头方式将宽度信息保存起来, 是一个计算耗时过程, 取先读取宽度信息,以宽度信息为依准读取数据, 通常节省空间,但是存取效率和char有差距
19
4. 时间类型
20
year:yyyy(1901/2155)
21
date:yyyy-MM-dd(1000-01-01/9999-12-31)
22
time:HH:mm:ss
23
datetime:yyyy-MM-dd HH:mm:ss(1000-01-01 00:00:00/9999-12-31 23:59:59)
24
timestamp:yyyy-MM-dd HH:mm:ss(1970-01-01 00:00:00/2038
25
结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07)
26
5. 枚举与集合
27
ENUM中文意思就是枚举,他的值是通过创建表的时候事先定义好的几个选项中选择所得到的,需要注意的是ENUM只能单选不能多选,多选要用SET
28
其实就是为某一个字段提供选项:
29
枚举enum:只能单选,非安全模式不选的话会报警,安全模式不选会报错
30
    集合set:可以多选,可以不选,都不会报错
31
    注意,对set类型的字符串赋值的时候,需要用一个引号包裹住(注意,只能有一个引号,多余引号就会插入失败),并且在引号内部用逗号将选项隔开,且不能添加空格或者其他任何额外的字符
32
insert into tc2 values('rocky1','female','male,female')
33
'''
   

MySQL的约束条件

     
x
9 10         1
'''
2
常用的约束条件有以下几种:
3
1. primary key:主键,每一条数据的唯一标识,如果我们没有对于数据的唯一性或者自增性进行设置,那么主键就会是系统默认分配的一个数据,是隐藏字段.主键所起到的主要作用就是优化查询速度.
4
2. foreign key:外键,用于指定改行记录从属于主表中的一条记录,主要用于参照完整性.
5
foreign key(所在表的外键字段) references 关联表(关联字段)
6
注意:
7
外键的字段名是自定义的,但为了索引方便通常将外键名字定义为 关联表_关联字段
8
外键字段本身可以唯一或者不唯一,但是外键所关联的字段一定是唯一的,这点非常重要
9
3. unique:唯一性,加上该约束条件的数据唯一,即同样的数据不能重复插入该表,unique还可以规定联合唯一,比如我们创建一个表用来存储登录用户的IP地址和端口号,这是两个字段,我们就需要把IP和端口绑定起来作为一个联合唯一的约束条件,语句为unique(ip,port)
10
4. auto_increment:自增,顾名思义,每次插入数值,若没有给该字段赋值,该字段就会自动加+1,所以自增的字段通常为整型或浮点型.这里要注意的一点是,我们在删除有自增的数据的表的时候,要用truncate,,不能用delete,delete只能删除数据本身,不能删除其索引号以及各种内层的数据关系,但是truncate可以.
11
5. not null:不为空,即加了该条件的值不能为空值,如如若为空值则会报错,通常用在一些不允许填空值的场合,比如注册时用户的用户名,以及出生人的性别.
12
6. default:默认值,即若该行字段为多个字段,如果我们对默认值以外的字段赋值,并没有给有默认值的字段赋值,那么有默认值的字段就会自动被赋予默认值
13
'''
   

多表关系

     
xxxxxxxxxx
1 14         1
'''
2
多表关系通常有三种,且通常建立在外键的基础上:
3
1. 一对一:外键在任何一方定义都可以,此时外键要设置唯一键,即unique
4
作者(author):id,name,gender,age,mobile,info,address
5
作者详情(author_detail):id,info,address,author_id
6
2. 一对多:外键必须放在多的那边,且外键值不唯一
7
书(book):id,name,price,publish_id
8
出版社(publish):id,name,address,phone
9
3. 多对多:一定要创建第三张关系表,每一个外键不唯一,但是多个外键可以建立联合唯一
10
作者(author):id,name,age
11
出版社(publish):id,name,address
12
关系表(author_publish):id,author_id,publish_id
13
'''
   

单表与多表查询

     
x
        1
'''
2
实际上我们日常的查询都是单表查询,因为即便是多表查询也是把多个单表连接成一个表,然后进行查询,所以还是单表查询.
3




4

单表查询的语法如下:
5
select [distinct] 
6
字段1,字段2... 
7
from 表名
8
[where 条件]
9
[group by] 
10
[having]
11
[order by] 
12
[limit]
13
'''
14
中括号包裹的都为可选项,即可以有可以没有,关键字执行的优先级为:
15
1. from:找到表
16
2. where:拿着where指定的约束条件,去文件/表中取出一条条记录
17
where后面的条件判断:
18
比较符合:> | < | >= | <= | = | !=
19
区间符号:between 开始 and 结束 | in(自定义容器)
20
逻辑符号:and | or | not 
21
相思符号:like _|%
22
正则符号:regexp 正则语法
23
3. group by:将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
24
联合分组:按多个字段综合结果进行分组
25
select group_concat(name),area,port from emp group by area,port;
26
这里要注意,后面有group by 的查询语句,前面select后面必须有group by 后面的参数,而且select后面不能写一般的字段,只能写聚合函数,切记,切记,不然会报错.
27
having 可以对 聚合结果 再进行筛选,但是where不可以
28
常用聚合函数如下:
29
max():最大值
30
min():最小值
31
avg():平均值
32
sum():和
33
count():记数
34
group_concat():组内字段拼接,用来查看组内其他字段
35
4. select:执行select
36
5. distinct:去重,对参与查询的所有字段,整体去重(即所查询的所有字段的值都相同才会认为是重复数据)
37
6. having:将分组的结果进行having过滤
38
7. order by:将结果按条件排序:order by
39
8. limit:限制结果的显示条数
40
41
注意:
42
以上这些关键字的执行顺序要严格执行,可以没有某个关键字,一旦需要用到,就要按照关键字的顺序来使用,乱序会直接导致报错
   

多表的连接方式

     
xxxxxxxxxx
1 10         1
'''
2
多表常用的连接方式有四种:
3
1. 内连接
4
关键字 :inner join on(内连接的inner关键字通常可以省略,所以直接使用join默认就是内连接)
5
语法: from A表 inner join B表 on A表.关联字段=B表.关联字段
6
2. 左连接
7
关键字 :left join on
8
语法: from 左表 left join 右表 on 左表.关联字段=B表.关联字段
9
3. 右连接
10
关键字 :right join on
11
语法: from 左表 right join 右表 on 左表.关联字段=B表.关联字段
12
4. 全连接
13
关键字 : join on    union(union可以将左连接和右连接合并起来,作为一个表)
14
语法: 将左连接和右连接用union连接起来即可
15
'''
   

子查询

当一次查询已经得不到我们想要的结果的时候,我们可以考虑用子查询,一步一步拿到自己想要查询的数据.

     
xxxxxxxxxx
1         1
增:insert into 表 select (子查询)
2
删:delete from 表 条件是(子查询)(子查询的表不能和delete的表相同)
3
查:select 字段 from 表 条件是(子查询)
4
改:update 表 set 字段=值 条件是(子查询)(子查询的表不能和update的表相同)
   

视图View

     
x
        1
'''
2
视图的概念:
3
1. 视图是存在内存中的临时表
4
2. 视图的创建依赖select语句,所以就是select语句操作的结果形成的表
5
3. 视图支持对数据的增删改查
6
4. 视图不允许对视图表的字段做修改
7
5. 视图本身支持创建,也支持更新与删除
8
9
首先要保证视图是可更新视图,用了以下结构的视图均为不可更新视图:
10
(1)聚合函数;
11
(2)DISTINCT关键字
12
(3)GROUP BY子句;
13
(4)ORDER BY子句;
14
(5)HAVING子句;
15
(6)UNION运算符;
16
(7)位于选择列表中的子查询;
17
(8)FROM子句中包含多个表;
18
(9)SELECT语句中引用了不可更新视图;
19
(10)WHERE子句中的子查询,引用FROM子句中的表;
20
(11)ALGORITHM 选项指定为TEMPTABLE
21
'''
   

事务

     
xxxxxxxxxx
1 14         1
# 事务:通常一些业务需要多条sql参与,参与的sql会形成一个执行整体,该整体我们就称之为事务
2
# 简单来说:事务就是包含多条执行的sql语句
3
# 比如:转账就是一个事务,从一个客户将资金转出,再将资金转入到另一个用户
4
5
# 只在内存操作,不在硬盘操作,全部完成之后会有一个请求,才会真正写入到内存中
6
7
'''
8
事务的四大特性:
9
1.原子性:事务是一组不可分割的单位,要么同时成功,要么同时不成功,即and的关系
10
2.一致性:事物前后的数据完整性应该保持一致(数据库的完整性:如果数据库在某一时间点下,所有的数据都符合所有的约束,则称数据库为完整性的状态),即总和是不变的
11
3.隔离性:事物的隔离性是指多个用户并发访问数据时,一个用户的事物不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离
12
4.持久性:持久性是指一个事物一旦被提交,它对数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响
13
'''
   

 

上一篇:Python学习day25-面向对象之组合,多态和封装


下一篇:css实现三角形效果