MySQL高级详解

文章目录

  • 约束
    • 概述
    • 分类
    • 主键约束
      • 概述
      • 特点
      • 定义及删除
      • 主键自增
    • 唯一约束
      • 作用
      • 语法
    • 非空约束
      • 作用
      • 语法
    • 面试题:非空+唯一约束与主键约束有什么区别
    • 默认值约束
      • 作用
      • 语法
    • 总结
  • 表关系及外键约束
    • 表关系
      • 概述
      • 分类
      • 一对多关系表设计
        • 外键字段
        • 设计原则
      • 多对多关系表设定
        • 设计原则
      • 一对一关系表设定
        • 设计原则
  • 外键约束
    • 概述
    • 语法
    • 注意事项
      • 外键的级联
        • 概述
        • 语法
  • 多表查询
    • 笛卡尔积
      • 概述
      • 消除方式
    • 内连接查询
      • 隐式内连接
      • 显示内连接
      • 区别
    • 外连接查询
      • 左外连接
      • 右外连接
    • 子查询
      • 单行单列
      • 多行单列
      • 多行多列

约束

概述

就是一种限制,用于修饰表中的列。
通过这种限制来保证表中数据的正确性有效性完整性

分类

Snipaste_2024-04-11_20-29-20.png

主键约束

概述

设定表中某一字段为主键,那么该字段所在列的数据就能够唯一的标识表中的每一行数据

特点

唯一,非空,非业务相关

定义及删除

  1. 在建表时进行指定

create table 表名 (id int primary key,其他字段,…);

  1. 在已有表中进行指定(原来表没有主键)

alter table 表名 add primary key(字段);

  1. 删除主键

alter table 表名 drop primary key;

主键自增

使用原因:设置主键,如果让我们自己添加主键很有可能有重复的主键而导致数据添加失败,所以我们通常希望在每次插入新纪录时,数据库自动生成主键字段的值
语法
字段名 字段类型 primary key auto_increment;
注意:需要让主键自动增加,主键需要是整数类型
举例
Snipaste_2024-04-11_20-42-12.png
delete和truncate删表对id的影响

  1. delete删除表中的数据,不重置auto_increment的值

就是说用delete删除了id为3的数据,当下次增加一个数据时,id为4

  1. truncate摧毁表,重建表,重置auto_increment的值

使用truncate删除表,当增加数据时,id从1开始自增
设置主键从指定值自增
如果相自定义id的值,可以设定自动增加起始值语法
alter table 表名 auto_increment = 起始值;

唯一约束

作用

被唯一约束的字段,本列数据不允许出现重复数据,null除外,null可以出现多个

语法

  1. 创建表时指定

create table 表名 (字段名 字段类型 unique,其他字段名,…);

  1. 已有表给指定字段添加唯一约束

alter table 表名 add unique(字段);

非空约束

作用

被非空约束的字段,本列数据不允许出现null(即空)数据。

语法

  1. 创建表时指定

create table 表名(字段名 字段类型 not null,其他字段名,…);

  1. 已有表给指定字段添加非空约束

alter table 表名 modify 字段 类型 not null

面试题:非空+唯一约束与主键约束有什么区别

  1. 主键约束在表中只能存在一个,但是非空+唯一约束可以存在多个
  2. 主键可以添加自增约束,但是非空+唯一不能
  3. 主键约束底层维护了一个主键索引,而唯一约束底层维护的是唯一索引(这个知识点后面会描述)

默认值约束

作用

被默认值约束的字段,相当于给字段添加默认值,插入数据值如果字段没有被赋值,则使用默认值
:null相当于空值,也是被赋于值,所以写null时不会使用默认值

语法

  1. 创建表时指定

create table 表名(字段名 字段类型 default 默认值,其他字段,…);

  1. 已有表给指定字段添加默认值约束

alter table 表名 modify 字段 类型 default 默认值;

总结

约束特点关键字
主键约束非空,唯一primary key
唯一约束唯一unique
非空约束列值不能为nullnot null
默认值约束添加默认值default 值

表关系及外键约束

表关系

概述

数据库中的表描述的事物,我们一般被称为实体,实体于实体是存在关系,那么表于表之间也就存在关系

分类

  1. 一对一 (老公和老婆)
  2. 一对多 (部门和员工)
  3. 多对多 (学生和课程)

一对多关系表设计

一个用户可以有多个订单,一个定义只能属于一个用户
用户:订单<=>1:n

外键字段

"一方"叫主表,"多方"叫从表
设计时通常会在从表添加一个字段,用于存放主表主键的值,这个字段叫外键字段
外键存在一种约束,只能是主表中主键存在的值,这样就保证主从表数据之间对应的一致性和完整性

设计原则

在多方创建一个字段作为外键,从表外键值指向一方中的主键
也就是在订单表中设置一个字段user_id(外键字段),里面存放用户表的id主键值

多对多关系表设定

设计原则

需要创建第三张表作为中间表,中间表至少俩个字段(外键字段),分别指向各自一方的主键

一对一关系表设定

