MySQL InnoDB - 对事务感到困惑

2024-03-17

我已经使用MySQL很多年了,但是没有太多使用InnoDB引擎的经验。

我现在正在对它运行一些测试,因为我将要使用它,并且从我读到的内容来看,如果该事务中的任何查询存在任何问题,它不应该允许任何内容“通过”。

我的问题是,为什么在下面的代码中......当第三个查询明显有问题时,它仍然将前两个查询输入数据库吗?

$query = "BEGIN";
mysql_query($query);

$query = "INSERT INTO list_columns(lid,column_name) VALUES(8,'test')";
mysql_query($query);

$query = "INSERT INTO list_columns(lid,column_name) VALUES(8,'test')";
mysql_query($query);

$query = "INSERT INT list_columns(lid,column_name) VALUES(8,'test')";
mysql_query($query);

$query = "COMMIT";
mysql_query($query);

Edit:我了解使用 ROLLBACK 和所有......但我认为事务的全部目的是这样,如果事务中的任何查询有任何问题,那么它们都不会被执行......或者这个例如,仅在一个查询中有多个插入的情况......如果其中一个插入出现问题,那么不会插入任何插入?


如果问题类似于“此插入违反了唯一键",提交将会发生。您必须检查自己查询是否返回错误,如果是,ROLLBACK.

例如,如果问题是服务器意外关闭,则查询 1 和 2 将不会发生。

当然,由于这里的 3 个查询是相同的,所以这是一个愚蠢的例子。至少改变一下lid查看。你为什么不做一个快速测试呢?

编辑:您编辑了有关交易目的的问题。

