判斷資料庫中表內資料為空的辦法

chowjiawei發表於2021-11-24

我們的資料庫是資料同步過來的 有時候某些表會失敗,資料沒有過來,每天都要自己開啟資料庫 一個個點點點 看看哪個表沒有成功 再同步一次 表如果多的話 有點麻煩了

檢測資料庫表為空的MYSQL語句

SELECT
    TABLE_NAME 
FROM
TABLES 
WHERE
    TABLE_SCHEMA = '你要的資料庫名字' 
    AND table_rows = 0 
ORDER BY
    table_name;

現在變成了每天執行這個查詢語句? 那我每天還要去執行? 我還是做個命令出來吧

做成命令


<?php

namespace App\Console\Commands\Fund;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;

class TableNullCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'table:null';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '獲取資料庫中表資料為空的表名';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }


    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        $this->output->title('正在檢測資料庫表內資料為空的表');
        config(['database.connections.fund.database'=>'information_schema']);
        $result=DB::connection('fund')->select("
        SELECT
    TABLE_NAME
FROM
TABLES
WHERE
    TABLE_SCHEMA = 'JYDB_temp'
    AND table_rows = 0
ORDER BY
    table_name;
        ");
        $count=count($result);
        if ($count==0) {
            $this->output->success('無表內資料為空的資料表,檢測完畢,為您退出');
            return ;
        }

        if ($count>0) {
            $tableName=array_column($result, 'TABLE_NAME');
            $tableName=implode(',', $tableName);
            $this->output->success("檢測到 $count 表內資料為空的資料表  $tableName 正在為您通知到指定的頻道,請稍等");
            Artisan::call('business:notify', [
                '--text' => "檢測到有 $count 個表資料為空: $tableName"
            ]);
            $this->output->success("命令完成,為您退出");
        }
    }
}


註冊命令 每天9點跑命令,自動通知

 protected $commands = [
     TableNullCommand::class
 ]
$schedule->command('table:null')->timezone('Asia/Shanghai')->dailyAt('09:00'); 

結果

判斷資料庫中表內資料為空的辦法

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章