设计原则
  1. 两张表合并为一张表
  2. 如果必须要创建外键,任选其中一方作为从表如何设置外键字段

外键约束

概述

就是从表中设定一个字段,用来保存主表中的主键值。
外键约束力从表的外键值只能是主表的主键值

语法

  1. 创建表示时创建外键

create table 表名(
其他字段,
外键字段名 int,
constraint 外键名 foreign key (当前表外键字段名) references 主表名(主键字段)
);

  1. 修改字段为外键

alter table 表名 add constraint 外键名 foreign key (当前表外键字段名) rederence 主表名(主键字段);

  1. 删除

alter table 从表名 drop foreign key 外键名;
Snipaste_2024-04-11_21-38-36.png

注意事项

  1. 添加数据时

先添加主表的数据,再添加从表的数据

  1. 删除数据时

先删从表中的数据,再删主表中的数据

  1. 修改数据时

如果主表中的主键被从表引用了,不能修改此主键的值

外键的级联

概述

就是在修改或者删除主键是可以同时对从表的外键进行修改或删除

语法

on update cascade 修改
on delete cascade 删除
Snipaste_2024-04-11_21-47-13.png

多表查询

笛卡尔积

概述

多张表查询时每张表的每条数据组合成的数据结果集,叫做笛卡尔积(交叉组合)
当我们发现不是所有的数据都是有用,所以就要消除笛卡尔积

消除方式

条件: 从表.外键 = 主表.主键

内连接查询

隐式内连接

select 列名 from 左表,右表 where 从表.外键 = 主表.主键;

显示内连接

select 列名 from 左表 [inner] join 右表 on 从表.外键 = 主表.主键;

区别

结果一样,隐式内连接先进行笛卡尔积在筛选数据;而显示内连接在查询时就对数据进行过滤
显示内连接更能代表内连接
Snipaste_2024-04-11_22-12-10.png

外连接查询

左外连接

左表中所有的记录都出现在结果中,如果右表没有匹配的记录,使用null填充
select 列名 from 坐标 left join 右表 on 从表.外键 = 主表.主键;
Snipaste_2024-04-11_22-14-22.png

右外连接

右表中所有的记录都出现在结果中,如果左表没有匹配的记录,使用null填充
select 列名 from 坐标 right join 右表 on 从表.外键 = 主表.主键;
Snipaste_2024-04-11_22-14-26.png

子查询

单行单列

父查询使用比较运算符: > < =

多行单列

子查询可以认为是一个数组,父查询用in,all,any关键字
Snipaste_2024-04-11_22-16-58.png

多行多列

子查询可以认为它是一个虚拟表,可以使用表连接再次进行多表查询
注意:如果要访问子查询表的字段,需要为子查询表取别名,否则无法访问表中的字段

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux下网络编程基础知识--协议

网络基础 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 协议 一组规则, 数据传输和数据的解释的规则。 比如说依次发送文件的文件名, 文件的大小, 以及实际的文件, 这样规定发送一个文件的顺序以及发送的每一个部分的格式等可以算是一种协议 型协议 …

探索ChatGPT-Plus:AI 助手全套开源解决方案

探索ChatGPT-Plus&#xff1a;AI 助手全套开源解决方案 ChatGPT-plus是一种新型的对话生成模型&#xff0c;它是在OpenAI的ChatGPT基础上进行了改进和优化的版本。ChatGPT-plus的出现引起了广泛关注&#xff0c;因为它在对话生成方面展现出了更加出色的表现和能力。在本文中&am…

【C++第三阶段】stackqueue容器

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 stack容器queue容器 stack容器 是什么&#xff1f;功能是什么&#xff1f;常用接口是什么&#xff1f;局限性有哪些&#xff1f;优势又有哪些&#xff1f; 栈容器&#xff0c;先进…

智能驾驶“血拼”端到端,元戎启行准备好了吗?

智能驾驶从规则驱动转向数据驱动&#xff0c;正在引导行业进入新的竞争区间。 在之前的中国电动汽车百人会论坛(2024) 上&#xff0c;比亚迪董事长兼总裁王传福认为&#xff0c;新能源汽车渗透率在未来3个月将超过50%。自动驾驶公司元戎启行CEO周光指出&#xff0c;在上半场的…

Python实现BOA蝴蝶优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝴蝶优化算法(butterfly optimization algorithm, BOA)是Arora 等人于2019年提出的一种元启发式智能算…

社交网络的未来图景:探索Facebook的发展趋势

随着科技的不断进步和社会的快速变迁&#xff0c;社交网络作为连接人与人之间的重要纽带&#xff0c;扮演着日益重要的角色。而在众多社交网络中&#xff0c;Facebook作为老牌巨头&#xff0c;一直在探索着新的发展路径&#xff0c;引领着社交网络的未来图景。本文将深入探索Fa…

跟着Carl大佬学leetcode之27 移除元素

来点强调&#xff0c;刷题是按照代码随想录的顺序进行的&#xff0c;链接如下https://www.programmercarl.com/本系列是记录一些刷题心得和学习过程&#xff0c;就看到题目自己先上手试试&#xff0c;然后看程序员Carl大佬的解释&#xff0c;自己再敲一遍修修补补&#xff0c;练…

