ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2019-09-27 20:01:57  阅读:227  来源: 互联网

标签:md cm Python 数据库 color rgb day45 0px margin


 

<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
'''
   

 

标签:md,cm,Python,数据库,color,rgb,day45,0px,margin
来源: https://www.cnblogs.com/Xu-PR/p/11600032.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有