MYSQL学习笔记10:视图,事务安全

晟矽微MC32F7361定时器的使用案例说明 110所以TIMER0所用的频率是FCPU的1/64,也就是8/64MHZ. 为1/8MHZ。//io口下拉电阻 1:enable 0:disablea。//io口上拉电阻 1:enable 0:disable。//io口下拉电阻 1:enable 0:disable。//io口上拉电阻 1:enable 0:disable。//io口下拉电阻 1:enable 0:disable。//io口上拉电阻 1:enable 0:disable。 阅读详情

视图(基本操作)

创建视图

视图的本质是sql指令(select语句)

基本语法:create view 视图名字 as select指令;//可以是单表查询,也可以是连接查询,联合查询或者子查询

查看视图结构:视图是虚拟表.所以关于表的一些操作都适用于视图 

show talbles/show create table[view]/desc 视图名字//这些命令都可以使用

使用视图

视图是虚拟表:可以直接把视图当做"表"来操作,但是视图本身没有数据,是临时执行select语句得到对应的结果.视图主要用于查询操作.

基本语法: select 字段列表 from 视图 [子句];

修改视图

基本语法: alter view 视图 as 新select语句;

删除视图

基本语法:drop view 视图;

事务安全

事务的概念:

事务(transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit).事务通常由高级数据库操纵语言或编程语言书写的用户程序的执行所引起.事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成.

事务基本原理

mysql允许将事务统一进行管理(存储引擎innodb),将用户所做的操作,暂时保存起来,不直接放到数据表(更新),等到结果确认后再进行操作(存入数据库).

实例:没有事务的操作

实例:有事务的操作

事务在mysql中通常是自动提交的,但是也可以使用手动事务.

MySQL 事务(来自菜鸟教程的mysql事务)

MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!

  • 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
  • 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
  • 事务用来管理 insert,update,delete 语句

一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

  • 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

  • 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

  • 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

  • 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。

事务控制语句:

  • BEGIN 或 START TRANSACTION 显式地开启一个事务;

  • COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的;

  • ROLLBACK 也可以使用 ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

  • SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;

  • RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

  • ROLLBACK TO identifier 把事务回滚到标记点;

  • SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。

MYSQL 事务处理主要有两种方法:

1、用 BEGIN, ROLLBACK, COMMIT来实现

  • BEGIN 开始一个事务
  • ROLLBACK 事务回滚
  • COMMIT 事务确认

2、直接用 SET 来改变 MySQL 的自动提交模式:

  • SET AUTOCOMMIT=0 禁止自动提交
  • SET AUTOCOMMIT=1 开启自动提交

事务测试

mysql> use RUNOOB;
Database changed
mysql> CREATE TABLE runoob_transaction_test( id int(5)) engine=innodb;  # 创建数据表
Query OK, 0 rows affected (0.04 sec)
 
mysql> select * from runoob_transaction_test;
Empty set (0.01 sec)
 
mysql> begin;  # 开始事务
Query OK, 0 rows affected (0.00 sec)
 
mysql> insert into runoob_transaction_test value(5);
Query OK, 1 rows affected (0.01 sec)
 
mysql> insert into runoob_transaction_test value(6);
Query OK, 1 rows affected (0.00 sec)
 
mysql> commit; # 提交事务
Query OK, 0 rows affected (0.01 sec)
 
mysql>  select * from runoob_transaction_test;
+------+
| id   |
+------+
| 5    |
| 6    |
+------+
2 rows in set (0.01 sec)
 
mysql> begin;    # 开始事务
Query OK, 0 rows affected (0.00 sec)
 
mysql>  insert into runoob_transaction_test values(7);
Query OK, 1 rows affected (0.00 sec)
 
mysql> rollback;   # 回滚
Query OK, 0 rows affected (0.00 sec)
 
mysql>   select * from runoob_transaction_test;   # 因为回滚所以数据没有插入
+------+
| id   |
+------+
| 5    |
| 6    |
+------+
2 rows in set (0.01 sec)
 
mysql>

PHP中使用事务实例

MySQL ORDER BY 测试:

 

