mysql 基础(三)

一、多表设计

数据库设计范式

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

外键 

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

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

注: 

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

代码示例如下:

/*数据库概念mysql数据库安装sqlddl创建数据库创建表 dmlinsert into update deletedql  select 结果 from 表 where 条件  [group by 条件  order by 列  limit ]函数 单行函数  字符 逻辑  日期 数学函数分组函数数据库设计范式(数据库设计规则) 如何将多个信息合理的进行组织]设计3范式第一范式: 满足列的原子性(不可拆分)联系范式-->邮箱,电话,qq 可以拆分第二范式: 数据库表中必须要有主键,能唯一的表示某条记录的列(有些表中可以没有主=键)第三范式: 一张表中存储一类信息, 在一张表中关联其他表中的数据时,只需要关联主键列即可.专业信息表专业编号(主键)专业名称学生与专业是有关系的,如何建立学生和专业表的关系.*/DROP TABLE stuCREATE  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 = idSELECT s.number,s.name,s.gender,s.phone,m.name  mnameFROM 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  mnameFROM student s LEFT JOIN major m ON s.majorid = m.id-- 右外连接  即使不满足连接条, 也要把右边表中的所有数据查询出来SELECT s.number,s.name,s.gender,s.phone,m.name  mnameFROM student s RIGHT JOIN major m ON s.majorid = m.id-- 统计每个专业下有多少学生SELECT COUNT(number),m.name  mnameFROM student s RIGHT JOIN major m ON s.majorid = m.idGROUP BY m.name

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

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

相关文章

用ChatGPT写申请文书写进常春藤联盟?

一年前,ChatGPT 的发布引发了教育工作者的恐慌。现在,各大学正值大学申请季,担心学生会利用人工智能工具伪造入学论文。但是,聊天机器人创作的论文足以骗过大学招生顾问吗? ChatGPT简介 ChatGPT,全称聊天生…

如何修改指针变量的值“指针的引用*“

