网站运行过程中经常需要存储一些全局配置信息,比如站点名称、管理员邮箱、备案号、默认分页大小等,将这些信息直接写在代码里会导致后续修改需要重新部署,维护成本很高。使用MySQL创建专门的设置表来存储这些配置,可以让配置修改更灵活,也方便统一管理。

设置表的设计思路
设置表的核心需求是存储键值对形式的配置项,同时需要支持配置的扩展,不需要频繁修改表结构。常见的设计有两种方案:
- 纵向存储方案:每行存储一个配置项,包含配置键、配置值、配置描述等字段,扩展新配置只需要插入新行,不需要改表结构,是更推荐的设计方式。
- 横向存储方案:每个配置项作为表的一个字段,扩展新配置需要新增字段,适合配置项固定且数量很少的场景。
纵向存储设置表的创建
以下是推荐的纵向存储设置表的SQL创建语句:
-- 创建网站设置表 CREATE TABLE `site_setting` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `setting_key` varchar(100) NOT NULL COMMENT '配置键,唯一标识', `setting_value` text COMMENT '配置值', `setting_desc` varchar(255) DEFAULT NULL COMMENT '配置描述', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_setting_key` (`setting_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='网站全局设置表';
表结构说明:
setting_key设置唯一索引,避免重复插入相同的配置项。setting_value使用text类型,可以存储较长的配置内容,比如站点公告、备案号等。update_time设置自动更新,每次修改配置都会自动记录更新时间。
设置表的常用操作
插入初始配置项
网站上线前可以插入一些默认的配置项:
INSERT INTO `site_setting` (`setting_key`, `setting_value`, `setting_desc`) VALUES
('site_name', '我的个人博客', '站点名称'),
('site_admin_email', 'admin@ipipp.com', '管理员邮箱'),
('site_icp', '粤ICP备12345678号', '备案号'),
('page_size', '10', '默认分页大小');
查询指定配置项
获取站点名称的配置值:
SELECT `setting_value` FROM `site_setting` WHERE `setting_key` = 'site_name';
更新配置项
修改站点名称:
UPDATE `site_setting` SET `setting_value` = '新的博客名称' WHERE `setting_key` = 'site_name';
批量查询所有配置
如果需要一次性获取所有配置,可以查询全表后转成键值对结构:
SELECT `setting_key`, `setting_value` FROM `site_setting`;
后端调用设置的示例
以下是PHP语言读取设置表的示例代码,其他语言逻辑类似:
<?php
// 假设已经建立了MySQL连接,$conn是连接对象
function getSiteSetting($key) {
$sql = "SELECT setting_value FROM site_setting WHERE setting_key = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("s", $key);
$stmt->execute();
$result = $stmt->get_result();
if ($row = $result->fetch_assoc()) {
return $row['setting_value'];
}
return null;
}
// 获取站点名称
$siteName = getSiteSetting('site_name');
echo "当前站点名称:" . $siteName;
?>
注意事项
- 如果配置项读取非常频繁,可以在应用层添加缓存,避免每次请求都查询数据库,减少数据库压力。
- 对于敏感配置比如数据库密码、API密钥,不建议存在这个公开的设置表中,应该使用环境变量或者专门的加密配置存储方案。
- 修改配置后如果需要立即生效,要注意清理对应的应用缓存,避免读取到旧数据。