mysql_关系型数据库

佐手、 提交于 2020-02-02 09:57:41

01数据库简介

• 为什么需要数据库?
1、数据量越来越大,对于数据的记录和准确查找,
2、数据库系统解决的问题:持久化存储,优化读写,保证数据的有效性。

• 关系型数据库与非关系型数据库
数据库的分类:
1、关系型数据库
指采用了关系模型来组织数据的数据库。关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。主流的关系型数据库有:Oracle、Microsoft SQL Server、MySQL、PostgreSQL,SQLite、MariaDB(MySQL的一个分支)Microsoft Access、SAP。

2、非关系型数据库
指非关系型的,分布式的,以键值对存储且结构不固定,可以减少一些时间和空间的开销。非关系型数据库都是针对某些特定的应用需求,主要分为以下几类:
1). 面向海量数据访问的面向文档数据库:MongoDB、Amazon、DynamoDB、Couchbase等。
2). 面向高性能并发读写的key-value数据库: Redis、 Memcached等。
3). 面向搜索数据内容的搜索引擎:Elasticsearch,Splunk,Solr,MarkLogic和Sphinx等。
4). 面向可扩展性的分布式数据库:Cassandra,HBase等。

02 关系型数据库

1、E—R模型
当前物理的数据库都是按照E-R模型进行设计的,
• E表示entry,实体
• R表示relationship,关系
• 一个实体转换为数据库中的一个表,一个实体中有很多属性
关系描述两个实体之间的对应规则,包括: 一对一 ,一对多, 多对多
举例
微博管理:
用户(实体):昵称、密码、头像、邮箱(属性)
博文(实体):标题、正文、作者、发布时间(属性)
关系:
用户:博客 = 1:m

2、范式理解
经过研究和对使用中问题的总结,对于设计数据库提出了一些规范,这些规范被称为范式
• 第一范式(1NF):列不可拆分 , 即无重复的域。
• 第二范式(2NF):唯一标识 ,即拥有实体的唯一标识(eg: 身份证、id号等)。
• 第三范式(3NF):引用主键 ,即每列数据都与主键直接相关。
说明:关系型数据库有六种范式。一般说来,数据库只需满足第三范式(3NF)就行了。

三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

03 MySql数据库简介与安装

1、python中数据库的安装

在这里插入图片描述
mysql_secure_installation # 实现数据库的安全连接
mysql -uroot -pwestos # 进入数据库

2、开启远程连接服务

实验:客户端可以远程连接服务端数据库
- 客户端:172.25.254.197
- 服务端:172.25.254.15
服务端操作:
MariaDB [(none)]> grant all privileges on . to root@’%’ identified by ‘westos’;
#所有用户都可以以root用户身份连接本地数据库,密码为westos
MariaDB [mysql]> grant all privileges on . to root@‘172.25.254.15’ identified by ‘westos’;
#限定ip为172.25.254.15的用户可以以root用户身份连接本地数据库,密码为westos
#sql语句中的%等价于*。
客户端测试:
#指定要连接的主机名为172.25.254.15
mysql -h 172.25.254.15 -uroot -pwestos

3、数据库中的常用操作

(1)数据库操作
在这里插入图片描述
(2)表操作
在这里插入图片描述
(3)表创建:数据完整性
• 一个数据库就是一个完整的业务单元,可以包含多张表,数据被存储在表中
• 在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为
表添加一些强制性的验证, 包括数据字段的类型约束
在mysql中包含的数据类型很多,这里主要列出来常用的几种:
• 数字:int,decimal, float
• 字符串:varchar,text
• 日期:datetime
• 布尔:bool
约束
• 主键 primary key #当将属性设置为主键时,其值就会自动增长
• 非空 not null
• 惟一 unique
• 默认 default
• 外键 foreign key
• 自动增长 auto_increment

(4)数据的操作
在这里插入图片描述
(5)数据的备份与恢复
在这里插入图片描述其中的.sql文件就是表格的生成操作文件

数据的查询操作

select * from 表名;
• from关键字后面写表名,表示数据来源于是这张表
• select后面写表中的列名,如果是*表示在结果中显示表中所有列
• 在select后面的列名部分,可以使用as为列起别名,这个别名出现在结果集中
• 如果要查询多个列,之间使用逗号分隔
消除重复行
在select后面列前使用distinct可以消除重复的行
select distinct gender from students;

条件查询
使用where子句对表中的数据筛选,结果为true的行会出现在结果集中
select * from 表名 where 条件;
优先级
•小括号,not,比较运算符,逻辑运算符
•and比or先运算,如果同时出现并希望先算or,需要结合()使用
select * from student where class=‘95031’
在这里插入图片描述
分组
• 按照字段分组,表示此字段相同的数据会被放到一个组中
• 分组后,只能查询出相同的数据列,对于有差异的数据列无法出现在结果集中
• 可以对分组后的数据进行统计,做聚合运算
select 列1,列2,聚合… from 表名 group by 列1,列2,列3…

分组后的数据筛选:
having后面的条件运算符与where的相同

where和having的对比:
• where是对from后面指定的表进行数据筛选,属于对原始数据的筛选
• having是对group by的结果进行筛选

** 聚合函数 **
为了快速得到统计数据,提供了5个聚合函数:
在这里插入图片描述

排序操作
为了方便查看数据,可以对数据进行排序:
在这里插入图片描述
• 将行数据按照列1进行排序,如果某些行列1的值相同时,则按照列2排序,以此类推
• 默认按照列值从小到大排列
• asc从小到大排列,即升序, desc从大到小排序,即降序

获取部分行
当数据量过大时,在一页中查看数据是一件非常麻烦的事情:
在这里插入图片描述
• 从start开始,获取count条数据
• start索引从0开始

总结
完整的select语句
在这里插入图片描述
注意: 实际使用中,只是语句中某些部分的组合,而不是全部
执行顺序为:

  1. from 表名
  2. where …
  3. group by …
  4. select distinct *
  5. having …
  6. order by …
  7. limit star,count
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!