我們的資料庫是資料同步過來的 有時候某些表會失敗,資料沒有過來,每天都要自己開啟資料庫 一個個點點點 看看哪個表沒有成功 再同步一次 表如果多的話 有點麻煩了
檢測資料庫表為空的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 協議》,轉載必須註明作者和本文連結