DB数据库文件
This commit is contained in:
53
server/db/run_dice_player_dept_username_unique.php
Normal file
53
server/db/run_dice_player_dept_username_unique.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
/**
|
||||
* 为 dice_player 增加 (dept_id, username) 唯一索引
|
||||
* 用法:在 server 目录执行 php db/run_dice_player_dept_username_unique.php
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
define('BASE_PATH', dirname(__DIR__));
|
||||
|
||||
require_once BASE_PATH . '/vendor/autoload.php';
|
||||
|
||||
if (class_exists(\Dotenv\Dotenv::class) && is_file(BASE_PATH . '/.env')) {
|
||||
if (method_exists(\Dotenv\Dotenv::class, 'createUnsafeMutable')) {
|
||||
\Dotenv\Dotenv::createUnsafeMutable(BASE_PATH)->load();
|
||||
} else {
|
||||
\Dotenv\Dotenv::createMutable(BASE_PATH)->load();
|
||||
}
|
||||
}
|
||||
|
||||
\Webman\Config::load(BASE_PATH . '/config', ['route', 'plugin']);
|
||||
\Webman\ThinkOrm\ThinkOrm::start(null);
|
||||
|
||||
use support\think\Db;
|
||||
|
||||
echo "检查 (dept_id, username) 重复...\n";
|
||||
$dupes = Db::query(
|
||||
'SELECT dept_id, username, COUNT(*) AS c FROM dice_player
|
||||
WHERE username IS NOT NULL AND username <> \'\'
|
||||
GROUP BY dept_id, username HAVING c > 1 LIMIT 20'
|
||||
);
|
||||
if (!empty($dupes)) {
|
||||
echo "存在重复记录,请先处理后再执行:\n";
|
||||
print_r($dupes);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$indexes = Db::query("SHOW INDEX FROM `dice_player` WHERE Key_name = 'idx_dice_player_username'");
|
||||
if (!empty($indexes)) {
|
||||
Db::execute('ALTER TABLE `dice_player` DROP INDEX `idx_dice_player_username`');
|
||||
echo "已删除 idx_dice_player_username\n";
|
||||
}
|
||||
|
||||
$uk = Db::query("SHOW INDEX FROM `dice_player` WHERE Key_name = 'uk_dice_player_dept_username'");
|
||||
if (empty($uk)) {
|
||||
Db::execute(
|
||||
'ALTER TABLE `dice_player` ADD UNIQUE INDEX `uk_dice_player_dept_username` (`dept_id`, `username`)'
|
||||
);
|
||||
echo "已创建 uk_dice_player_dept_username\n";
|
||||
} else {
|
||||
echo "uk_dice_player_dept_username 已存在,跳过\n";
|
||||
}
|
||||
|
||||
echo "完成\n";
|
||||
Reference in New Issue
Block a user