MySQL-数据库(6)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 本文主要讲解了部分关系数据理论,以及关系查询出林和查询优化的相关问题。并介绍了批量修改数据库引擎的方法。

本文主要讲解了部分关系数据理论,以及关系查询出林和查询优化的相关问题。
并介绍了批量修改数据库引擎的方法。

6.关系数据理论

一对一,外键唯一,外键加unique约束
一对多,二张表,多的表加外键
多对多,三张表,关系表两个外键

规范化

数据库范式

实体 现实世界中客观存在并可以被区别的事物 比如“一个学生”、“一本书”
属性 “实体所具有的某一特性”,可以看作是“表的一列” 比如说,“性别”是“人”的一个属性
元组 表中的一行就是一个元组
分量 元组的某个属性值
表中可以唯一确定一个元组的某个属性(或者属性组)。如果这样的码有不止一个,那么大家都叫候选码,我们从候选码中挑一个出来做老大,它就叫主码
全码 如果一个码包含了所有的属性,这个码就是全码
主属性 一个属性只要在任何一个候选码中出现过,这个属性就是主属性
非主属性 没有在任何候选码中出现过,这个属性就是非主属性
外码 一个属性(或属性组),它不是码,但是它别的表的码,它就是外码

函数依赖:自变量x确定后,相应的函数值y也就唯一确定了。
完全函数依赖:,对于任何一个X的真子集,都不能推出Y,则称Y对X 完全函数依赖。
部分函数依赖:X的真子集可以推出Y。

for example: 是完全函数依赖, 是部分函数依赖。因为 .

1NF(第一范式):每一个分量是不可分的数据项 [有主键,字段不可再分]
2NF(第二范式):不产生部分函数依赖
3NF(第三范式):不产生传递依赖
BCNF:

  • 所有非主属性对每一个码都是完全函数依赖
  • 所有主属性对每一个不包含它的码也是完全函数依赖
  • 没有任何属性完全函数依赖于非码的任何一组属性
只有一个候选码且满足了 3NF则一定属于BCNF
关系模式C(Cno,Cname,Pcno) 只有一个码,没有任何属性对Cno部分依赖或传递依赖,所以 .且Cno是唯一决定C的因素,所以 .

关系模式S(Sno,Sname,Sdept,Sage) 假设Sname也具有唯一性,那么S就有两个码,这两个码都由单个属性组成。其他属性不存在对码的部分依赖或传递依赖,所以.且除了Sno、Sname外没有其他决定因素,所以

7.数据库设计

7.5物理结构设计

关系模式存取方法选择

数据库管理系统一般提供多种存取方法,常用的存取方法为索引方法和聚簇方法。
B+树索引hash索引是经典的存取方法。

聚簇:为了提高某个属性(或属性组)的查询速度,把这个或这些属性上具有相同值的元组集中存放在连续的物理块中称为聚簇。这些属性(或属性组)称为聚簇码。

for example:要查询信息系所有学生名单,该信息系有500名学生,在极端情况下,这500名学生所对应的数据元组分布在500个不同的物理块上,尽管对学生关系已按所在系建立索引,由索引可以很快找到信息系学生的元组标识,避免了全表扫描,然而在由元组标识去访问数据块时就要存放500个物理块,执行500次I/O操作。如果将同一系的学生元祖集中存放,则每读一个物理块可以得到多个满足查询条件的元组,从而显著减少了访问磁盘的次数。

一个数据可以建立多个聚簇,一个关系只能加入一个聚簇

9.关系查询处理和查询优化

9.1查询处理

一般情况下,当选择率较低时,基于索引的选择算法要优于全表扫描算法。但在选择率较高或者要查找的元组均匀的分布在要查找的表中,这时基于索引的选择算法性能不如全表扫描算法。(因为除了对表的扫描操作,还要加上对B+树索引的扫描操作,对于每一个检索码,从B+树根节点到叶子结点路径上的每一个节点都要执行一次I/O操作。)

9.2查询优化

见书上例题【例9.3】P280

有选择和连接操作时,应先选择,后连接。(笛卡尔积消耗贼大)

9.3代数优化

