134 python|第七部分:数据库

Posted 缓缓而行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了134 python|第七部分:数据库相关的知识,希望对你有一定的参考价值。

databases;
database 库名 [character set utf8];
库名;
database();
n 代表字符的个数,而非字节个数

2.char表示定长字符串默认存储1个字节,table 表名(字段名 数据类型 约束,...,表名;
create table 表名;
table 表名;

注:表的字段约束

UNSIGNED: 设置数字为无符号

NOT NULL:  设置字段不为空。操作数据库时,如果该字段为空,会报错

DEFAULT: 设置一个字段的默认值

COMMENT: 增加字段说明

AUTO_INCREMENT: 定义列为自增的属性,一般用于主键,数值会自动加1

PRIMARY KEY: 定义列为主键,主键的值不能重复,且不能为空


into 表名 values(值1,值2...),(* from 表名 [where 条件]= != > < >= <= ;between ;not between ; in ;not and or

from 表名 where 条件表名 执行动作;添加字段

alter table 表名 drop 字段名;修改数据类型alter table 表名 字段名 新数据类型;修改字段名alter table 表名change 旧字段名 新字段名 新数据类型;日期时间函数
column_name;

[ conditions ]
ORDER BY column1, column2column1, column2,.....columnN
FROM table_name
WHERE [condition]不显示字段重复值注::加快数据检索速度,提高查找效率

缺点 :占用数据库物理存储空间,当对表中数据更新时,索引需要动态维护,降低数据写入效率

注:

1. 通常我们只在tbl_name (主表主键)

:数据级联更新  

on delete cascade   on update cascade

dept(primary auto_increment,person(primary auto_increment,person (PRIMARY AUTO_INCREMENT,dept_fk dept(person dept_fkdept(athlete(primary auto_increment,item(primary auto_increment,athlete_item(primary auto_increment,athlete(item(athlete_item ranking tinyint;


                   

10.3 E-R模型图

01.概念

E-R模型(Entry-Relationship)即 实体-关系数据模型,用于数据库设计。

用简单的图(E-R图)反映了现实世界中存在的事物或数据以及他们之间的关系。

  1. 实体

    描述客观事物的概念;表示方法 :矩形框

  2. 属性

    实体具有的某种特性;表示方法 :椭圆形

  3. 关系

    实体之间的联系;分为一对多关联(1:n)  和多对多关联(m:n) 

    实例:图书、作家和出版社之间的E-R模型图


根据E-R模型图可以创建图书表、作家表、出版社表,另外还可以创建一张出版社和作家之间的关系表。

10.4  表关联查询


表关联查询
类型语法
简单多表查询select  字段1,字段2... from 表1,表2... [where 条件]
多表数据联合查询
内连接

SELECT 字段列表

    FROM 表1  INNER JOIN  表2

ON 表1.字段 = 表2.字段;

只会查到符合条件的记录,结果和表关联查询一样,官方更推荐内连接查询
左(右)连接

SELECT 字段列表

    FROM 表1  LEFT(RIGHT) JOIN  表2

ON 表1.字段 = 表2.字段;

左连接:左表全部显示,显示右表中与左表匹配的项。右连接相反

注:

1.尽量把数据量大的表放在前面,作为基准表

2.外连接又分成左连接和右连接

3.A left join B 和 B right  join A 两种情况返回的结果是一样的,程序员更习惯用左连接。







1.简单多表查询

进行多表查询时,两张表如果没有什么关联性,会把字段全部返回
多表一起查询,没有表达关联条件,会出现笛卡尔积。

笛卡尔积现象就是将A表的每一条记录与B表的每一条记录强行拼在一起。所以,如果A表有n条记录,B表有m条记录,笛卡尔积产生的结果就会产生n*m条记录。


也可以同时查询两张表的多个字段

查询两张表都有的字段时,如果不注明属于那张表,会报错


可以通过重命名的方来区分表的归属,就不会报错了

通过where 表达关联关系,让表格呈现的信息更有意义。

注:两张表如果已经建立了外键约束关系,where后表示关联的字段基本上就是外键。没有建立外键约束关系的两张表同样也可以进行多表查询,找到关联字段即可。

多表查询工资大于2w的,查询到的结果和真实情况并不相符

原因在于:

1.表关系和条件筛选都在where中 混乱

2.部分数据信息可能筛选不到(部门设置为NULL的员工工资)

2.内连接

内连接的写法有效解决了简单多表查询存在的第一个问题

3.左连接

在本题中,左连接(要根据实际问题分析,也可能是右连接能够解决,不管是左还是右,都属于外连接)的写法解决了简单多表查询的两个问题,显示了左表的全部和右表中与左表匹配的项。

4.右连接

需求:获取每个部门的人数

通过内连接的方式来做会发现如果某个部门人数为0 ,这个部门是不会显示的

3和6并没有显示出来

试试右连接能不能把所有部门显示出来,发现虽然显示了,但是计数出现了问题,这两个部门人数实际为0,显示却是1

问题出来count(*)上,括号内填*表示的是统计所有记录的数量,这题可以把*改成其他字段,比如name等其他字段

现在的显示是没问题的

下期预告:数据库(下)



                                                                                                                                                                 


参考资料


[1] MySQL 教程
https://www.runoob.com/mysql/mysql-tutorial.html



花样早餐展位

135 python|第七部分:数据库

使用: = "host": "localhost", "port": 3306, "user": "root", "password": "123456", "database": "dict", "charset": "utf8"= = = = #用正则表达式获取( += ( data = [] fr = open( line data += re.findall( fr.close() data data = sql= __name_== dict = Dict() dict.insert_words() dict.close() print(row) data = fr.read() fw.write(image)
cur.close()db.close()

3.在终端查看存储记录



4.获取图片



下期预告:并发网络编程部分




花样早餐

                                   

 

以上是关于134 python|第七部分:数据库的主要内容,如果未能解决你的问题,请参考以下文章

Python|统计学生平均成绩与及格人数

python后端面试第七部分:项目部分--长期维护

Python 学习之《Learn Python3 The Hard Way 》第七部分学习笔记

第七章 高级查询

[Lintcode]187. Gas Station/[Leetcode]134. Gas Station

第七周作业