【MySQL】数据库的设计

数据库设计

1、多表关系

  1. 一对多(多对一):在多的一方建立外键,指向一的一方的主键。
  2. 多对多:多对多关系实现需要借助第三张中间表。中间表至少包含两个字段,这两个字段作为第三张表的外键,分别指向两张表的主键
  3. 一对一:一对一关系实现,可以在任意一方添加唯一外键指向另一方的主键。

2、数据库设计的范式

1)概述

范式:设计数据库时,需要遵循的一些规范。要遵循后边的范式要求,必须先遵循前边的所有范式要求

2)分类
  1. 第一范式(1NF):每一列都是不可分割的原子数据项
  2. 第二范式(2NF):在1NF的基础上,非码属性必须完全依赖于码(在1NF基础上消除非主属性对主码的部分函数依赖)
  3. 第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性(在2NF基础上消除传递依赖)
3)概念
  1. 函数依赖A -> B,如果通过A属性(属性组)的值,可以确定唯一B属性的值。则称B依赖于A
  2. 完全函数依赖:A -> B, 如果A是一个属性组,则B属性值得确定需要依赖于A属性组中所有的属性值
  3. 部分函数依赖:A -> B, 如果A是一个属性组,则B属性值得确定只需要依赖于A属性组中某一些值即可
  4. 传递函数依赖:A -> B, B -> C ,如果通过A属性(属性组)的值,可以确定唯一B属性的值,在通过B属性(属性组)的值可以确定唯一C属性的值,则称 C 传递函数依赖于A
  5. 码:如果在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码
  6. 主属性:码属性组中的所有属性
  7. 非主属性:除过码属性组的属性

3、多表查询

1)笛卡尔积

有两个集合A,B,取这两个集合的所有组成情况。

要完成多表查询,需要消除无用的数据

2)内连接查询
1. 隐式内连接

使用where条件消除无用数据

SELECT t1.name, -- 员工表的姓名t1.gender,-- 员工表的性别t2.name -- 部门表的名称
FROMemp t1,dept t2
WHERE t1.dept_id = t2.id;
2. 显式内连接
-- 语法
select 字段列表 from 表名1 [inner] join 表名2 on 条件;
-- 例如
SELECT * FROM emp INNER JOIN dept ON emp.dept_id = dept.id;	
SELECT * FROM emp JOIN dept ON emp.dept_id = dept.id;
3. 内连接查询使用思想

从哪些表中查询数据?

条件是什么?

查询哪些字段?

3)外链接查询
1. 左外连接
select 字段列表 from1 left [outer] join2 on 条件;

查询的是左表所有数据以及其交集部分

2. 右外连接
select 字段列表 from1 right [outer] join2 on 条件;

查询的是右表所有数据以及其交集部分

4)子查询

根据结果分类

1. 单行单列

子查询可以作为条件,使用运算符判断

select * from stu where age < (select avg(age) from stu);
2. 多行单列

子查询可以作为条件,使用in来判断

select * from stu where id in (select id from class where name = '一班' or name = '二班');

not in

3. 多行多列
虚拟表
select *
from dept t1,(select * from emp where emp.date > '2021-11-11') t2
where
t1.id = t2.dept_id;
普通内连接
select *
from emp t1,dept t2
where t1.dept_id = t2.id and t1.date > '2021-11-11'
4. 自关联查询
SELECT t1.ename,t2.ename
FROM emp t1
LEFT JOIN emp t2
on t1.mgr = t2.id;

4、事务

1)事务概念
1. 概念

如果一个包含多个步骤的业务操作,被事务管理,要么同时成功,要么同时失败

2. 操作

开始事务:start transaction;

回滚:rollback;

提交:commit;

3. 事务默认提交

Oracle默认手动提交

一条DML(增删改)语句会自动提交一次事务

修改事务的默认提交方式:

-- 查询
select @@autocommit;	-- 自动:1;手动:0
-- 修改
select @@autocommit = 0;
2)事务的四大特征
  1. 原子性:是不可分割的最小操作单位,要么同时成功,要么失败
  2. 持久性:事务结束后,数据库会持久的保存数据
  3. 隔离性:多个事务之间相互独立
  4. 一致性:事务操作前后,数据总量不变
3)事务的隔离级别
1. 概念

多个事务之间相互独立,但是多个事务操作同一批数据,会引发问题,设置不同的隔离级别可以解决这些问题

2. 问题
  1. 脏读:一个事务读取到另一个事务没有提交的数据
  2. 虚读(不可重复读):在同一个事务中两次读取的数据不一样
  3. 幻读:一个事务操作表中的所有记录,另一个事务添加了一条数据,第一个事务查不到自己的修改
