php - Laravel 是如何管理 MySQL 变量的?

标签 php mysql laravel

如果我这样做

DB::statement("SET @foo := 1;");
DB::select("SELECT @foo;");

我在结果中得到了预期的 1。但我无法在任何地方找到它是否是一个保证的结果。如果我理解正确的话,这些变量是特定于 MySQL 连接的。那么是否有可能由于某种原因这两个语句将在不同的连接上执行并且我会得到不同的结果?我可以依靠它一直工作吗?

最佳答案

为确保两条语句始终作为一条语句执行,您可以使用 database transactions :

DB::transaction(function () {
    DB::statement("SET @foo := 1;");
    DB::select("SELECT @foo;");
});

这保证了每笔交易都被视为一个“单元”(atomicity)。 有两种可能性:两个语句都作为一个语句执行,或者如果发生故障,则根本不执行任何语句。

下一个保证是:两个语句都在隔离中执行,这意味着如果您同时执行此代码,则始终保证事务按顺序执行。

关于php - Laravel 是如何管理 MySQL 变量的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53816844/

相关文章:

php - Laravel NotFoundHttpException 路由

laravel - 如何在 laravel 中集成 Paypal 支付网关?

PHP 表单更新页面

php - mysql查询两个表

javascript - onclick window.location.href 带输入值

mysql - 编写 SQL 查询来查找接近 min() 值的行

mysql - 如何从两个不同的表中获取数据(没有重复记录)?两个表都有共同的值(value)

php - 如果sql数据库存在

MySQL:选择单词作为行,即使 som 在一个字段中分隔为 "new line"

laravel - 使用作者姓名存储数据 - laravel 5.2