MySQL-数据库(6)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本文主要讲解了部分关系数据理论,以及关系查询出林和查询优化的相关问题。并介绍了批量修改数据库引擎的方法。

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

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
关系型数据库 MySQL 数据库
Python处理数据库:MySQL与SQLite详解 | python小知识
本文详细介绍了如何使用Python操作MySQL和SQLite数据库,包括安装必要的库、连接数据库、执行增删改查等基本操作,适合初学者快速上手。
48 15
|
4天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
8天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
16天前
|
关系型数据库 MySQL 数据库
GBase 数据库如何像MYSQL一样存放多行数据
GBase 数据库如何像MYSQL一样存放多行数据
|
28天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
35 1
|
1月前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
39 4
|
24天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
148 0
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
194 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
142 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
存储 SQL 关系型数据库
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
142 0
MySQL---数据库从入门走向大神系列(五)-存储过程