mysql 基础(三)

news2024/9/30 5:33:52

一、多表设计

数据库设计范式

  1. 第一范式(确保每列保持原子性)
    第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
  2. 第二范式就是要有主键,要求其他字段都依赖于主键。
    • 没有主键就没有唯一性,没有唯一性在集合中就定位不到这行记录,所以要主键。
    • 其他字段为什么要依赖于主键?
      因为不依赖于主键,就找不到他们。更重要的是,其 他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依 赖于主键,也就成了唯一的
  3. 第三范式,确保每列都和主键列直接相关,而不是间接相关,要求一个数据库表中不包含 已在其它表中包含的非主关键字信息

外键 

外键引用另外一个数据表的某条记录。
外键列类型与主键列类型保持一致
数据表之间的关联/引用关系是依靠具体的主键(primary key)和外键 (foreign key)建立起来的

约束名改则(约定俗成):

注: 

  • 当主表中没有对应的记录时,不能将记录添加到从表。
  • 不能更改主表中的值而导致从表中的记录孤立。
  • 从表存在与主表对应的记录,不能从主表中删除该行。
  • 删除主表前,先删从表

代码示例如下:

/*
   数据库概念
   mysql数据库
   安装
   
   sql
     ddl
      创建数据库
      创建表 
     dml
       insert into 
       update 
       delete
     dql  
      select 结果 from 表 where 条件  [group by 条件  order by 列  limit ]
      
      函数 单行函数  字符 逻辑  日期 数学函数
           分组函数
           
           
   数据库设计范式(数据库设计规则) 如何将多个信息合理的进行组织]
   
   设计3范式
    第一范式: 满足列的原子性(不可拆分)
                联系范式-->邮箱,电话,qq 可以拆分
                
    第二范式: 数据库表中必须要有主键,能唯一的表示某条记录的列(有些表中可以没有主=键)
    
    第三范式: 一张表中存储一类信息, 在一张表中关联其他表中的数据时,只需要关联主键列即可.
    
    
    专业信息表
       专业编号(主键)
       专业名称
     
     
    学生与专业是有关系的,如何建立学生和专业表的关系.
           
*/
   DROP TABLE stu
   
   CREATE  TABLE major(
        id INT PRIMARY KEY AUTO_INCREMENT,
        NAME VARCHAR(20)
   )

-- 修改表  为表添加一个列  一对多 多对一
   ALTER TABLE student ADD majorid INT

-- 外键  在一个表中外键是用来与另一个表的主键关联的
-- 主键 不能为空  唯一 检查 
-- 外键有两种情况:
-- 1.不加外键约束
--     可以任意的对表数据进行操作,即使两个表中的数据对应不上也没有问题 

-- 2.添加外键约束
--  添加外键约束后,两张表操作时,不能导致外键列和主键列对应关系不成立
  ALTER TABLE student  ADD CONSTRAINT fk_student_major_majorid FOREIGN KEY(majorid) REFERENCES major(id)

 -- 删除外键约束
 ALTER TABLE student DROP FOREIGN KEY fk_student_major_majorid
  
  -- 学生选课   一个学生至少选择2个课程
  -- 课程信息表  多对对关系设计
  
  CREATE TABLE course(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(20)  
  )
  
  
  -- 添加一个学生选课表   学生和课程关系表   放一个学生学号外键, 放一个课程外键
  CREATE TABLE student_course(
     stunumber INT,
     courseid INT
  )

ALTER TABLE student_course  ADD CONSTRAINT fk_student_course_student_stunumber FOREIGN KEY(stunumber) REFERENCES student(number)
ALTER TABLE student_course  ADD CONSTRAINT fk_student_course_course_courseid FOREIGN KEY(courseid) REFERENCES course(id)

 二、关联查询

内连接(inner join)

  • 把满足了条件的两张表中的交集数据查询出来
  • 语法:

左外关联(left join) 

  • 把左表的全部元素和满足左表中的右表元素查询出来
  • 语法:

右外关联(right join) 

  • 把右表的全部元素和满足右表中的右表元素查询出来
  • 语法:

子查询 

含义:出现在其他语句中的select语句,称为子查询或内查询;外部的查询语句,称为主查询或外查询。 