3. 隔离级别
  1. read uncommitted:读未提交 -->脏读、虚读、幻读
  2. read committed:读已提交(Oracle默认)–> 虚读、幻读
  3. repeatable read:可重复读(MySQL默认)–> 幻读
  4. serializable:串行化 --> 没问题

隔离级别从小到大安全性越来越高,但是效率越来越低

-- 隔离级别的查询和设置
-- 查询
select @@tx_isolation;
-- 设置
set global transaction isolation level 级别字符串;

5、DCL:管理用户、授权

DBA:数据库管理员

1)管理用户
1. 添加用户
use mysql;
create user '用户名'@'主机名' identified by '密码';
2. 删除用户
use mysql;
drop user '用户名'@'主机名';
3. 修改密码
update user set password = password('新密码') where user = '用户名';
set password for '用户名'@'主机名' = password('新密码');
4. root用户密码忘记

cmd -> net stop mysql (需要管理员运行)

使用无验证方式启动mysqlmysqld --skip-grant-tables

修改密码

关闭mysqld服务

5. 查询用户
-- 1.切换到mysql数据库
use mysql;
-- 2.查询user表
select * from user;

通配符%:可以在任意主机上登陆

2)权限管理
1. 查询权限
show grants for '用户名'@'主机名';
2. 授予权限
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
grant all on *.* to 'wmh'@'%';	-- 授予root权限
3. 撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/610646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业级进销存管理系统

框架&#xff1a; 进销存管理系统&#xff0c;采用SpringBootShiroMyBatisEasyUI 项目采用Maven构建&#xff0c;数据库文件存放在 sql/jxc.sql 截图 运行项目部分截图&#xff0c; 登录界面&#xff0c;用户名admin&#xff0c;密码admin123 当前库存查询&#xff0c; 进…

搭建Eureka服务注册中心

一、前言 我们在别的章节中已经详细讲解过eureka注册中心的作用&#xff0c;本节会简单讲解eureka作用&#xff0c;侧重注册中心的搭建。 Eureka作为服务注册中心可以进行服务注册和服务发现&#xff0c;注册在上面的服务可以到Eureka上进行服务实例的拉取&#xff0c;主要作用…

用判断对齐大语言模型

1、写作动机&#xff1a; 目前的从反馈中学习方法仅仅使用判断来促使LLMs产生更好的响应&#xff0c;然后将其作为新的示范用于监督训练。这种对判断的间接利用受到无法从错误中学习的限制&#xff0c;这是从反馈中学习的核心精神&#xff0c;并受到LLMs的改进能力的制约。 2…

了解Spring中的依赖注入:@Autowired vs. @Resource

在Spring框架中&#xff0c;依赖注入是一项关键的特性&#xff0c;通过它&#xff0c;我们能够更灵活、更方便地管理和使用各种组件。在依赖注入的实现中&#xff0c;Resource 和 Autowired 是两个常用的注解&#xff0c;它们分别具有不同的特点和用途。在本篇博客中&#xff0…

来自一个系统的自白

天空一声巨响&#xff0c;小炫我闪亮登场&#xff01;初次见面&#xff0c;给大家简单介绍下自己&#xff1a;我是炫我渲染私有云系统&#xff0c;是最新一代的智能渲染集群系统。可以进行私有化部署&#xff0c;在3dsmax、maya等软件中一键完成提交、上传、渲染、下载的任务&a…

ESP32-WIFI(Arduino)

ESP32-WIFI Wi-Fi是一种基于IEEE 802.11标准的无线局域网技术&#xff0c;是Wi-Fi联盟制造商的商标作为产品的品牌认证。它可以让电脑、手机、平板电脑等设备通过无线信号连接到互联网 。 在无线网络中&#xff0c;AP&#xff08;Access Point&#xff09;和 STA&#xff08;St…

八股文 c++ 多态

静态多态 静态多态&#xff08;编译时多态&#xff09;&#xff1a;主要体现在函数重载&#xff08;Overloading&#xff09;和运算符重载上&#xff0c;编译器根据函数签名在编译阶段就能确定调用哪个函数。 动态多态 动态多态&#xff08;运行时多态&#xff09;&#xff…

leetcode 659. 分割数组为连续子序列

题目链接&#xff1a;leetcode 659 1.题目 给你一个按 非递减顺序 排列的整数数组 nums 。 请你判断是否能在将 nums 分割成 一个或多个子序列 的同时满足下述 两个 条件&#xff1a; 每个子序列都是一个 连续递增序列&#xff08;即&#xff0c;每个整数 恰好 比前一个整数…

1881_S32K344开发工具以及MCAL软件安装