如何修改指针变量的值"指针的引用*&" 案例: void createObj(QFrame *f){f new QFrame(this); } QFrame *frame; createObj(frame);上面这个案例frame并不会被new,会导致frame野指针。 void createObj(QFrame *&f){f new QFrame(t…

【格密码基础】基于LWE问题的密码系统

目录 一. 介绍 二. LWE密码方案简单介绍 三. LWE经典归约 四. LWE性质 五. LWE的鲁棒性 一. 介绍 在2005年,Regev基于LWE问题提出了一个新的公钥密码方案。该方案可实现语义安全(semantic security),其中误差率(…

【云原生】Docker的镜像创建

目录 1.基于现有镜像创建 (1)首先启动一个镜像,在容器里做修改 ​编辑(2)然后将修改后的容器提交为新的镜像,需要使用该容器的 ID 号创建新镜像 实验 2.基于本地模板创建 3&am…

单链表的删除

设存储元素ai的结点为q,要实现将结点q删除单链表的操作,其实就是将它的前继结点的指针绕过,指向它的后继结点即可。 我们所要做的,实际上就是一步,p->nextp->next->next,用q来取代p->next&…

蓝凌OA sysUiExtend.do 任意文件上传漏洞复现

0x01 产品简介 蓝凌核心产品EKP平台定位为新一代数字化生态OA平台,数字化向纵深发展,正加速构建产业互联网,对企业协作能力提出更高要求,蓝凌新一代生态型OA平台能够支撑办公数字化、管理智能化、应用平台化、组织生态化,赋能大中型组织更高效的内外协作与管理,支撑商业…

shallowRef与shallowReactive

shallowRef&#xff1a;浅层响应->整体重新赋新值才会触发更新&#xff0c;只改变单个属性不会触发更新 shallowReactive&#xff1a;浅层响应->第一层属性变化会触发更新&#xff0c;不是第一层属性不会触发更新 <template><div><h2>{{ person }}&l…

[docker] Docker的数据卷、数据卷容器,容器互联

一、数据卷&#xff08;容器与宿主机之间数据共享&#xff09; 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机的目录挂载到数据卷上&#xff0c;对数据卷的修改操作立刻可见&#xff0c;并且更新数据不会影响镜像&#xff0c;从而实现数据在宿主机与容…

81.网游逆向分析与插件开发-背包的获取-装备栏数据结构的逆向分析

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;自动化助手显示物品数据-CSDN博客 然后游戏中有弓箭&#xff0c;弓箭有数量&#xff0c;可以作为突破口&#xff0c;也可以使用物品id 获取弓的方式 获取弓箭的方式 然后搜索250 然后搜索出一个 然后…

Spring和 Springboot的区别你了解吗

什么是Spring The Spring Framework provides a comprehensive programming and configuration model for modern Java-based enterprise applications - on any kind of deployment platform. 简单来说Spring framework为基于Java的企业应用程序提供了全面的编程和配置模型&am…

Linux零碎点

目录 Linux基础命令 1、who&#xff1a; 2、hostname&#xff1a; 3、ifconfig&#xff1a; 4、pwd&#xff1a; 5、cd&#xff1a; 6、exit&#xff1a; 7、shutdown&#xff1a; 8、ls&#xff1a; 9、创建文件夹&#xff1a; 10、touch&#xff1a; 11、cp&#…

在百度云免费配置SSL证书 http改https操作

以下以在百度智能云上的操作为例&#xff0c;并不是给他打广告 1.购买域名 2.到域名管理处&#xff0c;解析网址&#xff0c;添加,*,www,指向服务器IP&#xff0c; 此时就可以访问网址&#xff1a;http://www.域名.cn 3.但是浏览器会报不安全&#xff0c;所以需要配置SSL证书…

【手写数据库toadb】10 开发数据库内核开发阶段-数据库模型

数据库内核模型介绍 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更新,对应的代码也会定期更新,每个阶段的代码会打上tag,方…

acrobat调整pdf的页码和实际页码保持一致

Acrobat版本 具体操作 现在拿到pdf的结构如下&#xff1a; pdf页码实际页码1-10页无页码数11页第1页 操作&#xff0c;选择pdf第10页&#xff0c;右键点击 具体设置 最终效果

web前端之ES6的实用深度解构赋值方法、复杂的解构赋值

MENU 前言解构对象解构数组解构混用 前言 ES6中允许按照一定模式&#xff0c;从数组和对象中提取值&#xff0c;对变量进行赋值&#xff0c;这被称为解构(Destructuring)。 使用解构赋值可以将复杂的代码整理的更加干净整洁。 解构对象 在没有使用解构之前&#xff0c;想要确定…

实习日志5

活字格图片上传功能&#xff08;批量&#xff09; 这个报错真的恶心&#xff0c;又看不了他服务器源码&#xff0c;接口文档又是错的 活字格V9获取图片失败bug&#xff0c;报错404-CSDN博客 代码BUG记录&#xff1a; 问题&#xff1a;上传多个文件的base64编码被最后一个文…

【oracle】oracle客户端及oracle连接工具

一、关于oracle客户端 1.1 Oracle Client 完整客户端 包含完整的客户端连接工具。 包很大&#xff0c;需要安装 1.2 instantclient 即时客户端 是 Oracle(R) 发布的轻量级数据库客户端&#xff0c;减少甚至只包含几个文件&#xff0c;您无需安装标准的客户端&#xff0c;就可以…

mybatis plus入门

mybatis plus入门 MyBatis-Plus 是 MyBatis 的一个增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。它继承了 MyBatis 原生的所有特性&#xff0c;并且做了深度的优化和扩展。以下是 MyBatis-Plus 的一些主要特性和功能&#…

视频渲染靠cpu还是显卡 会声会影视频渲染的作用是什么

视频渲染最占用的资源就是CPU&#xff0c;多核心多线程&#xff0c;这样才能渲染快。渲染可以在时间线上实时平滑预览&#xff0c;便于编辑&#xff0c;最终导出成片的时候速度也会快一些&#xff0c;渲染就是对每桢的图像进行重新优化的过程。 渲染的作用主要是能够保证使用者…

Layui技术积累

2024.01.24 1.Layui 栅格系统 在 Layui 的栅格系统中&#xff0c;屏幕尺寸的划分为&#xff1a; 中等屏幕&#xff08;md&#xff09;&#xff1a; 12 列小屏幕&#xff08;sm&#xff09;&#xff1a; 12 列极小屏幕&#xff08;xs&#xff09;&#xff1a; 12 列 不同的类名…