mysql约束和高级sql

server/2024/11/25 12:03:55/

约束

MySQL中的约束用于定义表中数据的规则,以确保数据的准确性和可靠性。以下是MySQL中常用的一些约束类型及其概述:

  1. PRIMARY KEY(主键):唯一标识表中每条记录的字段或字段组合,一个表中只能有一个主键。
  2. 主键字段的值不能为NULL。
  3. FOREIGN KEY(外键):用于建立两个表之间的关系,确保引用的数据的完整性,外键字段的值必须在它所引用的表中存在,或者为NULL(取决于外键约束的设置)。
  4. UNIQUE(唯一约束):保证列中的所有值都是唯一的,即不允许有重复的值
  5. NOT NULL(非空约束):确保列中的值不能为NULL。
  6. CHECK(检查约束):用于限制列中的值必须满足的条件。(在MySQL 8.0.16及更高版本中支持)
  7. DEFAULT(默认值):当没有为列提供值时,将使用默认值。
  8. AUTO_INCREMENT(自增):用于整数类型的列,自动为新记录生成一个唯一的数字。

sql_18">高级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语句来管理事务:

  1. START TRANSACTION 或 BEGIN:标记事务的开始。
  2. COMMIT:提交事务,将事务中的所有更改永久保存到数据库中。
  3. ROLLBACK:回滚事务,撤销自事务开始以来的所有更改,使数据库回到事务开始前的状态。

自动提交模式默认情况下,MySQL在执行每个SQL语句后会自动提交事务。但是,你可以通过设置autocommit变量来控制这个行为:

  1. SET autocommit=OFF或SET autocommit=0:关闭自动提交,这样就需要显式地使用COMMIT或ROLLBACK来结束事务。
  2. 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.创建存储过程

  1. DELIMITER:改变MySQL的命令结束符,因为存储过程中会用;作为SQL语句的结束,如果不改变结束符,MySQL会错误地在第一个;处结束存储过程的定义。
  2. CREATE PROCEDURE:用来创建新的存储过程。
  3. 参数:存储过程可以有参数,参数有三种类型:IN(输入参数)、OUT(输出参数)和INOUT(既可输入也可输出)。

2.存储过程体

  1. BEGIN … END:存储过程的主体部分,包含了要执行的SQL语句。
  2. DECLARE:用来声明局部变量。
  3. SET:用来给变量赋值。

示例:

DELIMITER //CREATE PROCEDURE SumTwoNumbers(IN num1 INT, IN num2 INT, OUT result INT)
BEGINSET result = num1 + num2;
END //DELIMITER ;
  1. DELIMITER //改变了MySQL的默认分隔符,这样我们就可以在存储过程内部使用分号。
  2. CREATE PROCEDURE SumTwoNumbers 创建了一个名为 SumTwoNumbers 的存储过程。
  3. IN num1 INT, IN num2 INT 定义了两个输入参数 num1 和 num2 ,它们都是整数类型。
  4. OUT result INT 定义了一个输出参数 result ,它也是整数类型,用于存储计算结果。
  5. SET result = num1 + num2; 是存储过程的核心,它将两个输入参数相加,并将结果赋值给输出参数 result 。
  6. END 标记了存储过程的结束。
  7. DELIMITER ; 将分隔符重置回默认的分号。

如果要调用该存储内容:

CALL SumTwoNumbers(10, 20, @sumResult);
SELECT @sumResult;

http://www.ppmy.cn/server/144790.html

相关文章

第2.3 AI文本—prompt入门

AIGC(生成式人工智能)对我们教师工作帮助是非常大的。我们教师要充分认识AIGC技术在辅助教学工作、行政工作、个人晋升成长、日常工作的重要性,并能熟练掌握国内主流的AIGC工具,最终达成教学工作提质增效目的。 辅助教学工作&…

PCA算法所体现的核心数学思维

一、PCA算法的基本思想 PCA算法的核心思想是通过线性变换,将数据从原始的高维空间投影到低维空间,同时尽可能保留数据的主要变异性。这种变换是通过找到一组新的坐标轴(即主成分)来实现的,这些坐标轴是原始数据空间的…

深入解析信号量:定义与环形队列生产消费模型剖析

一、定义 信号量,从本质上来说,它是一种特殊的计数器。其核心作用在于对临界资源中资源数量进行精确的描述与把控。以电影院为例,观众们会竞相选择不同的座位,而这些座位作为共享资源,被拆分成了多个独立的部分。只…

以太坊Beam Chain;后量子聚合签名;

目录 以太坊Beam Chain 愿景 技术层构建 区块生产: 质押: 密码学: 后量子聚合签名 后量子聚合签名简介 使用哈希函数实现后量子聚合签名 简单举例说明 优势 以太坊Beam Chain 提议是对以太坊共识层的一次大规模重新设计,旨在实现以太坊的长期愿景和技术目标。以…

moduo之线程池ThreadPool

简介 moduo实现了通用业务线程池,其任务使用无参的函数对象,其任务队列使用的是有界的队列 结构 #mermaid-svg-1tUORFhOtpA7H0hc {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1tUORFhOtp…

yolo算法详解

作为一名计算机专业的专家,我对YOLO(You Only Look Once)算法有着深入的了解。以下是对YOLO的详细介绍: 一、基本概念YOLO是一种流行的目标检测算法,它基于卷积神经网络(CNN)进行目标检测任务。与传统的目标检测算法(如R-CNN系列)不同,YOLO的核心思想是将目标检测问题…

Figma入门-基本操作制作登录页

Figma入门-基本操作制作登录页 前言 在之前的工作中,大家的原型图都是使用 Axure 制作的,印象中 Figma 一直是个专业设计软件。 最近,很多产品朋友告诉我,很多原型图都开始用Figma制作了,并且很多组件都是内置的&am…

241124学习日志——[CSDIY] [ByteDance] 后端训练营 [14]

CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!&…