账号封禁表存储了被封禁账号的信息,包括封禁时间、解封时间、封禁原因等。
字段名 | 类型 | 属性 | 描述 |
---|---|---|---|
id | int(10) unsigned | 主键 | 账号ID,对应account表中的id字段 |
bandate | int(10) unsigned | 主键 | 封禁日期 (Unix时间戳) |
unbandate | int(10) unsigned | 不为空 | 解封日期 (Unix时间戳,0表示永久封禁) |
bannedby | varchar(50) | 不为空 | 封禁操作者 |
banreason | varchar(255) | 不为空 | 封禁原因 |
active | tinyint(3) unsigned | 不为空 | 是否生效 (0=已解封, 1=封禁中) |
被封禁的账号ID,对应account表中的id字段。这个字段是表的主键之一,用于标识被封禁的账号。
示例值: 1, 42, 1337
账号被封禁的日期和时间,以Unix时间戳格式存储(从1970年1月1日UTC开始的秒数)。这个字段是表的主键之一,允许记录同一账号的多次封禁历史。
示例值: 1609459200(2021年1月1日 00:00:00 UTC)
注意: 可以使用FROM_UNIXTIME()函数将时间戳转换为可读的日期时间格式。
账号预计解封的日期和时间,以Unix时间戳格式存储。如果设置为0,表示永久封禁。
示例值:
执行封禁操作的管理员或系统名称。通常是GM的角色名或账号名,也可以是自动封禁系统的标识。
示例值: "Admin", "GameMaster", "AnticheatSystem"
封禁账号的原因,用于记录为什么对该账号执行封禁操作。这个信息通常会显示给被封禁的玩家。
示例值: "使用外挂", "违反服务条款", "骚扰其他玩家", "账号被盗"
表示封禁是否仍然生效。值为1表示封禁中,值为0表示已解封(可能是手动解封或封禁期已过)。
示例值: 0(已解封), 1(封禁中)
注意: 即使unbandate已过,如果active仍为1,账号仍然会被视为封禁状态。
以下SQL语句将封禁ID为42的账号,为期30天:
INSERT INTO account_banned (id, bandate, unbandate, bannedby, banreason, active)
VALUES (42, UNIX_TIMESTAMP(), UNIX_TIMESTAMP() + (30 * 24 * 3600), 'Admin', '使用外挂', 1);
以下SQL语句将永久封禁ID为42的账号:
INSERT INTO account_banned (id, bandate, unbandate, bannedby, banreason, active)
VALUES (42, UNIX_TIMESTAMP(), 0, 'Admin', '严重违规', 1);
以下SQL语句将解封ID为42的账号:
UPDATE account_banned
SET active = 0
WHERE id = 42 AND active = 1;
使用以下SQL语句查询:
SELECT a.username, ab.bandate, ab.unbandate, ab.bannedby, ab.banreason
FROM account_banned ab
JOIN account a ON ab.id = a.id
WHERE ab.active = 1;
使用以下SQL语句查询:
SELECT FROM_UNIXTIME(bandate) AS ban_date,
FROM_UNIXTIME(unbandate) AS unban_date,
bannedby, banreason, active
FROM account_banned
WHERE id = 42
ORDER BY bandate DESC;
不需要。封禁设置后立即生效,如果玩家当前已登录,他们将在下次尝试登录时被阻止。
通过unbandate字段区分: