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

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

内容概括:

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

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

数据库服务器连接,数据库的建立,增删改 等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是输出格式。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,233评论 6 495
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,357评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,831评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,313评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,417评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,470评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,482评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,265评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,708评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,997评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,176评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,503评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,150评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,391评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,034评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,063评论 2 352

推荐阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,271评论 0 9
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,425评论 1 8
  • 作者:烨竹 数据库的基本操作 登陆MySQL数据库服务:mysql -h服务器地址 -P端口号 -u用户名 ...
    DragonRat阅读 1,368评论 0 7
  • 手动不易,转发请注明出处 --Trance 数据库系统命令: (1).查看存储过程状态:show pro...
    Trance_b54c阅读 1,659评论 0 8
  • 张姓是中国当代第三大姓,人口有七千八百万左右。姓氏起名网今天来介绍张姓起名文化以及起名技巧,名字大全。 张姓最早可...
    浪尖上的舞者阅读 339评论 0 0