交易的目的确实是保持数据库处于一致状态(阅读ACID http://en.wikipedia.org/wiki/ACID),但是由程序员决定什么是一致的。看着Prodigitalson的回答 https://stackoverflow.com/a/4819056/327563查看可能为您执行此操作的 php 错误捕获方式的示例。但是,当您处于事务中时,其他进程将看不到您的事务正在执行的更改 - 因此是原子的和隔离的。

CREATE TABLE `testkeys` (
  `lid` INT,
  `column_name` VARCHAR(50),
  UNIQUE KEY `testuniq` (`lid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

BEGIN;
INSERT INTO testkeys(lid,column_name) VALUES(1,'test 1');
INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2');
INSERT INTO testkeys(lid,column_name) VALUES(3,'test 3');
INSERT INTO testkeys(lid,column_name) VALUES(2,'test 2b');
COMMIT;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL InnoDB - 对事务感到困惑 的相关文章

  • 无法访问 localhost/xampp/index.php

    我刚刚安装了 Windows 7 的 XAMPP 控制面板似乎工作正常 我启动了 MySql 和 Apache 我遇到的问题是 当我在浏览器 Google Chrome 中输入 localhost 时 它会将我发送到 http localh
  • PHP MongoDb 驱动程序:如何设置执行代码的超时

    我有以下代码 它在 MongoDb 端执行一段代码 mongoCode new MongoCode Some JS code db gt execute mongoCode array socketTimeoutMS gt 1000000
  • Mysql 将 int 转换为 MAC

    我有一些数据可以转换 其中有 2 列 其中一列有 IP 它包含整数值 我在 mysql 查询中使用了以下函数 是否有一个函数可以用来转换我的 mac 列 其中包含整数和数据类型是bigint to MAC地址 SELECT INET NTO
  • 如何添加事件处理程序仅在 sqlalchemy 中提交事务后触发一次

    我正在使用 sqlalchemy 编写一些函数 这些函数被称为内部事务 例如 def create order session arg kw create order object order Order xxxx xxx session
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • MySQL 查询到 CSV [重复]

    这个问题在这里已经有答案了 有没有一种简单的方法来运行MySQL查询来自linux命令行并以csv格式输出结果 这就是我现在正在做的事情 mysql u uid ppwd D dbname lt lt EOQ sed e s g tee l
  • 如何在 GitHub Action 中使用不同版本的 PHP 进行测试

    我有一些 PHP 代码 其中包含使用以下命令运行的测试PHPUnit并想对其进行测试GitHub Actions 我在他们的文档中找不到测试 PHP 包的方法 我想使用不同版本的 PHP 进行测试 但他们只有最新的版本7 3安装 您可以添加
  • Laravel Vue 组件只能传递数字?

    在我的 UserMenu vue 中我写道 export default props nameVal data return 并在blade php中
  • Facebook PHP-SDK 页面刷新后似乎丢失了 userID

    我似乎登录工作正常 我可以登录 接受应用程序 第一次 然后显示用户信息 例如姓名 图片 等 然而 当我刷新页面时 userid 又回到 0 我必须再次登录 我不确定问题是什么 我必须在每次页面加载时重新启动它还是什么 我不知道 我会发布一些
  • 使用 PHP 从 Mongo 解码 JSON

    我已经看过这个线程 PHP 解码嵌套 JSON https stackoverflow com questions 3555335 php decode nested json并没有设法用它来解决我的问题 我目前正在从 Mongo 获取 J
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 映射 mysql 中同一个表的多个值

    您好 我必须使用另一个表中的值 id 获取文本值 表 1 包含值 ID 表 2 包含名称和值 ID 表 1 SEVERITY OCCURENCE DETECTABILITY 2 3 4 表 2 id name value 1 Very Hi
  • 如何处理 REST api 中的 php 通知、警告和错误?

    在 REST API 中 200 响应表明操作成功 PHP 默认情况下直接在响应正文中输出错误消息 而不更改响应代码 在 SPA 中 用户无法直接看到响应文本 因此 当应用程序未按预期工作时 我通过 FireBug 检查响应正文 以检查可能
  • 使用PHP从doc、xls文件中读取数据

    我想知道是否可以从 doc 和 xls 文件中读取数据并将 将内容读取到图像文件中 创建文档的页面样本 例如 我有一些文件希望我的客户购买 所以我需要自动创建小图像 例如我的文档样本 我们将不胜感激您的帮助 对于读取 xls 文件 我真的推
  • php - 解析html页面

    div divbox div p para1 p p para2 p p para3 p table class table tr td td tr table p para4 p p para5 p 有人可以告诉我如何解析这个 html
  • SQL不允许表中有重复记录

    如何使其不添加重复项 我想让它通过 ID 之外的所有其他列进行检查 我希望这个无效 ID col1 col2 col3 1 first middle last ID col1 col2 col3 2 first middle last 我希
  • 字符串相似度的算法(比Levenshtein和similar_text更好)? php, Js

    在哪里可以找到比 levenshtein 和 phpimilar text 方法更准确地评估错误字符的拼写的算法 Example similar text jonas xxjon similar echo similar returns 6
  • PHP 检查当前日期是在设定日期之前还是之后

    我从数据库中提取一个日期 其格式为 dd mm YYYY 我想做的是检查当前日期 如果当前日期早于数据库中的日期 则需要打印数据库日期 如果是在之后 则需要打印 继续 有人能指出我正确的方向吗 if strtotime database d
  • Laravel 搜索关系

    我有两个相关的模型 我正在尝试在产品中进行搜索 并且仅显示实际搜索结果 而不是找到该产品的类别的所有产品 我不想搜索任何类别 因为无论搜索什么或找到什么 类别都会始终显示 Example I have the following categ
  • PHPUnit - 模拟 S3Client 无法正常工作

    库 aws aws sdk php 2 PHP 版本 PHP 5 4 24 cli 作曲家 json require php gt 5 3 1 aws aws sdk php 2 require dev phpunit phpunit 4

随机推荐

  • 使用 Interop.Excel 将 Excel 转换为 PDF 时不显示图像

    我正在使用 Interop Excel 将 excel xlsx 2010 转换为 PDF 以用于应用程序 在我的开发机器上它工作正常并且图像显示正确 但是 在服务器上 当 Excel 转换为 PDF 时 图像 一些通过代码插入 另一些在模
  • FireMonkey 控件是否具有与 VCL Invalidate() 等效的方法?

    我正在创建一些自定义 FireMonkey GUI 控件 组件需要更新以响应用户交互 VCL 控件可以调用 Invalidate 将其放入队列中进行重绘 FireMonkey 有等效的方法吗 FireMonkey 控件有一个 Repaint
  • 在 Flutter/Dart 中如何将参数从命令行传递到 main ?

    如何运行命令并使用 Flutter Dart 传递一些自定义参数 以便可以在main 调用例如 flutter run device my custom arg 那么我可以通过以下方式访问它 void main List
  • 运行 Pig 脚本时的堆空间问题

    我正在尝试执行包含大约 3000 万数据的 Pig 脚本 但收到以下堆空间错误 gt ERROR 2998 Unhandled internal error Java heap space gt gt java lang OutOfMemo
  • 应将哪些文件导入到 Web 服务项目的 Subversion 存储库中?

    我使用Web服务自上而下的方法在Eclipse中创建了一个Java项目 即创建一个WSDL文件并使用它来生成带有axis2的Skeleton Java类和Web服务 因此 有很多自动生成的文件和axis2 jar图书馆 我的项目具有以下文件
  • 如何在 codeigniter 挂钩文件中加载模型

    这是我的问题 我正在构建一个需要过滤器的应用程序 我已经让过滤系统正常工作 我什至可以查明我当前想要访问的实际方法 问题是我无法从过滤器文件访问 CI 核心 我在网上搜索过 虽然我找到了一些建议的解决方案 例如 Dipping into C
  • @xmlschema jaxb package-info.java 编译错误

    我尝试在包级别使用注释 但从 Eclipse 中收到编译错误 我有课Head具有以下包 注释 javax xml bind annotation XmlSchema xmlns javax xml bind annotation XmlNs
  • Facebook 页面的 webhook [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在一页上拥有管理员访问权限 我创建了 facebook 应用程序 并在我的网站上创建并验证了 webhook 问题是我
  • Html.ListBoxFor错误问题asp.mvc 3

    我的代码中有类似的内容 但收到错误 异常详细信息 System ArgumentException 值不能为 null 或空 参数名称 名称 我究竟做错了什么 感谢帮助 model IEnumerable
  • 表单外的复选框

    由于设计要求 我需要在表单外部放置几个复选框 是否仍然可以将这些值包含在表单的提交操作中 也许用javascript或其他我没有想到的方式 如果您使用 HTML5 则有一个form属性 请参见以下示例 p p
  • 如何使用 web3.js 1.0 进行身份验证和发送合约方法

    我对如何使用 web3 1 0 库执行合约的方法感到困惑 此代码有效 只要我先手动解锁帐户 var contract new web3 eth Contract contractJson contractAddress contract m
  • 使用回车符迭代文件

    有没有办法使用语法迭代文本文件 with open filename r as f for line in f print f 如果文件仅包含回车符而没有换行符 到目前为止我能做的就是 with open filename r as f f
  • 我所有的 javascript 在底部添加了一些代码

    我的网站使用 CodeIgniter 今天我发现我的网站在所有 JavaScript 文件 包括 jQuery 文件 的底部添加了一些代码 代码是这样的 4fd970 You are blocked by day limit 4fd970
  • 无法签入 TFS 的更改

    我在尝试签入对 Visual Studio Online 上托管的 TFS 的更改时遇到问题 上周才开始 我在跑步Visual Studio Professional 2017版本15 5 2 当我尝试签入更改时 出现以下错误 C My W
  • 将属性绑定到列表视图数据模板内的元素

    我无法让数据绑定在DataTemplate以 Xamarin 形式 我可以让它与ListView 即绑定RowHeight 但一旦进入DataTemplate 将内容设置为我的 ViewModel 的属性没有任何影响 在下面的示例中 如果我
  • Sqlite计算查询中YYYYMMDD日期格式之间的天数差异

    我已经以 YYYYMMDD 格式存储了一些患者记录的治疗日期 tdate 和接收日期 rdate 我想查询rdate tdate结果小于30的记录 我的尝试是 SELECT FROM table WHERE rdate tdate lt 3
  • Matlab:获取图中点击的坐标但保留按钮回调

    我需要一个函数 它可以为我提供在图形窗口中单击的坐标以及单击的鼠标按钮 左 中 右或按下 KEY 的坐标 但我仍然想使用 uicontrol 按钮 我目前正在使用 ginput 它工作正常 但按钮回调函数没有执行 因此我认为 ginput
  • 将日期字符串转换为 Unix 时间戳

    我的日期是 Mon Mar 15 20 51 18 0000 2010 如何将此日期转换为 Unix 时间戳 require time Time parse Mon Mar 15 20 51 18 0000 2010 to i
  • 从 intellij 检查中排除目录,但不从自动完成中排除

    据我所知 排除目录的唯一方法是将其标记为在项目结构中排除 然而 这将使 IntelliJ 完全忽略该目录 因此它不会出现在自动完成选项中 我不想要这个 我希望排除在检查之外 但包含在其他一切中 这可能吗 我正在使用 Intellij 12
  • MySQL InnoDB - 对事务感到困惑

    我已经使用MySQL很多年了 但是没有太多使用InnoDB引擎的经验 我现在正在对它运行一些测试 因为我将要使用它 并且从我读到的内容来看 如果该事务中的任何查询存在任何问题 它不应该允许任何内容 通过 我的问题是 为什么在下面的代码中 当