启发式法则:

  • 选择运算尽可能先做
  • 把投影运算和选择运算同时进行
  • 把投影同其前或后的双目运算结合起来
  • 把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算
  • 找出公共子表达式

批量修改数据库引擎

参考链接
Navicat默认数据库引擎为MYISAM,所以添加外键的时候需要将数据库的引擎设置为INNODB,但是这个时候你建的表很多的话,很难一个一个修改,所以需要批量修改数据库的引擎。

-- 查询数据库表引擎   mei_tuan是用到的数据库   复制过去直接改数据库名字即可
select * from information_schema.tables 
where table_schema = 'mei_tuan'
and engine='MYISAM';

-- 生成批量修改的sql语句
USE mei_tuan;
SELECT GROUP_CONCAT(CONCAT('ALTER TABLE',TABLE_NAME,' ENGINE=INNODB; ') SEPARATOR '')
FROM information_schema.TABLES AS t
WHERE TABLE_SCHEMA='mei_tuan'
AND TABLE_TYPE = 'BASE TABLE'
AND ENGINE = 'MyISAM';

image.png

CSV导入数据库
知乎参考链接
链接

-- 查看权限
show global variables like 'local_infile';
-- 开启权限
set global local_infile='ON';


-- 管理员信息表
LOAD DATA LOCAL INFILE 'D:\\tbs\\administer.csv' INTO TABLE administer
FIELDS TERMINATED by ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES -- 忽略表头,即表头不插入
(col1,col2,...);  --指定字段

-- FIELDS TERMINATED  指定分隔符

常见问题:
1.导入的路径名称不能有中文 , 路径是D:\\tbs\\administer.csv或者D:/tbs/administer.csv

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
16天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
|
16天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
|
12天前
|
存储 关系型数据库 MySQL
MySQL基础入门:数据库操作全攻略
MySQL基础入门:数据库操作全攻略
44 0
|
12天前
|
关系型数据库 MySQL 数据库
卸载云服务器上的 MySQL 数据库
卸载云服务器上的 MySQL 数据库
30 0
|
2天前
|
SQL 关系型数据库 MySQL
MySQL环境搭建——“MySQL数据库”
MySQL环境搭建——“MySQL数据库”
|
2天前
|
SQL NoSQL 关系型数据库
初识MySQL数据库——“MySQL数据库”
初识MySQL数据库——“MySQL数据库”
|
4天前
|
关系型数据库 MySQL 数据库
数据库基础(mysql)
数据库基础(mysql)
|
4天前
|
SQL 关系型数据库 数据库
【后端面经】【数据库与MySQL】SQL优化:如何发现SQL中的问题?
【4月更文挑战第12天】数据库优化涉及硬件升级、操作系统调整、服务器/引擎优化和SQL优化。SQL优化目标是减少磁盘IO和内存/CPU消耗。`EXPLAIN`命令用于检查SQL执行计划,关注`type`、`possible_keys`、`key`、`rows`和`filtered`字段。设计索引时考虑外键、频繁出现在`where`、`order by`和关联查询中的列,以及区分度高的列。大数据表改结构需谨慎,可能需要停机、低峰期变更或新建表。面试中应准备SQL优化案例,如覆盖索引、优化`order by`、`count`和索引提示。优化分页查询时避免大偏移量,可利用上一批的最大ID进行限制。
32 3
|
5天前
|
存储 关系型数据库 MySQL
【后端面经】【数据库与MySQL】为什么MySQL用B+树而不用B树?-02
【4月更文挑战第11天】数据库索引使用规则:`AND`用`OR`不用,正用反不用,范围中断。索引带来空间和内存代价,包括额外磁盘空间、内存占用和数据修改时的维护成本。面试中可能涉及B+树、聚簇索引、覆盖索引等知识点。MySQL采用B+树,因其利于范围查询和内存效率。数据库不使用索引可能因`!=`、`LIKE`、字段区分度低、特殊表达式或全表扫描更快。索引与NULL值处理在不同数据库中有差异,MySQL允许NULL在索引中的使用。
10 3
|
7天前
|
关系型数据库 MySQL 数据库连接
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
Django(四):Django项目部署数据库及服务器配置详解(MySQL)
29 11