全部学习汇总&#xff1a; GreyZhang/g_s32k344: A new MCU learning notes. I would try to use MCAL instead of SDK. (github.com) 编译有专门的编译器安装包&#xff0c;也有IDE的安装形式。这里我选择了IDE&#xff0c;因为我还需要一个开发调试环境。这个IDE可以让我方便…

使用cURL命令在Linux中测试HTTP服务器的性能

cURL是一个强大的命令行工具&#xff0c;用于从或向服务器传输数据。它支持多种协议&#xff0c;包括HTTP、HTTPS、FTP等。在Linux系统中&#xff0c;cURL可以用于测试和评估HTTP服务器的性能。下面是一些使用cURL命令测试HTTP服务器性能的示例和说明。 1. 基本请求 要向指定…

MySQL8下载安装教程

一、MySQL下载 我的版本是8.2.0&#xff0c;当前的最新版本&#xff0c;网址如下&#xff1a;MySQL :: Download MySQL Community Server 点击No thanks&#xff0c;just start my download&#xff0c;就是只是开始下载的意思&#xff0c;点击下载&#xff0c;等待下载完成 二…

ylov8的训练和预测使用(目标检测)

首先要配置文文件 1-配置数据集的yaml文件&#xff1a; 目录在ultralytics/cfg/datasets/下面&#xff1a; 例如我的&#xff1a; (这里面的yaml文件在/ultralytics/cfg/datasets下面有很多&#xff0c;可以找几个参考一下) path: /path/to/eye_datasets # dataset root di…

java基础之Java8新特性-方法引入

目录 1.简介 2.方法引入 方法引入遵循规范 方法引入种类 1.静态方法引入 2.对象方法引入 3.实例方法引入 4.构造函数引入 1.简介 方法引用是 Java 8 中引入的另一个重要特性&#xff0c;它提供了一种简洁的语法来直接引用现有方法或构造函数。方法引用可以看作是 Lambd…

【Python机器学习】决策树集成——梯度提升回归树

理论知识&#xff1a; 梯度提升回归树通过合并多个决策树来构建一个更为强大的模型。虽然名字里有“回归”&#xff0c;但这个模型既能用于回归&#xff0c;也能用于分类。与随机森林方法不同&#xff0c;梯度提升采用连续的方式构造树&#xff0c;每棵树都试图纠正前一…

【Verilog】期末复习——设计11011序列检测器电路

系列文章 数值&#xff08;整数&#xff0c;实数&#xff0c;字符串&#xff09;与数据类型&#xff08;wire、reg、mem、parameter&#xff09; 运算符 数据流建模 行为级建模 结构化建模 组合电路的设计和时序电路的设计 有限状态机的定义和分类 期末复习——数字逻辑电路分…

nginx反向代理websocket 60秒自动断开处理

参考&#xff1a; https://blog.csdn.net/zqh123zqh/article/details/112795608 添加&#xff1a; proxy_read_timeout 600s; 例如&#xff1a; server {listen 80;server_name carrefourzone.senguo.cc;#error_page 502 /static/502.html;location /static/ {root /home/ch…

功能分享【电商API接口】:商品采集正确使用方法!

相信很多做过电商的人&#xff0c;曾经有在淘宝、京东、天猫、拼多多、1688等平台上卖过自己的产品&#xff0c;但是每换一个平台&#xff0c;商品要重新上传&#xff0c;这浪费了很多没有必要的时间。 为此我们开发了商品采集API功能&#xff0c;一键完成上架商品&#xff0c…

2024年江苏省职业院校技能大赛高职学生组软件测试任务四 单元测试题目

2024年江苏省职业院校技能大赛高职学生组软件测试任务四 单元测试 任务要求 题目1&#xff1a;任意输入2个正整数值分别存入x、y中&#xff0c;据此完成下述分析&#xff1a;若x≤0或y≤0&#xff0c;则提示&#xff1a;“输入不符合要求。”&#xff1b;若2值相同&#xff0…

CHS_01.1.5+操作系统引导

CHS_01.1.5操作系统引导 操作系统的引导一个新的磁盘安装操作系统后操作系统引导&#xff08;开机过程&#xff09; 操作系统的引导 我们会学习操作系统的引导 那你可能看见这个词的时候会觉得莫名其妙不明 绝地 什么是操作系统的引导呢 简单来说就是当你在开机的时候 如何让…

消除类游戏(UPC练习)

题目描述 消除类游戏是深受大众欢迎的一种游戏&#xff0c;游戏在一个包含有n行m列的游戏棋盘上进行&#xff0c;棋盘的每一行每一列的方格上放着一个有颜色的棋子&#xff0c;当一行或一列上有连续三个或更多的相同颜色的棋子时&#xff0c;这些棋子都被消除。当有多处可以被…