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,…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

Ubuntu Cursor升级成v1.0
0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开,快捷键也不好用,当看到 Cursor 升级后,还是蛮高兴的 1. 下载 Cursor 下载地址:https://www.cursor.com/cn/downloads 点击下载 Linux (x64) ,…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器
拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件: 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...

Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
【java】【服务器】线程上下文丢失 是指什么
目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失? 直观示例说明 为什么上下文如此重要? 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程,代码应该如何实现 推荐方案:使用 ManagedE…...