相关疑难解决方法(0)

请问laravel数据库事务锁表?

我使用laravel5.5的数据库事务进行在线支付应用程序.我有一个company_account表来记录每次付款(type,amount,create_at,gross_income).gross_income创建新记录时,我需要访问最后一条记录.所以我需要在具有读写表锁的事务时锁定表,以避免同时进行多次付款.

我已经参考了laravel的doc,但我不确定该事务是否会锁定表.如果事务将锁定表,那么什么是锁类型(读锁定,写锁定或两者)?

DB::transaction(function () {
    // create company_account record

    // create use_account record
}, 5);
Run Code Online (Sandbox Code Playgroud)

码:

DB::transaction(function ($model) use($model) {
    $model = Model::find($order->product_id);
    $user = $model->user;

    // **update** use_account record
    try {
        $user_account = User_account::find($user->id);
    } catch (Exception $e){
        $user_account = new User_account;
        $user_account->user_id  = $user->id;
        $user_account->earnings = 0;
        $user_account->balance  = 0;
    }
    $user_account->earnings += $order->fee * self::USER_COMMISION_RATIO;
    $user_account->balance += $order->fee * self::USER_COMMISION_RATIO;
    $user_account->save();

    // **create** company_account record
    $old_tiger_account = …
Run Code Online (Sandbox Code Playgroud)

php database transactions table-locking laravel

20
推荐指数
2
解决办法
1万
查看次数

PHP PDO MySQL以及它如何真正处理MySQL事务?

我试图克服它,但我无法理解使用PDO和MySQL在PHP中进行事务处理的逻辑.

我知道这个问题会很长,但我认为这是值得的.

鉴于我阅读了很多关于MySQL事务的信息,服务器如何处理它们,它们与锁和其他隐式提交语句的关系等等,不仅在SO上,而且在MySQL和PHP手册上:

并给出此代码:

模式:

CREATE TABLE table_name (
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  table_col VARCHAR(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE `another_table` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `another_col` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

test1.php(with PDO::setAttribute(PDO::ATTR_AUTOCOMMIT, 0)):

<?php

// PDO
define('DB_HOST', 'localhost');
define('DB_USER', 'user');
define('DB_PASS', 'password');
define('DB_NAME', 'db_name');

/**
 * Uses `$this->pdo->setAttribute(PDO::ATTR_AUTOCOMMIT,0);`
 */
class …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo locking transactions

5
推荐指数
1
解决办法
556
查看次数

标签 统计

php ×2

transactions ×2

database ×1

laravel ×1

locking ×1

mysql ×1

pdo ×1

table-locking ×1