MySQL高级1.0

目录

📌MySQL存储过程和函数

✏️存储过程和函数介绍

✏️存储过程的创建和调用

✏️存储过程的查看和删除

✏️存储过程语法-变量

✏️存储过程语法-if语句

✏️存储过程语法-参数传递

✏️存储过程语法-while循环

✏️存储过程语法-存储函数

📌MySQL触发器

✏️触发器介绍

✏️触发器操作

📌MySQL事务

✏️事务介绍

✏️事务的操作

✏️事务的提交方式

✏️事务的四大特征(ACID)

✏️事务的隔离级别

📌隔离级别总结


📌MySQL存储过程和函数

✏️存储过程和函数介绍

存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句的集合。

  • 存储过程和函数的好处

提高代码的复用性。

减少数据在数据库和应用服务器之间的传输,提高效率。

减少代码层面的业务处理。

  • 存储过程和函数的区别

存储函数必须有返回值。

存储过程可以没有返回值。

✏️存储过程的创建和调用

  • 创建存储过程

-- 修改结束分隔符

DELIMITER$

-- 创建存储过程

CREATE PROCEDURE 存储过程名称(参数列表)

BEGIN

                          SQL语句列表;

END$

-- 修改结束分隔符

DELIMITER;

  • 调用存储过程

CALL 存储过程名称(实际参数);

✏️存储过程的查看和删除

  • 查看数据库中所有的存储过程

SELECT * FROM mysql.proc WHERE db='数据库名称';

  • 删除存储过程

DROP PROCEDURE [IF EXISTS] 存储过程名称;

✏️存储过程语法-变量

  • 定义变量

DECLARE 变量名 数据类型 [DEFAULT默认值];

  • 变量赋值方式一

SET 变量名 = 变量值;

  • 变量赋值方式二

SELECT 列名 INTO 变量名 FROM 表名 [WHERE 条件];

✏️存储过程语法-if语句

if语句标准语法

IF 判断条件1 THEN 执行的sql语句1;

[ELSEIF 判断条件2 THEN 执行的sql语句2;]

...

[ELSE 执行的sql语句n;]

END IF;

✏️存储过程语法-参数传递

  • 存储过程的参数和返回值

CREATE PROCEDURE 存储过程名称([IN|OUT|INOUT]参数名 数据类型)

BEGIN

                        SQL语句列表;

END$

IN:代表输入参数,需要由调用者传递实际数据(默认)

OUT:代表输出参数,该参数可以作为返回值

INOUT:代表既可以作为输入参数,也可以作为输出参数

✏️存储过程语法-while循环

  • while循环语法

初始化语句:

WHILE 条件判断语句 DO

                循环体语句;

                条件控制语句;

END WHILE;

✏️存储过程语法-存储函数

  • 存储函数和存储过程是非常相似的,区别在于存储函数必须有返回值。
  • 创建存储函数

CREATE FUNCTION 函数名称(参数列表)

RETURNS 返回值类型

BEGIN

                         SQL语句列表;

                          REUTRN结果;

END$

  • 调用存储函数

SELECT 函数名称(实际参数);

  • 删除存储函数

DROP FUNCTION 函数名称;

📌MySQL触发器

✏️触发器介绍

  • 触发器是与表有关的数据库对象,可以在insert、update、delete之前或之后触发并执行触发器中定义的SQL语句。
  • 这种特殊可以协助应用系统在数据库端确保数据的完整性、日志记录、数据校验等操作。
  • 使用别名NEW和OLD来引用触发器中发生变化的内容记录。
  • 触发器分类
触发器类型OLDNEW
INSERT型触发器无(因为插入前无数据)NEW表示将要或者已经新增的数据
UPDATE型触发器OLD表示修改之前的数据NEW表示将要或已经修改后的数据
DELETE型触发器OLD表示将要或者已经删除的数据无(因为删除后状态无数据)

✏️触发器操作

  • 创建触发器

DELIMITER $

CREATE TRIGGER 触发器名称

BEFORE|AFTER INSERT|UPDATE|DELETE

ON表名

FOR EACH ROW

BEGIN

                             触发器要执行的功能;

END$

DELIMITER;

  • 查看触发器

SHOW TRIGGERS;

  • 删除触发器

DROP TRIGGER 触发器名称;

📌MySQL事务

