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 (当前表外键字段名) reference 主表名(主键字段);

  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

多行多列

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

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

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

相关文章

Qt:窗口、按钮类、行编辑器、标签类

作业&#xff1a;QQ登录界面 mywidget.h #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include <QIcon> #include<QMovie> #include <QLabel> #include <QPushButton> #include <QLineEdit> class MyWidget : public QWid…

java: 警告: 源发行版 17 需要目标发行版 17,java17 无效的目标发行

注意&#xff1a;下述方法经使用后仍不能解决&#xff0c;请挨个返回各个步骤&#xff0c;查看是否真正修改过来。因为网络或 其他问题&#xff0c;可能有缓存。【多修改统一几次&#xff0c;一定会成功&#xff0c;亲测】 一、出现错误场景 场景&#xff1a;启动类是&#x…

jenkins 启动linux节点时 控制台中文显示问号乱码

新增一个jenkins节点时&#xff0c;遇到了控制台中文输出问号的问题。 网上各种配置jenkins的全局变量&#xff0c;都不行。 最终是 节点列表 ->对应节点 -> 启动方式 -> 高级 添加JVM选项 -Dfile.encodingUTF-8

电商技术揭秘十九:电商平台的智能化与自动化技术

相关系列文章 电商技术揭秘一&#xff1a;电商架构设计与核心技术 电商技术揭秘二&#xff1a;电商平台推荐系统的实现与优化 电商技术揭秘三&#xff1a;电商平台的支付与结算系统 电商技术揭秘四&#xff1a;电商平台的物流管理系统 电商技术揭秘五&#xff1a;电商平台…

[Kubernetes[K8S]集群:master主节点初始化]:通过Calico和Coredns网络插件方式安装

文章目录 操作流程&#xff1a;前置&#xff1a;Docker和K8S安装版本匹配查看0.1&#xff1a;安装指定docker版本 **[1 — 7] ** [ 配置K8S主从集群前置准备操作 ]一&#xff1a;主节点操作 查看主机域名->编辑域名->域名配置二&#xff1a;安装自动填充&#xff0c;虚拟…

libcurl 简单实用

LibCurl是一个开源的免费的多协议数据传输开源库&#xff0c;该框架具备跨平台性&#xff0c;开源免费&#xff0c;并提供了包括HTTP、FTP、SMTP、POP3等协议的功能&#xff0c;使用libcurl可以方便地进行网络数据传输操作&#xff0c;如发送HTTP请求、下载文件、发送电子邮件等…

TSINGSEE青犀边缘计算AI智能分析网关V4客流统计算法的配置步骤及使用

TSINGSEE青犀AI智能分析网关V4内置了近40种AI算法模型&#xff0c;支持对接入的视频图像进行人、车、物、行为、烟火等实时检测分析&#xff0c;上报识别结果&#xff0c;并能进行语音告警播放。硬件支持RTSP、GB28181协议、以及厂家私有协议接入&#xff0c;可兼容市面上常见的…

VUE3组合式API

create-vue create-vue是Vue官方新的脚手架工具&#xff0c;底层切换到了vite,为开发提供极速相应 使用create-vue 1.安装16.0或者更高版本的Node.js 2.npm init vuelatest指令会安装并执行create-vue 项目目录和关键文件 组合式API Vue 3引入了组合式API&#xff08;Com…

实习记录小程序|基于SSM的实习记录小程序设计与实现(源码+数据库+文档)

知识管理 目录 基于SSM的习记录小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、小程序端&#xff1a; 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕…

机器学习machine learning

1. 概念 机器学习是从数据中提取知识。涉及统计学和人工智能&#xff0c;也被称为预测分析或统计学习。 应用领域非常广泛&#xff0c;用户习惯预测&#xff0c;个性推荐&#xff0c;分析DNA序列等等。 机器学习优势是将决策过程自动化&#xff0c;需要涉及较好的算法。如果…

数字化社交的引擎:解析Facebook的影响力

随着数字技术的飞速发展&#xff0c;社交网络已成为人们日常生活中不可或缺的一部分。而在这个数字化社交的世界中&#xff0c;Facebook作为最具影响力和知名度的平台之一&#xff0c;其所扮演的角色越发重要。本文将深入解析Facebook在数字化社交领域的影响力&#xff0c;并探…

Springboot实现链路追踪功能

前言 在日常开发中&#xff0c;一个业务的实现往往会调用很多个方法&#xff0c;当我们去看日志的时候&#xff0c;各种接口的日志打印出来&#xff0c;看着就头疼&#xff0c;压根没办法去定位&#xff0c;而链路追踪就能很好的帮助我们去查看接口从头至尾依次调用了哪些方法…

虚拟机中,IP地址查询失败怎么办

有时候ifconfig查出来的地址是下面这样&#xff0c;只有ipv6 只需要运行下面这两条命令&#xff0c;再次查询即可成功&#xff01; systemctl stop NetworkManagersystemctl start network.service

ELK日志分析系统+Filebeat

目录 一、Filebeat介绍 1、Filebeat简介 2、Filebeat的工作方式 3、filebeat工作流程 4、Filebeat的作用 5、filebeat的用途 1.为什么要用filebeat来收集日志&#xff1f;为什么不直接用logstash收集日志&#xff1f; 2.filebeat和logstash的区别 二、部署(ELFK)Fileb…

力扣HOT100 - 240. 搜索二维矩阵 II

解题思路&#xff1a; 从左下角开始&#xff0c;根据条件删除行和列。 class Solution {public boolean searchMatrix(int[][] matrix, int target) {int row matrix.length - 1;int col matrix[0].length - 1;int l 0;while (row > 0 && l < col) {if (targ…

AI人工智能讲师简历大模型讲师叶梓大模型技术与应用培训提纲

叶梓&#xff0c;工学博士&#xff0c;高级工程师。现某大型上市企业资深技术专家。 2005年上海交通大学计算机专业博士毕业&#xff0c;在校期间的主研方向为数据挖掘、机器学习、人工智能。毕业后即进入软件行业从事信息化技术相关工作&#xff1b;负责或参与了多项国家级、省…

linux的io的知识大全

C语言的io操作 写文件 #include<stdio.h> #include<string.h>#define FILE_NAME "log.txt" int main() {FILE * fp fopen(FILE_NAME, "w");if(fpNULL){printf("fopen error!\n");}const char* msg "hello zk\n";int c…

使用 Docker 部署 Linux-Command 命令搜索工具

1&#xff09;介绍 Linux-Command GitHub&#xff1a;https://github.com/jaywcjlove/linux-command Linux-Command 仓库搜集了 580 多个 Linux 命令&#xff0c;是一个非盈利性的仓库&#xff0c;生成了一个 Web 网站方便使用&#xff0c;目前网站没有任何广告&#xff0c;内…

阿里云服务器企业租用费用价格表

阿里云服务器企业租用费用价格表&#xff0c;企业专享2核4G5M带宽云服务器优惠价格199元一年&#xff0c;配置为阿里云服务器ECS u1实例&#xff0c;2核4G、5M固定带宽、80G ESSD Entry盘&#xff0c;其他的云服务器配置2核2G3M带宽价格99元一年、4核8G服务器955元一年&#xf…

Springboot+vue的粮仓管理系统的设计与实现(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的粮仓管理系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&am…