数组与伪数组的区别

大家都知道&#xff0c;在js中使用 document.querySelectorAll(选择器&#xff09;获取到的为该选择器能选择到的所有元素组成的伪数组&#xff0c;所谓伪数组&#xff0c;就是外表和数组一样&#xff0c;能够使用索引遍历&#xff0c;但本质是对象。 数组与伪数组之间的区别&…

C语言面试题之合法二叉搜索树

合法二叉搜索树 实例要求 实现一个函数&#xff0c;检查一棵二叉树是否为二叉搜索树&#xff1b; 示例 1: 输入:2/ \1 3 输出: true 示例 2: 输入:5/ \1 4/ \3 6 输出: false 解释: 输入为: [5,1,4,null,null,3,6]。根节点的值为 5 &#xff0c;但是其右子节点值为 4 …

测试开发是“懂测试的开发”还是“懂开发的测试”?

这是个很有意思的话题&#xff0c;我一开始画了这么一张图&#xff1a; 就我自身的工作而言&#xff0c;用着开发的技术&#xff0c;做着开发差不多的工作。归为开发一类并无不妥&#xff01; 后来&#xff0c;我细细琢磨了一下&#xff0c;改为了下图。 其实答案也非常明显&a…

动态调整学习率方法(仅供自己学习)

目录 一、StepLR 二、MultiStepLR 三、ExponentialLR 四、CosineAnnealingLR 五、ReduceLRonPlateau 六、LambdaLR 小结&#xff1a;学习率调整​​​​​​​ 一、StepLR optimizer torch.optim.SGD(model.parameters(), lrlearn_rate) scheduler torch.optim.lr_sch…

Linux目录结构知识

一、认识Linux目录 1) Linux目录结构知识 1&#xff09; win: 目录顶点是盘符 C/D/E 。所有的目录结构都在不同的盘符下面&#xff0c;不同的盘之间不能沟通的。 2&#xff09; Linux: 目录顶点是 / &#xff0c;称为根。所有的目录结构都在根下面&#xff0c;他的目录之间都…

Day37:LeedCode 738.单调递增的数字 968.监控二叉树 蓝桥杯 翻转

738. 单调递增的数字 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0c;且数字呈 单调递增 。 示例 1: 输入: n 10 输出: 9 思路: 假设这个数是98,…

MuJoCo 入门教程(八)Model仓库

系列文章目录 前言 一、MuJoCo 动物园 一个物理仿真器的好坏取决于它所仿真的模型&#xff0c;而在像 MuJoCo 这样功能强大、建模选项众多的仿真器中&#xff0c;很容易创建出行为与预期不符的 "坏 "模型。MuJoCo Menagerie 的目标是为社区提供一个设计精良、开箱即用…

WinRAR再爆0 day漏洞,0 day漏洞该如何有效预防

WinRAR再爆0 day漏洞&#xff0c;已被利用超过4个月。 Winrar是一款免费的主流压缩文件解压软件&#xff0c;支持绝大部分压缩文件格式的解压&#xff0c;全球用户量超过5亿。Group-IB研究人员在分析DarkMe恶意软件时发现WinRAR在处理ZIP文件格式时的一个漏洞&#xff0c;漏洞…

内存管理机制SLAB

1. 为什么需要内存分配管理&#xff1f;为什么需要SLAB&#xff1f; 在学习c语言时&#xff0c;我们常常会使用到malloc()去申请一块内存空间&#xff0c;用于存放我们的数据&#xff0c;这是代码层面的语言 如果我们想要关心malloc这个命令向系统发出后&#xff0c;系统会做什…

javaee前后端交互

1.选择Java Enterprise创建项目 2.勾选Web Profile 3.项目名称 4.创建包和类 5.继承HttpServlet并重写方法doGet和doPost 6.在web.xml里添加代码 7.点击Add Configuration,进去后点击加号 8.选择选项 9.调整如图&#xff0c;后选择Deployment进入 10.点击加号选择第一个 11.…

【InternLM 实战营第二期笔记】使用茴香豆搭建你的RAG智能助理

RAG RAG是什么 RAG&#xff08;Retrieval Augmented Generation&#xff09;技术&#xff0c;通过检索与用户输入相关的信息片段&#xff0c;并结合外部知识库来生成更准确、更丰富的回答。解决 LLMs 在处理知识密集型任务时可能遇到的挑战, 如幻觉、知识过时和缺乏透明、可追…

【vue】v-bind动态属性绑定

v-bind 简写:value <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><styl…

【赛题】2024年“认证杯”数模网络挑战赛赛题发布

2024年"认证杯"数学建模网络挑战赛——正式开赛&#xff01;&#xff01;&#xff01; 赛题已发布&#xff0c;后续无偿分享各题的解题思路、参考文献、完整论文可运行代码&#xff0c;帮助大家最快时间&#xff0c;选择最适合是自己的赛题。祝大家都能取得一个好成…