分类:

  • 按子查询出现的位置:
    • from后面:支持表子查询
    • where:支持标量子查询,列子查询
  • 按功能、结果集的行列数不同:
    • 标量子查询(结果集只有一行一列)
    • 列子查询(结果集只有一列多行)
    • 表子查询(结果集一般为多行多列

代码示例如下:

-- 关联查询  多表关联在一起查询
-- 学号 姓名 性别  电话 专业名称   -- 信息来自于两张表中

 -- 关联时没有任何的限制,会产生笛卡尔乘积现象 ,这是我们不想要的结果
 SELECT * FROM student,major

-- 关联查询  内关联  左外关联  右外关联

-- select number,name,gender,phone,name from student inner join major on majorid = id

 SELECT 
   s.number,s.name,s.gender,s.phone,m.name  mname
 FROM student s 
 INNER JOIN major m ON s.majorid = m.id   -- 把满足条件关联在一起
 
 SELECT 
   s.number,s.name,s.gender,s.phone,m.name  mname 
 FROM student s,major m 
 WHERE s.majorid = m.id   -- 先产生一个笛卡尔乘积  然后在条件筛选
 
 
 
 -- 左外连接   特点  即使不满足连接条件,也会把左边表中的所有数据查询出来
 
 SELECT 
   s.number,
   s.name,
   s.gender,
   s.phone,
   m.name  mname
 FROM 
   student s LEFT JOIN major m ON s.majorid = m.id
 
 
 -- 右外连接  即使不满足连接条, 也要把右边表中的所有数据查询出来
 SELECT 
   s.number,
   s.name,
   s.gender,
   s.phone,
   m.name  mname
 FROM 
   student s RIGHT JOIN major m ON s.majorid = m.id
  
 -- 统计每个专业下有多少学生
 SELECT 
   COUNT(number),
   m.name  mname
 FROM 
   student s RIGHT JOIN major m ON s.majorid = m.id
  GROUP BY m.name

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

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

相关文章

el-tree勾选后退出再打开显示之前已经勾选的

官网文档 element-ui官网文档有默认展开和默认选中 <el-tree:data"data"show-checkboxnode-key"id":default-expanded-keys"[2, 3]":default-checked-keys"[5]":props"defaultProps"> </el-tree><script>…

力扣518. 零钱兑换 II

动态规划 思路&#xff1a; 假设 dp[i] 为金额 i 使用零钱的组合数&#xff0c;其可以由其中的一种零钱 coin 和 i - coin 组合&#xff1b; 遍历零钱数组&#xff0c;对每一种零钱 coin 进行如下操作&#xff1a; 从 coin 到 amount 金额进行遍历&#xff0c;dp[j] dp[j] d…

Prometheus 薪资翻倍的监控系统?

1. 介绍与架构 Prometheus是一个开源的系统监控和警报工具包&#xff0c;用于收集和存储时间序列数据&#xff0c;包括指标信息、记录时间戳以及可选的键值对标签。许多公司使用Prometheus监控K8s集群。 2. 合适与不合适场景 合适场景 Prometheus适用于记录各种数字时间序列…

web系统架构基于springCloud的各技术栈

博主目前开发的web系统架构是基于springCloud的一套微服务架构。 使用的技术栈&#xff1a;springbootmysqlclickhousepostgresqlredisrocketMqosseurekabase-gatewayapollodockernginxvue的一套web架构。 一、springboot3.0 特性&#xff1a;Spring Boot 3.0提供了许多新特性…

每日一题——LeetCode1313.解压缩编码列表

这么简单的题目要说的这么复杂 nums里每相邻的两个元素nums[i]、nums[j]为一对&#xff0c;nums[i]表示nums[j]的次数 var decompressRLElist function(nums) {let res[]for(let i0,j1;j<nums.length-1;i2,j2){while(nums[i]--){res.push(nums[j])}}return res }; 消耗时…

代码随想录 Leetcode107. 二叉树的层序遍历 II

题目&#xff1a; 代码&#xff08;首刷自解 2024年1月24日&#xff09;&#xff1a; class Solution { public:vector<vector<int>> levelOrderBottom(TreeNode* root) {vector<vector<int>> res {};if(root nullptr) return res;queue<TreeNode…

第11次修改了可删除可持久保存的前端html备忘录:将样式分离,可以自由秒添加秒删除样式

第11次修改了可删除可持久保存的前端html备忘录&#xff1a;将样式分离&#xff0c;可以自由秒添加秒删除样式 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"…

Cesium for Unity包无法加载

太上老君急急如律⚡令⚡ &#x1f959;关闭UnityHub&#x1f9c0;启动梯子&#x1f96a;cmd 启动UnityHub &#x1f959;关闭UnityHub &#x1f9c0;启动梯子 &#x1f96a;cmd 启动UnityHub 把批处理启动文件&#x1f448;中的exe的路径换成自己的安装目录&#xff01;保存…

使用Electron打包vue文件变成exe应用程序

文章目录 一、下载Electron二、修改下载的Electron项目1.修改index.html文件2.修改main.js文件3.修改package.json文件 三、修改vue项目1.修改vite.config.js文件2.修改.env.production文件3.修改auth.js文件4.修改router下得index.js文件6.修改Navbar.vue文件 四、Electron打包…

ARMv8-AArch64 的异常处理模型详解之异常类型 Exception types

异常类型详解 Exception types 一&#xff0c; 什么是异常二&#xff0c;同步异常&#xff08;synchronous exceptions&#xff09;2.1 无效的指令和陷阱异常&#xff08;Invalid instructions and trap exceptions&#xff09;2.2 内存访问产生的异常2.3 产生异常的指令2.4 调…

Type-c一分二C+L/C+C同时快充数据线方案

一分二快充线是一种具有同时快充功能的线缆&#xff0c;可以实现同时给两个设备充电&#xff0c;并且都能达到快充的效果。那么&#xff0c;一分二快充线是如何实现同时快充功能的呢&#xff1f; 首先&#xff0c;一分二快充线采用了一种高效能的充电芯片LDR6020&#xff0c;这…

文件上传技术总结

语言可解析的后缀 &#xff08;前提&#xff1a;在Apache httpd.conf 配置文件中有特殊语言的配置 AddHandler application/x-httpd-php .php 搭配大小写、双重、空格来进行 其中&#xff1a; phtml、pht、php3、php4和php5都是Apache和php认可的php程序的文件后缀 常见的…

Web开发4:单元测试

在Web开发中&#xff0c;单元测试是一种重要的开发实践&#xff0c;它可以帮助我们确保代码的质量和可靠性。通过编写和运行单元测试&#xff0c;我们可以验证代码的正确性&#xff0c;减少错误和缺陷&#xff0c;并提高代码的可维护性。本文将介绍单元测试的概念、好处以及如何…

Markdown 数学公式详细总结

✍️作者简介&#xff1a;小北编程&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a;开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f4…

二分搜索树(Java)

完整代码在最后 树结构&#xff1a; 1.树结构本身是一种天然的组织结构 2.高效 二分搜索树的基础 1、二叉树 1.和链表一样&#xff1a;动态存储 2.具有唯一的根 3.每个结点最多只有2个孩子&#xff0c;每个结点最多只有一个父亲 4.具有天然的递归结构 2、满二叉树 a. 叶子…

关于IP地址欺骗的知识,看这篇文章就差不多了

无论是什么媒介,身份盗窃始终是一种威胁。所谓的“IP欺骗”是恶意用户为了他们的黑客攻击企图快速获得可信度的一种常见方式。 考虑到每台计算机和服务器都有一个唯一的标识符(Internet Protocol或IP地址),几乎任何使用互联网的人都可能受到攻击。IP欺骗是一种“伪造”源地…

开始读 Oracle PL/SQL Programming 第6版

最近觉得PL/SQL越来越重要&#xff0c;因为这本书早就在待读列表中&#xff0c;因此决定系统的学一下。 2024年1月24日晚开始读。 在亚马逊上的评价还不错&#xff1a; 本书的第一作者是Steven Feuerstein&#xff0c;是Oracle资深的Developer Advocate。 本书的示例代码可…

Gradlew安装配置和使用

官网 https://gradle.org/install/ 在线安装 $ sdk install gradle 8.5Homebrew is “the missing package manager for macOS”. $ brew install gradle手动安装 安装包下载 安装 $ mkdir /opt/gradle $ unzip -d /opt/gradle gradle-8.5-bin.zip $ ls /opt/gradle/gradle…

使用Burp Collaborator验证无回显的RCE漏洞

使用Burp Collaborator验证无回显的RCE漏洞 1.概述2.Collaborator演示3.通过DNS查找外带命令执行结果1.概述 当应用程序容易受到命令注入攻击,但命令是异步执行时,就会发生异步操作系统命令注入漏洞。这意味着它对应用程序的响应没有明显影响 Burp Collaborator 可以帮助您…

JAVA_ArrayList添加元素时的源码分析(jdk17)

目录 ArrayList 在 Collection 中的位置&#xff1a; ArrayList 集合底层原理&#xff1a; 先总结&#xff1a; ArrayList 底层是数组结构的&#xff1a;查找快&#xff0c;增删慢 看源码&#xff1a; 看一些重要的源码&#xff1a; 第一次存元素&#xff1a; 逻辑总览…