<?php
$dbhost = 'localhost:3306';  // mysql服务器主机地址
$dbuser = 'root';            // mysql用户名
$dbpass = '123456';          // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
    die('连接失败: ' . mysqli_error($conn));
}
// 设置编码,防止中文乱码
mysqli_query($conn, "set names utf8");
mysqli_select_db( $conn, 'RUNOOB' );
mysqli_query($conn, "SET AUTOCOMMIT=0"); // 设置为不自动提交,因为MYSQL默认立即执行
mysqli_begin_transaction($conn);            // 开始事务定义
 
if(!mysqli_query($conn, "insert into runoob_transaction_test (id) values(8)"))
{
    mysqli_query($conn, "ROLLBACK");     // 判断当执行失败时回滚
}
 
if(!mysqli_query($conn, "insert into runoob_transaction_test (id) values(9)"))
{
    mysqli_query($conn, "ROLLBACK");      // 判断执行失败时回滚
}
mysqli_commit($conn);            //执行事务
mysqli_close($conn);
?>

--------------菜鸟教程的mysql事务-------结束----------

自动事务

自动事务:autocommit,当客户端发送一条sql指令给服务器的时候,服务器在执行之后,不用等待用户反馈结果,会自动将结果同步到数据表.

证明:利用多个客户端查看.

如上,在第一个客户端插入数据,在第二个客户端立即查询到.

自动事务:系统做了额外的步骤来帮助用户操作,系统是通过变量来控制的.autocommit

show variables like 'autocmmit%';

关闭自动事务:关闭之后系统就不再帮助用户提交结果了

set autocommit = off;

关闭事务后我们再插入数据看看效果:

在执行事务的客户端中,系统会利用事务日志中保存的结果对数据进行自动加工.

一旦自动事务关闭,那么需要用户提供是否同步的命令

commit:提交(同步到数据库-事务清空)

rollback:回滚(清空之前的操作,丢弃)

我们进行事务提交commit,数据即可同步到数据库中,如下:

通常我们不会关闭自动事务,否则太麻烦了.

因此我们只在需要使用事务处理的时候,才会使用手动事务.

手动事务

手动事务:不管开始和结束,都需要用户(程序员)手动的发送事务操作指令来实现.

手动事务对应的命令:

1. 开启事务:start transaction //从这条语句开始,后面的语句都不会写入数据表而是保存在事务日志中.

2. 事务处理: 多个写指令构成

3. 事务提交/回滚(撤销): commit提交/rollback回滚 //此时事务结束.要么成功,要么失败

开启事务

执行事务

执行多个sql语句.

sql语句1;

sql语句2;

sql语句3;

....

sql语句n;

提交事务

确认提交:commit -- 数据存入数据表.清空事务.

回滚操作:rollback -- 所有数据无效并清空.

回滚点

回滚点:savepoint,即存盘点.在执行事务的多条语句中可设置回滚点.

添加回滚点: savepoint 回滚点名字;//字母数字下划线构成

返回回滚点: rollback to 回滚点名字;//返回回滚点,其后所有sql语句操作无效.

在一个事务处理中,可以有多个回滚点.

回滚点示例:

此时如果我们想撤销刚才update语句(此处假设本语句数据有误),可返回之前定义好的回滚点sp1,如下:

撤销了(假设数据有误)update语句之后,我们可以重写新的(此处假设数据正确的)update语句,确认无误后提交事务:

事务特性

提问:什么时候是行隔离?什么时候是整表隔离?

说明:如果条件中使用了索引(主键),那么系统是根据主键直接查找到某条记录,这个时候与其他记录无关,那么只隔离一条记录;反之,如果系统是通过全表检索(每一条记录都去检查,没有索引),被检索的所有数据都会被锁定(整表).

例如上例是根据匹配where stu_id主键='stu0001'来update数据的,因此是行记录隔离/锁定;

假如匹配where name非主键字段='张三'来update数据的,mysql会检索全表来匹配,因此检索的所有数据都会被锁定,即是整表锁定/隔离.

例如事务一旦被提交,即为永久性数据更改.此时即使再执行rollback回滚也是无效的.

