数据蛙课程 -- 第一周总结

本来是应该在第一周内做完内,无奈上周状态不佳,年底报告很多,现在补上。

内容概括:

第一周主要是复习数据库的基本内容,包括:

数据库的概念、基本逻辑结构、类型等;

数据库服务器连接,数据库的建立,增删改 等DML(定义)、(DDL)操作  的基本操作;

查询数据库的基本语法,包括基础查询select、排序order、分组group by等;

子查询 in 、分页查询 limit、连接 join 等  以及

视图view 、事务  和 索引。

学习内容:

Day 01 【数据库基础】

数据库 -- 现代化的存储手段,以文件为基础,以合理的数据结构和算法实现,可以实现高速读写,有效性,容易扩展

数据库应具有:字段column、记录item、主键:能够唯一表示一行记录

RDBMS:关系型数据库管理系统(Relational Database Management System)

表与表之间有关联,叫关系型数据库

oracle:收费数据库,能处理极大量数据

mysql:web时代使用最广泛的关系型数据库

ms sql server:在微软的项目中使用

sqlite:轻量级数据库,主要应用在移动平台

mangoDB:非关系型数据库

数据库组成模型:客户端、服务端、数据库


客户端通过SQL语句连接服务端


SQL语言

SQL是一门专用于访问关系型数据库的语言,可以用于当前所有RDB

SQL语言主要分为:

DQL:数据查询语言,用于对数据进行查询,如select

DML:数据操作语言,对数据进行增加、修改、删除,如insert、udpate、delete

TPL:事务处理语言,对事务进行处理,包括begin transaction、commit、rollback

DCL:数据控制语言,进行授权与权限回收,如grant、revoke

DDL:数据定义语言,进行数据库、表的管理等,如create、drop

CCL:指针控制语言,通过控制指针完成表的操作,如declare cursor

注:SQL语言不区分大小写


数据完整性

1.数据类型:(使用正确的、大小合适的数据类型,保证数据库是可用的)

常用:

整数: int ,有很多子类,tinynit、int、;bit ,0/1;

浮点数:decimal  -- decimal(m,n)表示该浮点数一共m位,小数点后面有n位

字符串:varchar,char  -- char(n)会通过补空格使字符串长度保持n

日期: date 、time、datetime

enum 枚举类 enum(a,b,c)只允许返回a、b、c三种值

注:int()括号中可以加位数,不加默认是int(11),即长度11,可以配合zerofill,即int zerofill,不足位数的自动补前0,超过位数的按真实位数存储,不会截断,且使用zerofill会自动添加unsigned属性,无符号整数

数据类型全介绍:https://blog.csdn.net/anxpp/article/details/51284106

2.约束:(通过约束规范具体字段(即column)的值)

主键primary key:物理上存储的顺序

非空not null:此字段不允许填写空值

惟一unique:此字段的值不允许重复

默认default:当不填写此值时会使用默认值,如果填写时以填写为准

外键foreign key:对关系字段进行约束,当为关系字段填写值时,会到关联的表中查询此值是否存在,如果存在则填写成功,如果不存在则填写失败并抛出异常

说明:虽然外键约束可以保证数据的有效性,但是在进行数据的crud(增加、修改、删除、查询)时,都会降低数据库的性能,所以不推荐使用,那么数据的有效性怎么保证呢?答:可以在逻辑层进行控制

数据库设计3范式(Normal Form)

1.原子性:列不可再分

2.主键:必须包含一个主键列,其他列均应依赖主键。主键可以由多个列组成。

3.直接依赖:非主键列必须直接与主键存在联系,而非互相之间存在直接依赖,间接依赖于主键

E-R模型:

E(Entry),R(Relation)

关系情况:一对一、一对多、多对多。表A、B存在多对多情况时,应使用另外的表C,存储A、B的关系。表C内存储A的主键和B的主键。

逻辑删除:

对于非常重要的数据,如果不希望在删除(物理删除)后再也找不到,可通过逻辑删除,即使用标识列(如isDelete)表明该数据是处于“删除”状态。

【Day2 数据库操作】

连接数据库

1.MySQL Command Line Client

2.IED连接

3.在MySQL的bin目录下,cmd命令行中,输入bin目录下输入  D:\MYSQL\bin> mysql -utest -p

命令格式为:-u+用户名,-p+密码

(此处因在bin目录下能找到mysql.exe文件,所以只能在这个目录下运行,在其他目录下,cmd找不到,就运行不了。)


port:3306是mysql自己的端口,其他数据库也有自己的端口号

对数据库database的基本操作 DDL

数据库:

创建数据库:create database 数据库名 charset = utf8 (因中国人,常会用到汉字,所以用utf8);

删除数据库:drop database 数据库名;

查看数据库创建信息: show create datazbase 数据库名;

选择数据库:use database;

查看当前数据库 select databse();


数据库中的表进行管理:

查看当前所有的表 show tables

创建表 create table stud(字段名 数据类型 约束,字段名2 数据类型 约束,...  )

查看表的信息 desc 表名

查看表的创建 show create table


对表修改 (一般以alter起头)

添加字段 alter table 表名 add 字段名  字段数据类型 约束

修改字段 alter table 表明 modify 字段名 新字段数据类型 新约束  (不重命名,保持旧字段名)

添加字段2 alter table 表名 change 旧字段名 新字段名 类型 约束

删除字段 alter table 表名 drop 字段名

对表table(此处指表格本身,不是表中数据)的基本操作 DML

对数据data操作(增、删、改):