✏️事务介绍

  • 事务:一条或多条SQL语句组成一个执行单元,其特点是这个单元要么同时成功要么同时失败。
  • 单元中的每条SQL语句都相互依赖,形成一个整体。
  • 如果某条SQL语句执行失败或者出现错误,那么整个单元就会撤回到事务最初的状态。
  • 如果单元中所有的SQL语句都执行成功,则事务就顺利执行。

✏️事务的操作

  • 开启事务

START TRANSACTION;

  • 回滚事务

ROLLBACK;

  • 提交事务

COMMIT;

✏️事务的提交方式

  • 事务提交方式的分类

自动提交(mysql默认)

手动提交

  • 查看事务提交方式

SELECT @@AUTOCOMMIT;

  • 修改事务提交方式

SET @@AUTOCOMMIT=数字;

✏️事务的四大特征(ACID)

  • 原子性(Atomicity)

原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。

因此事务的操作如果成功就必须要要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

  • 一致性(Consistency)

一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态。

也就是说一个事务执行之前和执行之后都必须处于一致性状态。

  • 隔离险(isolcation)

隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务。

不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。

  • 持久性(durability)

持久性是指一个事务一但被提交了,那么对数据库中的数据的改变就是永久性的。

即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

✏️事务的隔离级别

  • 事务的隔离级别

多个客户端操作时,各个客户端的事务之间应该是隔离的,相互独立的,不受影响的。

而如果多个事务操作同一批数据时,就会产生不同的问题,我们需要设置不同的隔离级别来解决这些问题。

  • 隔离级别分类
隔离级别名称会引发的问题
read uncommitted读未提交脏读、不可重复读、幻读
read committed读已提交不可重复读、幻读
repeatable read可重复读幻读
serializable串行化

  • 引发的问题

问题现象
脏读在一个事务处理过程中读取到了另一个未提交事务中的数据,导致两次查询结果不一致
不可重复读在一个事务处理过程中读取到了另一个事务中修改并已提交的数据,导致两次查询结果不一致
幻读查询某数据不存在,准备插入此记录,但执行插入时发现此记录已存在,无法插入。或查询数据不存在执行删除操作,却发现删除成功

  • 查询数据库隔离级别

SELECT @@TX_ISOLATION;

  • 修改数据库隔离级别

SET GLOBAL TRANSACTIONISOLATION LEVEL 级别字符串;


📌隔离级别总结

序号隔离级别名称脏读不可重复读幻读数据库默认隔离级别
1read uncommitted读未提交 是
2read committed读已提交oracle
3repeatable read可重复读mysql
4serializable串行化

注意:隔离级别从小到大安全性越来越高,但是效率越来越低,所以不建议修改数据库默认的隔离级别。

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

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

相关文章

Linux高并发服务器开发(六)线程

文章目录 1. 前言2 线程相关操作3 线程的创建4 进程数据段共享和回收5 线程分离6 线程退出和取消7 线程属性(了解)8 资源竞争9 互斥锁9.1 同步与互斥9.2 互斥锁 10 死锁11 读写锁12 条件变量13 生产者消费者模型14 信号量15 哲学家就餐 1. 前言 进程是C…

【FFmpeg】avio_open2函数

【FFmpeg】avio_open2函数 1.avio_open21.1 创建URLContext(ffurl_open_whitelist)1.1.1 创建URLContext(ffurl_alloc)1.1.1.1 查找合适的protocol(url_find_protocol)1.1.1.2 为查找到的URLProtocol创建UR…

影响Cache命中率的因素有哪些?

缓存命中率(Cache Hit Rate)是指处理器访问缓存时,所需数据已经在缓存中找到的次数与总访问次数的比例。提高缓存命中率可以显著提升系统性能,因为缓存访问速度远快于主存访问速度。影响缓存命中率的关键因素包括: 1.…

C语言异常处理就机制setjmp()和longjmp()

C语言setjmp()和longjmp()实现异常处理机制。 setjmp() 用于保存当前的程序执行状态。 longjmp() 用于在后面的某个时刻返回到setjmp()点的状态。 类似goto。但goto是本地的,只能在函数内部跳转。 setjmp()和longjmp()是非局部跳转语句,可在调用栈上&a…

通信系统网络架构_3.移动通信网络架构