Could not find a package configuration file provided by “boost_signals“ gmapping/slam_gmapping/gmapping/CMakeLists.txt:14 (find_package)问题在14行,注释该行。,该语句的用以为告诉项目Boost库文件所在。 阅读详情

相关推荐

昆仑通态屏幕制作(连载1)---接触篇

写在开始 背景:最近出了做QT、LORA和4G,还做了一个屏幕。以前做了一个迪文的串口屏幕,发现网上的教程很多,所以连载就不更新了,并且迪文屏幕的设置什么的比较简单,应该从网上都能找到对应的教程。而现在用的昆仑通态的屏幕属于嵌入式屏幕,至于为啥叫嵌入式,也不是很明白,反正就是需要用这个屏幕,嵌入式不嵌入式不重要了。重要的是能用,并且能实现串口屏幕不能实现的功能。所以选定昆仑通态的一款屏幕。 文章语言:我比较习惯用比较糙的语言介绍做的东西,有时候不太准备,但是为了方便理解,还请大家谅解。用...

weixin_45426095的博客 6735

MySQL 的事务和事务的隔离级别

mysql数据库,当且仅当引擎是InnoDB,才支持事务。 对于一个MYSQL数据库(InnoDB),事务的开启与提交模式无非下面这两种情况: 1>若参数autocommit=0,事务则在用户本次对数据进行操作时自动开启,在用户执行commit命令时提交,用户本次对数据库开始进行操作到用户执行commit命令之间的一系列操作为一个完整的事务周期。若不执行commit命令,系统则默认事务回滚。...

cpxsxn的博客 518

Agent本地部署教程详细步骤

在开始之前,你需要明确你要部署的Agent是什么。如果你需要部署其他Agent,请参考其官方文档调整步骤。

weixin_39673931的博客 2495

Mysql事务

Mysql事务

m0_50176078的博客 527

SAP-HR 模块 PPOSE 的详细信息标签页增强

步骤1:T-CODE : SE11 创建一个名为 HRI9106 的结构 命名:HRI + 91 + 两位数字。人事管理 - 组织管理 - 集成新信息类型 - 将信息类型添加为明细范围中的标签页。步骤6:SE51 查看 7000屏幕,修改屏幕属性 让其更美观。步骤3:T-CODE : SM30维护 T777I 表。步骤5:PPCI 新建 7000屏幕用于显示。标签页 IT 开头 + 信息类型 9106。步骤2:T-CODE : PPCI。步骤4:T-CODE : SPRO。

常回来看看呀!! 1627

【AI智能体】Coze 搭建个人旅游规划助手实战详解

本文将详细介绍如何使用Coze平台搭建个人旅游规划助手。首先概述了AI智能体如何简化传统复杂任务的开发流程,然后重点介绍了Coze工作流的作用和核心节点类型(包括大模型、插件、知识库等)。通过实际操作演示,从创建智能体到配置多级工作流,逐步实现旅游规划功能:解析用户输入时间地点、查询必玩景点、获取景点详细信息等。该教程展示了如何利用Coze的可视化编排能力,即使非技术人员也能快速构建专业级AI应用。最终呈现的旅游助手可提供天气查询、行程建议等一站式服务。

Hello, New World! 2109

mysql 事物安全_MySQL学习之事务安全

事务安全事务概念事务(transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit),事务通常由高级数据操纵语言或编程语言书写的用户程序的执行所引起。事务有事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。事务基本原理基本原理:MySQL允许将事务统一进行管理(存储引擎INNODB),将用户所做的操作,暂时保...

weixin_27282525的博客 296

别再用图片水印了!5种你可能不知道的文本隐写术实战

本文介绍了5种高效的文本隐写术,帮助创作者在不影响内容可读性的情况下嵌入版权信息。从零宽度字符到同形字替换,再到标点符号变形和行尾空格编码,这些技术为数字内容提供了轻量级版权保护方案,特别适用于社交媒体和电子合同等场景。

k8l9m0n的博客 225

Mysql事务使用总结