insert into 表名 values(值):

自增序列可以填写0,null,default ;

枚举类型可以写1,2,3,4...对应enum()中依次列举的选项 ,枚举类型的默认值可以采用default选取

部分插入 insert into 表名(字段名1,字段名2) values (值1,值2)

多值插入 insert into 表名 values(值)(值2)(值3)...


修改:

1.全部修改

update 表名 set 字段 = 新值

2.按条件修改

update 表名 set 字段 = 新值 where 条件表达式


删除:

物理删除 delete  from 表名 where  条件 -- 一般不会这样删除,数据宝贵,逻辑删除

PS 有数据就有价值,商业价值,分析价值

逻辑删除 给数据加一个标识位 如is_delete


数据库备份和操作

备份:mysqldump -u用户名 -p >python.sql

#按提示输入密码

恢复:连接mysql,创建新的数据库

退出连接,执行下列命令

mysql -u用户名 -p 新数据库名 < python.sql

#按提示输入密码

【Day3 数据查询】

查询:

查所有 select * from:

字段用as 起别名,方便引用

字段的顺序,根据select 后面排列顺序决定

消除重复行: select distinct 列1,... from 表名


条件查询:

“使用where子句对表中的数据筛选,结果为true的行会出现在结果集中”

select * from 表名 where 条件;

常用条件:

1.比较运算符:等于=、大于>、小于<、大于等于>=、小于等于<=、不等于<> 或 !=;

注:sql是非常严谨的语言,该有的部分,参数,即便是可以默认或者省略,也都要写上;

2.逻辑运算符:and 、or、 not;

注:逻辑运算符not会和最近的判断结合

3.模糊查询: like + %(表示任意多个字符)、_ 表示一个任意字符

4.范围查询:in 、between ... and ...

5.空判断: is null(注:null 和 ‘ ’是不同的)


排序:

order by 字段1 asc/desc ,字段2 asc/desc...


分组查询:(统计、去重):

利用group by,可将表格按某列的值进行分组,可对某一个字段进行分组,或对多个字段进行多层分组。

select * from 表名 group by 字段名1,字段名2...

分组后的几个处理方法:

1)group + group_concat(目标字段)

分组后将某个目标字段中所有值用‘,’连接起来,全部显示

2)group+ having

3)聚合函数:对一组值执行计算并返回单一的值,又叫组函数。除 COUNT 以外,聚合函数忽略空值。(plus:count(1)和count(*)不会过滤null值,但count(字段名col)会过滤掉null)

可以应用于查询语句的SELECT中,或者HAVING子句中,但不可用于WHERE语句中,因为WHERE是对逐条的行记录进行筛选。

常用聚合函数:max()、min()、avg()、count()

4)with rollup:总计,用于对比

# TODO: 窗口函数排序

【DAY4 子查询】

limit函数:

分页查询  limit 多次查询,递进显示

select * from 表名 limit 【起始行数】【显示行数】


连接 join:

内连接inner join


注:inner join 有时候和where 效果相同,但是where 可读性不好!

左连接 left  join

右连接 right

与左连接类似

子查询:

在一个 select 语句中,嵌入了另外一个 select 语句, 那么被嵌入的 select 语句称之为子查询语句。

主查询和子查询的关系:

子查询是嵌入到主查询中

子查询是辅助主查询的,要么充当条件,要么充当数据源

子查询是可以独立存在的语句,是一条完整的 select 语句

子查询形式:

1.标量子查询

子查询返回的结果是一个数据(一行一列)

2.行级子查询

行级子查询意味着子查询贡献的约束条件是约束行的,返回值是一行多列

3.列级子查询

列级子查询。。。约束列的,返回值是一列多行


【day5 mysql高级】

视图

作用:以软件访问数据库  ,若数据库表结构和定义发生变化,比如字段名字更新,那旧的查询语句就会失效。用视图可以解决此问题

视图不是真实的表,没有存储空间。创建视图后,视图就可以像表一样查询使用了。

创建:

create view 视图名称 as select 语句

事务:

一系列相关操作,要么全部完成,要么都不完成,中途中断会回滚

表引擎必须是innodb,才可使用事务

使用事务的过程:

1)开启事务

用“begin” 或 “start transaction”启动命令

2)执行事务操作:

3)中断 or 完成:

中断后采用roll back (会自动进行,也可手动进行) /  或用commit 结束事务;

事务4个特性:

原子性 Atomicity :从begin 到 commit 所有动作要么全部完成,要么全都不执行;

一致性 Consistency :事务要么处于没有执行过的状态,要么是全部执行的装态,没有中间状态;

隔离性 Isolation : 一个事物在操作完成,并用commit提交前,是不对任何其他事务可见的;

持久性 Durability : 一个事物操作被完成后,变会永久造成数据库的改变;

修改数据的操作,insert 、update 、delete等,都会触发事务,如果有一系列复杂程序组成一个整体功能,有必要手动使用事务

索引:

性质为目录,其实是一个特殊文件,其内存储所有数据的指针。

索引是为了应对大量数据查询缓慢的情况。如果数据量小,没有必要,会导致更新和插入变慢,索引也会占用磁盘空间。

创建索引:

create index 索引名称 on 表名(字段名)

查看索引:

show index from 表名:

删除索引:

drop index 索引名 on 表名


# TODO:关于数据库用户授权

函数学习:

MYSQL 获取时间函数: DATE_FORMAT(date,format) ,其中date是日期,format是输出格式。

你可能感兴趣的:(数据蛙课程 -- 第一周总结)