移动通信网为移动互联网提供了强有力的支持,尤其是5G网络为个人用户、垂直行业等提供了多样化的服务。以下从业务应用角度给出面向5G网络的组网方式。 1.5GS与DN互连 5GS(5G System)在为移动终端用户(User Equipment,…

CSRF的其他防范措施?

一般情况下,我们可以通过各种防护策略来防御CSRF,对于QA、SRE、安全负责人等,我们可以做哪些事情来提升安全性呢? 一、CSRF测试 CSRFTester是一款CSRF漏洞的测试工具,CSRFTester工具的测试原理大概是这样的&#xff…

BLACKBOX.AI:解锁开发新纪元,加速编程学习的AI神器!

文章目录 💯BLACKBOX.AI 官网🍁1 BLACKBOX.AI 工具使用教程🍁2 BLACKBOX.AI工具使用界面介绍🍁3 Chat(聊天)功能🍁4 Explore (探索)功能💎4.1 Terminal(终端)功能💎4.2 Discover(发现)功能&…

STM32 IWDG(独立看门狗)

1 IWDG简介 STM32有两个看门狗:一个是独立看门狗(IWDG),另外一个是窗口看门狗。独立看门狗也称宠物狗,窗口看门狗也称警犬。本文主要分析独立看门狗的功能和它的应用。 独立看门狗用通俗一点的话来解释就是一个12位的…

关于转BigDecimal对象时,精度问题

//浮点型数值Double d 0.0003d;//转BigDecimal对象BigDecimal a new BigDecimal(d);System.out.println(String.format("浮点类型数字:%.4f创建BigDecimal对象并且保留多位小数并且保留多位小数时,精度会变多,结果为%s",d,a.setScale(8, BigDecimal.ROUND_DOWN)));…

format()方法——格式化字符串

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法介绍 format()可以对数据进行格式化处理操作,语法如下: format(value, format_spec) format_spec为格式化解释。当参数…

【计算机毕业设计】092基于微信小程序二手闲置交易市场

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

PostgreSQL的系统视图pg_stat_archiver

PostgreSQL的系统视图pg_stat_archiver 在 PostgreSQL 数据库中,pg_stat_archiver 视图提供了关于归档进程(archiver process)的统计信息。归档进程负责将 WAL(Write-Ahead Logging)日志文件复制到归档存储&#xff0…

探索区块链:颠覆性技术的崛起

目录 一、引言 二、区块链技术概述 三、区块链应用场景 四、区块链面临的挑战 五、区块链的未来展望 六、结语 一、引言 在数字化浪潮的推动下,区块链技术以其独特的去中心化、透明性和不可篡改性等特性,正在逐步改变我们的生活。从金融领域到供应…

基于Java的茶文化交流系统【附源码+LW】

摘 要 计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即时通话…

MySQL数据库存储引擎

MySQL数据库存储引擎 存储引擎概念 存储引擎也称为表类型 通过不同的技术比如说,存储机制,索引技巧,锁定水平等等,来提供不同的功能。 查看MySQL支持的存储引擎 show engines\G; 常用引擎比较 对事务有需求 innodb …

TiDB-从0到1-数据导出导入

TiDB从0到1系列 TiDB-从0到1-体系结构TiDB-从0到1-分布式存储TiDB-从0到1-分布式事务TiDB-从0到1-MVCCTiDB-从0到1-部署篇TiDB-从0到1-配置篇TiDB-从0到1-集群扩缩容 一、数据导出 TiDB中通过Dumpling来实现数据导出,与MySQL中的mysqldump类似,其属于…

Spring Boot中如何配置和使用多数据源

Spring Boot中如何配置和使用多数据源 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨如何在Spring Boot应用中配置和使用多数据…

oracle with as 是什么并且怎么用

Oracle中的WITH AS语句,也被称为Common Table Expressions(CTE),是一个用于定义临时结果集或视图的子句。这个临时结果集或视图只在当前的查询中存在,并且在查询完成后会被自动删除。使用WITH AS可以提高SQL语句的可读…

JavaWeb——MySQL:navicate客户端工具简单使用

目录 1. 连接 2. 新建数据库 3. 使用数据库 4. 新建表 5.使用表 6. 导出数据库 我这里是英文版,没有进行汉化。 1. 连接 点击左上角Connection,选择MySQL,(我连接的是自己计算机上的数据库)连接名输入&#x…

使用ScheduledExecutorService进行任务调度

使用ScheduledExecutorService进行任务调度 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在软件开发中,任务调度是一项重要的技术需求&#xff…