Mysql事务主要用来处理数据量大、数据复杂度高的数据操作,最经典的使用场景是银行的转账:需要先从银行账户A中取出钱,然后再存入银行账户B中,如果中间出现问题,而没有事务的保证,那么就会出现B收不到钱,而A支出钱又回不到自己的账户的严重问题,那么有了事务机制,这个问题就解决了。(技术讨论群:276592700(新))

云水之路的专栏 9415

使用html和JavaScript实现一个简易的物业管理系统

码实现了一个简易的物业管理系统,主要使用了以下技术和功能: 1.主要技术 使用的技术: HTML: 用于构建网页的基本结构。 包括表单、表格、按钮等元素。 CSS: 用于美化网页的外观和布局。 设置字体、颜色、边距、对齐方式等样式。 JavaScript: 用于处理用户交互和动态更新页面内容。 实现了新增住户、查询住户、编辑住户、删除住户等功能。 处理表单提交事件,验证输入数据,并更新表格显示。 DOM操作: 使用 JavaScript 直接操作 HTML DOM 元素。 动态

weixin_41312759的博客 1777

解决【x2openEuler环境检查未通过——CheckRepoCurlActor不通过】问题

摘要:x2openEuler使用默认repo源时出现环境检查失败问题,原因是默认源返回308永久重定向错误。解决方法包括:1)为CentOS主机配置华为yum源;2)在x2openEuler Web界面修改为自定义可用源。具体步骤包括备份原源、下载华为源、清除缓存,并通过curl测试确认新源可用性。最终成功配置openEuler-24.03-LTS-SP1版本的repo源后,环境检查顺利通过。

提供C#相关开发 、云计算、运维测试、网络安全相关技术分享与服务,有意向可联系。 258

mysql中的事务、锁与线程安全

事务具有ACID特性,锁只是实现这些特性的必须机制。mysql> SELECT @@tx_isolation; +----------------+ | @@tx_isolation | +----------------+ | SERIALIZABLE | +----------------+ 1 row in set (0.00 sec)mysql> BEGIN ; Query OK, 0

root 4315

第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案

本文主要介绍了第三方 API 调用 OpenClaw 出现 LLM request timed out 的解决方案,希望能对使用OpenClaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 8万+

MySQL中的视图、索引以及事务的简单使用

前言视图,索引,事务的使用以及考点。内容不会难,主要是为以后优化以及提高查询效率打基础。MySQL基础内容已经完结,以后就更新此专栏的JDBC知识了,感兴趣的伙伴可以订阅专栏喔,期待你的关注与支持~......

叶落秋白的博客 1021

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[MySQL] 事务和视图

事务就是把多条SQL语句打包成一个整体,里面的sql语句要么全部执行成功,要么都不执行,这里的都不执行,不是说真没执行,而是发生了回滚操作。比如说有两个人A和B,A有 1000, B有1000,语句一:A给B转账500,语句二:B接收转过来的500。这两个sql语句需要都执行,不能中断,要成功都成功。如果执行完语句一后,没有执行语句二就会出现回滚现象,执行回滚的SQL语句,返回到语句一执行前的状态。

2402_83046353的博客 1118

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MySQL 索引、事务和视图

事务(Transaction)是用来维护数据库完整性的,它能够保证一系列的MySQL操作要么全部执行,要么全不执行。 例子1: 举一个例子来进行说明,例如转账操作:A账户要转账给B账户,那么A账户上减少的钱数和B账户上增加的钱数必须一致,也就是说A账户的转出操作和B账户的转入操作要么全部执行,要么全不执行;如果其中一个操作出现异常而没有执行的话,就会导致账户A和账户B的转入转出金额不一致的情况,为而事实上这种情况是不允许发生的,所以为了防止这种情况的发生,需要使用事务处理。 例子2: 在淘宝购物下订单的时

书生-w的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

MySQL之事务与读视图

事务的概念,事务的ACID特性,事务的使用,事务的隔离性和隔离级别,脏读,不可重复读,幻读,MVCC,快照,读视图

weixin_74285822的博客 1348

MySQL 数据库视图、事务、索引---学习总结

