mysql约束和高级sql
约束
MySQL中的约束用于定义表中数据的规则,以确保数据的准确性和可靠性。以下是MySQL中常用的一些约束类型及其概述:
- PRIMARY KEY(主键):唯一标识表中每条记录的字段或字段组合, 一个表中只能有一个主键。
- 主键字段的值不能为NULL。
- FOREIGN KEY(外键):用于建立两个表之间的关系,确保引用的数据的完整性,外键字段的值必须在它所引用的表中存在,或者为NULL(取决于外键约束的设置)。
- UNIQUE(唯一约束):保证列中的所有值都是唯一的,即不允许有重复的值
- NOT NULL(非空约束):确保列中的值不能为NULL。
- CHECK(检查约束):用于限制列中的值必须满足的条件。(在MySQL 8.0.16及更高版本中支持)
- DEFAULT(默认值):当没有为列提供值时,将使用默认值。
- AUTO_INCREMENT(自增):用于整数类型的列,自动为新记录生成一个唯一的数字。
高级sql
MySQL 提供了多种高级功能来处理复杂的数据操作和业务逻辑。以下是你提到的几个关键概念的简要介绍:
1.子查询(Subquery):子查询是嵌套在另一个查询中的 SQL 查询。它可以返回单个值、一行或多行结果。子查询通常用在SELECT、INSERT、UPDATE和DELETE语句中,可以用于条件表达式或作为值提供者。
SELECT name, MAX(salary) AS max_salary
FROM employees
WHERE salary = (SELECT MAX(salary)FROM salaries
);
首先确定 salaries 表中最高的薪资是多少,然后在外层查询中查找 employees 表中薪资等于这个最高值的员工信息。
2. 连接(JOIN):连接用于结合两个或多个表的行,基于相关的列。MySQL 支持多种类型的连接,包括内连接、左连接、右连接和全连接(FULL JOIN)。
SELECT books.title, authors.name
FROM books
INNER JOIN authors ON books.author_id = authors.id;
这个查询的结果将是一个包含两列的表 books.title 和 authors.name,每一行都对应一个书籍及其作者的名称。
3.事务 (Transaction) : 事务用于处理操作量大,复杂度高的数据。事务是一组SQL语句的集合,它们要么全部成功执行,要么全部不执行,把一系列的操作放在一个地方,然后再决定是否生效。这种特性被称为原子性(Atomicity)。事务还必须满足一致性(Consistency)、隔离性(Isolation)和持久性(Durability)这三个特性,通常合称为ACID特性。
事务的基本操作MySQL通过以下三个主要的SQL语句来管理事务:
- START TRANSACTION 或 BEGIN:标记事务的开始。
- COMMIT:提交事务,将事务中的所有更改永久保存到数据库中。
- ROLLBACK:回滚事务,撤销自事务开始以来的所有更改,使数据库回到事务开始前的状态。
自动提交模式默认情况下,MySQL在执行每个SQL语句后会自动提交事务。但是,你可以通过设置autocommit变量来控制这个行为:
- SET autocommit=OFF或SET autocommit=0:关闭自动提交,这样就需要显式地使用COMMIT或ROLLBACK来结束事务。
- SET autocommit=ON或SET autocommit=1:开启自动提交,每个SQL语句执行后都会自动提交。
事务的使用示例:
-- 开始事务
START TRANSACTION;-- 给学生ID为1的学生增加10分
UPDATE student_scores SET score = score + 10 WHERE student_id = 1;-- 检查是否更新成功
IF (SELECT ROW_COUNT()) > 0 THEN-- 如果更新成功,提交事务COMMIT;-- 查询更新后的结果SELECT * FROM student_scores WHERE student_id = 1;
ELSE-- 如果更新失败,回滚事务ROLLBACK;-- 查询当前的分数,确认没有变化SELECT * FROM student_scores WHERE student_id = 1;
END IF;
正确使用事务可以确保数据库操作的原子性和一致性,避免数据不一致的问题。
4.存储过程: MySQL存储过程是一组为了完成特定功能的SQL语句集合,它被编译并存储在数据库中,可被多次调用执行,使用存储过程可以提高性能,加强可维护性。
1.创建存储过程
- DELIMITER:改变MySQL的命令结束符,因为存储过程中会用;作为SQL语句的结束,如果不改变结束符,MySQL会错误地在第一个;处结束存储过程的定义。
- CREATE PROCEDURE:用来创建新的存储过程。
- 参数:存储过程可以有参数,参数有三种类型:IN(输入参数)、OUT(输出参数)和INOUT(既可输入也可输出)。
2.存储过程体
- BEGIN ... END:存储过程的主体部分,包含了要执行的SQL语句。
- DECLARE:用来声明局部变量。
- SET:用来给变量赋值。
示例:
DELIMITER //CREATE PROCEDURE SumTwoNumbers(IN num1 INT, IN num2 INT, OUT result INT)
BEGINSET result = num1 + num2;
END //DELIMITER ;
- DELIMITER //改变了MySQL的默认分隔符,这样我们就可以在存储过程内部使用分号。
- CREATE PROCEDURE SumTwoNumbers 创建了一个名为 SumTwoNumbers 的存储过程。
- IN num1 INT, IN num2 INT 定义了两个输入参数 num1 和 num2 ,它们都是整数类型。
- OUT result INT 定义了一个输出参数 result ,它也是整数类型,用于存储计算结果。
- SET result = num1 + num2; 是存储过程的核心,它将两个输入参数相加,并将结果赋值给输出参数 result 。
- END 标记了存储过程的结束。
- DELIMITER ; 将分隔符重置回默认的分号。
如果要调用该存储内容:
CALL SumTwoNumbers(10, 20, @sumResult);
SELECT @sumResult;
相关文章:
mysql约束和高级sql
约束 MySQL中的约束用于定义表中数据的规则,以确保数据的准确性和可靠性。以下是MySQL中常用的一些约束类型及其概述: PRIMARY KEY(主键):唯一标识表中每条记录的字段或字段组合, 一个表中只能有一个主键…...
蓝桥杯真题——三角回文数(C语言)
问题描述 对于正整数 n, 如果存在正整数 k 使得 n123⋯kk(k1)2n123⋯kk(k1)/2, 则 n 称为三角数。例如, 66066 是一个三角数, 因为 66066123⋯36366066123⋯363 。 如果一个整数从左到右读出所有数位上的数字, 与从右到左读出所有数位 上的数字是一样的, 则称这个数为回文数…...
uni-app 封装图表功能
文章目录 需求分析1. 秋云 uchars2. Echarts 需求 在 uni-app 中使用图表功能,两种推荐的图表工具 分析 在 Dcloud市场 搜索Echarts关键词,会出现几款图表工具,通过大家的下载量,可以看到秋云这个库是比较受欢迎的,其…...
Kubernetes的基本构建块和最小可调度单元pod-0
文章目录 一,什么是pod1.1pod在k8s中使用方法(1)使用方法一(2)使用方法二 1.2pod中容器的进程1.3pod的网络隔离管理(1)pause容器的作用 1.4 Pod分类:(1)自主式…...
QT创建按钮篇
QT创建按钮篇 1.概述 这篇文章从创建一个按钮对QT开发流程熟悉。 2.代码 #include "mywidget.h" #include <QPushButton>myWidget::myWidget(QWidget *parent): QWidget(parent) { // 第一种创建按钮方式 // QPushButton *btn new QPushButton(); /…...
初级软件测试工程师就别出口喊15K了,连自动化测试都不会,还不如应届生
一. 为什么学软件测试 零基础转行,为什么首选软件测试? 软件测试是软件开发的重要过程之一,是软件质量的保证。国外信息技术领域软件开发人员与测试人员的比例是1:1,而国内目前专业软件测试人员很少,属于紧缺型人才&a…...
Mybatis查询数据库,返回List集合,集合元素也是List。
#有时间需求会要求:查询全校的学生数据,且学生数据按班级划分。那么就需要List<List<user>>类型的数据。 SQL语句 SELECT JSON_ARRAYAGG(JSON_OBJECT(name , name ,BJMC, BJMC ,BJBH,BJBH)) as dev_user FROM dev_user WHERE project_id …...
SQL 视图:概念、应用与最佳实践
SQL 视图:概念、应用与最佳实践 SQL(Structured Query Language)视图是数据库管理中的一个重要概念,它允许用户以虚拟表的形式查看数据。视图在数据库中并不实际存储数据,而是提供了一个查询结果的快照,这…...
ubuntu交叉编译expat库给arm平台使用
1.下载expat库源码: https://github.com/libexpat/libexpat/release?page=2 wget https://github.com/libexpat/libexpat/release/download/R_2_3_0/expat-2.3.0.tar.bz2 下载成功: 2.解压expat库,并进入解压后的目录: tar xjf expat-2.3.0.tar.bz2 cd expat-2.3.0 <…...
成都郝蓉宜恺文化传媒有限公司以诚信经营赢得客户长期信赖
成都郝蓉宜恺文化传媒有限公司秉承深厚的企业文化和价值观,其中“以诚信经营为本”是其核心理念之一。以下是对该公司如何以诚信经营为基础,赢得客户长期信赖的几点客观分析: 1.建立信任基石:在商业领域,信任是客户与企…...
LabVIEW for Linux 介绍
LabVIEW for Linux 介绍 1. 兼容性 LabVIEW for Linux 设计用于多种 Linux 发行版,包括 CentOS、Ubuntu 等。在安装之前,务必检查与您特定发行版版本的兼容性。 2. 程序移植 可移植性:在许多情况下,LabVIEW 程序(VI…...
一次32bit有符号数据类型转换为64bit无符号数据类型引发的溢出错误
现象: 在调试一款sensor,通过10帧->8帧->6帧,这样不断的降低帧率调试低照度下的图像效果。ISP配置文件上设置的最大曝光曝光参数为: EXP:15266 Again:15494 Dgain:714 ISPDGain:1360。 当达到最低帧率最低亮度时&#x…...
aosp安卓15新特性dump的wms窗口层级树优化的更加美观
背景: 近来在体验调试aosp15时候,使用了dumpsys activity containers时候,发现wms层级结构树有一个巨大的变化。 很多学员朋友对这个优化改进都给出巨大的点赞,有的学员朋友还想老版本自己实现一下这种树绘制: 对比…...
git的使用、router和route的区别以及v-show和v-if的差别
这里写目录标题 多人协作使用git的步骤(使用gitub)建立自己的空仓库连接远程仓库使伙伴可以使用仓库将代码拉入空仓库进行git指令的学习 router和route的区别router定义:用途: route定义:用途: v-show和v-i…...
Win系统通过命令行查看笔记本电池损耗/寿命/健康
在 Windows 10/11 系统中,可以通过指令查看笔记本电池的寿命情况,方法如下: 0,打开cmd/终端 键盘快捷键:Win R,然后输入cmd,点击【确定】 1,执行命令 在命令行中输入下面指令并按…...
【安当产品应用案例100集】029-使用安全芯片保护设备核心业务逻辑
我国工业企业普遍缺乏数据安全意识,对数据安全保护缺乏基本认识。这导致企业在数据安全方面的投入不足,保护能力基本不具备,难以有效应对数据安全风险。不过随着安全事件越来越多,很多工业企业的安全意识也越来越高,在…...
Redis高级篇之缓存一致性详细教程
文章目录 0 前言1.缓存双写一致性的理解1.1 缓存按照操作来分 2. 数据库和缓存一致性的几种更新策略2.1 可以停机的情况2.2 我们讨论4种更新策略2.3 解决方案 总结 0 前言 缓存一致性问题在工作中绝对没办法回避的问题,比如:在实际开发过程中,…...
C++ 文件操作详解
C 文件操作详解 在C中,文件操作分为文本文件和二进制文件的操作,通过文件流类(ifstream、ofstream、fstream)进行文件的读写。这些类封装了文件的输入和输出操作,并继承了istream和ostream的功能,使得流对…...
计算机网络:网络层 —— 边界网关协议 BGP
文章目录 路由选择协议动态路由协议边界网关协议 BGPBGP 的基本概念BGP-4 的四种报文 路由选择协议 因特网是全球最大的互联网,它所采取的路由选择协议具有以下三个主要特点: 自适应:因特网采用动态路由选择,能较好地适应网络状态…...
Python数据可视化seaborn
产品经理在做数据分析时可能需要通过可视化来分析。seaborn官网 1. relplot 散点图 https://seaborn.pydata.org/examples/scatterplot_sizes.html import pandas as pd import seaborn as sns df pd.DataFrame({x: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],y: [8, 6, 7, 8, 4, 6,…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
