首页 > 解决方案 > select语句可以触发mysql中表的死锁吗?

问题描述

我的问题是

  1. 为什么SELECT语句会导致死锁table1
  2. 在这种情况下如何避免死锁?
DROP report;

CREATE TABLE IF NOT EXISTS report AS (
    
    SELECT
        DISTINCT
        
        companies.id company_id,

        (
            SELECT 
                SUM(`message_count`) single_phone
            FROM
                `table1`
            WHERE
                `table1`.`company_id` = companies.id
                AND
                `status` != 'error'
        ) AS single_phone,

        (
            SELECT 
                SUM(`message_count`)
            FROM
                `table1`
            WHERE
                `table1`.`company_id` = companies.id
                AND
                `status` != 'not error'
        ) AS log,

        (
            SELECT 
                SUM(`message_count`)
            FROM
                `table1`
            WHERE
                `table1`.`company_id` = companies.id
                AND
                `status` != 'error'
        ) AS log_monthly,

        (
            SELECT 
                SUM(`number_of_sms`) AS aggregate
            FROM
                `messages`
            WHERE
                `messages`.`company_id` = companies.id
        ) AS p_monthly
    FROM
        companies
        INNER JOIN company_users ON companies.id = company_users.company_id
    WHERE
        company_users.confirmed = 1
        AND
        company_users.deleted_at IS NULL
);

标签: mysqlselectdeadlock

解决方案


非常感谢您的帮助,但我发现了问题。是的,这个过程会导致表上的死锁,但问题的实际原因是我已将 ->everyMinute() 放在我的 laravel 内核中以进行计划运行。并且还有一个由另一个开发人员配置的 cron 作业,每分钟运行一次。这些将每分钟运行一次,这是死锁问题的真正原因。我已将我的内核计划更改为 ->dailyAt('02:00'); 现在问题解决了。


推荐阅读