视图( view ): 视图概述: 通俗的讲, 视图就是一条 select 语句执行后返回的结果集 视图是对若干张基本表的引用, 一张虚拟表, 查询语句执行的结果, 不储存具体数据( 基本表数据改变, 视图也会跟着改变 ) 主要用于方便 查询 操作, 减少复杂的 SQL 语句, 增强可读性 创建视图: 视图名: 建议以 v_ 开头 create view 视图名 as select查...

Nick.Peng's Blogs 3451

MySQL 事务、视图、索引

一、视图 1.1 为什么使用视图?    安全——不希望用户看到整个数据库的结构,所以对不同权限的用户使用不同的视图隐藏必要数据;  方便——让用户更容易获得、理解数据; 1.2 什么是视图?  视图是一种查看数据库中一个或多个表中数据的方法,是保存在数据库中的select查询。  视图是一种虚拟表,它的行和列来自查询中引用的表,在执行时,它直接显示来自表中的数据。 1.3 视图常用...

一起学习 598

MySQL事务,视图,用户管理学习笔记【事务概念 | 事务隔离级别 | 设置级别 | 视图 | 用户管理】

目录一,事务初识二,支持事务的引擎三,事务的提交方式自动提交手动提交四,事务隔离级别读未提交读已提交可重复读穿行化查看并设置隔离级别设置隔离级别五,视图创建视图其他规则删除视图 在MySQL中,事务(Transaction)是一个非常重要的概念,它用于保证数据的一致性和完整性。事务可以看作是一组操作的集合,这些操作要么全部成功执行,要么全部不执行,是一个不可分割的工作单位。这四个特性通常被总结为ACID原则:1. 原子性(Atomicity):事务中的所有操作被视为一个整体,不可分割。事务的所

菜菜成长为后端开发大佬 941

Mysql学习笔记(10):事务、视图

1. 事务的定义 事务:事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。 2. 事务的属性 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生 一致性(Consistency) 事务必须使数据库从一个一致性状

LeavingBook的博客 404

MySQL的事务、视图、存储引擎

insert into account(name, money) VALUES ('张三',2000), ('李四',2000);MySQL的事务默认自动提交的,也就是说,当执行完一条DML语句时,MySQL会立即隐式提交事务。事务:一组数据库的操作(SQL)集合,这个集合中的操作(SQL)要么都执行,要么都不执行。视图(View):是虚拟的表,在物理结构中是不存在的,通常用于简化复杂的查询。存储引擎:实现对数据增、删、改、查、事务、索引的数据库核心组件。生成的,它是一条Select语句的结果集。

2501_94236104的博客 1350

MySQL数据库——事务、索引和视图

愿你的每一次数据库操作都像春风般舒适,每一次查询都如闪电般迅速

qq_73698057的博客 1226

MySQL学习第三天事务和视图

事务和视图事务的概念和特性事务的隔离级别事务的案例演示 事务的概念和特性 事务:事务由单独单元的一个或多个SQL语句组成,在这个单元中,每个MySQL语句是相互依赖的。而整个单独单元作为一个不可分割的整体,如果单元中某条SQL语句一旦执行失败或产生错误,整个单元将会回滚。所有受到影响的数据将返回到事物开始以前的状态;如果单元中的所有SQL语句均执行成功,则事物被顺利执行。 MySQL 中的存储引擎 在mysql中的数据用各种不同的技术存储在文件(或内存)中。 通过show engines来查看mysql

weixin_44991304的博客 1616

MySQL之 事务 视图

事务: 1.事务的基本介绍 1,概念: 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功, 要么同时失败。 2.操作: 1.开启事务 start transaction begin 2.回滚 rollback 3.提交事务 commit -- 创建一张账户表 create table account( id int primary ke...

weixin_44793533的博客 281

MySQL——数据库的设计、事务、视图

数据库的设计、事务、视图

weixin_73504499的博客 1580
上一篇: MYSQL学习笔记09:备份还原,用户权限,外键
下一篇: php学习笔记07:mysqli扩展函数(面向过程)
申佳明哥哥
博客等级 码龄10年 39粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值