305 lines
117 KiB
JavaScript
305 lines
117 KiB
JavaScript
import{_ as i,o as a,c as t,a2 as n}from"./chunks/framework.B-QBKwc1.js";const o=JSON.parse('{"title":"数据库设计","description":"项目支持 MySQL、PostgreSQL、SQL Server、Oracle、SQLite 五种数据库,通过 .env 的 DATABASE.TYPE 一键切换。","frontmatter":{},"headers":[],"relativePath":"zh/architecture/database-design.md","filePath":"zh/architecture/database-design.md"}'),h={name:"zh/architecture/database-design.md"};function l(e,s,p,k,d,r){return a(),t("div",null,[...s[0]||(s[0]=[n(`<h1 id="_4-9-数据库设计" tabindex="-1">4.9 数据库设计 <a class="header-anchor" href="#_4-9-数据库设计" aria-label="Permalink to "4.9 数据库设计""></a></h1><div class="tip custom-block"><p class="custom-block-title">概述</p><p>项目支持 MySQL、PostgreSQL、SQL Server、Oracle、SQLite 五种数据库,通过 <code>.env</code> 的 <code>DATABASE.TYPE</code> 一键切换。所有数据库共用同一套代码,无需修改业务逻辑。本章涵盖命名规范、表结构设计、字段说明、索引策略和多数据库适配。</p></div><h2 id="命名规范" tabindex="-1">命名规范 <a class="header-anchor" href="#命名规范" aria-label="Permalink to "命名规范""></a></h2><table tabindex="0"><thead><tr><th>对象</th><th>规范</th><th>示例</th></tr></thead><tbody><tr><td>表名</td><td><code>think_</code> 前缀 + 小写下划线</td><td><code>think_user</code>、<code>think_article</code></td></tr><tr><td>字段名</td><td>小写下划线</td><td><code>create_time</code>、<code>user_name</code></td></tr><tr><td>主键</td><td>统一 <code>id</code>,INT 自增</td><td><code>id INT PRIMARY KEY</code></td></tr><tr><td>外键</td><td><code>表名_id</code></td><td><code>user_id</code>、<code>role_id</code></td></tr><tr><td>索引</td><td><code>idx_字段名</code></td><td><code>idx_status</code>、<code>idx_tenant_id</code></td></tr><tr><td>唯一索引</td><td><code>uk_字段名</code></td><td><code>uk_username</code></td></tr></tbody></table><h2 id="公共字段" tabindex="-1">公共字段 <a class="header-anchor" href="#公共字段" aria-label="Permalink to "公共字段""></a></h2><p>所有业务表<strong>必须</strong>包含以下公共字段,由 <code>BaseModel</code> 自动维护:</p><div class="language-sql vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sql</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- MySQL 格式</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">id </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">INT</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> PRIMARY KEY</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> AUTO_INCREMENT COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">主键</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">is_delete </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">TINYINT</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">(</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;">1</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">) </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">DEFAULT</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;"> 0</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">软删除 0=正常 1=已删除</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">create_user </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">VARCHAR</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">(</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;">50</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">) </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">DEFAULT</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> ''</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">创建人</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">create_time </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DATETIME</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">创建时间</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">update_user </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">VARCHAR</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">(</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#2F798A;">50</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">) </span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;">DEFAULT</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> ''</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">更新人</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">,</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">update_time </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DATETIME</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> COMMENT </span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">更新时间</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span></span></code></pre></div><table tabindex="0"><thead><tr><th>字段</th><th>自动维护方</th><th>说明</th></tr></thead><tbody><tr><td><code>is_delete</code></td><td>BaseModel 软删除机制</td><td><code>softDelete()</code> 设置为 1,全局查询范围自动过滤</td></tr><tr><td><code>create_user</code></td><td>BaseModel <code>onBeforeInsert</code></td><td>取当前登录用户名,无用户时留空</td></tr><tr><td><code>create_time</code></td><td>BaseModel <code>onBeforeInsert</code></td><td>取当前时间,已传入则不覆盖</td></tr><tr><td><code>update_user</code></td><td>BaseModel <code>onBeforeUpdate</code></td><td>取当前登录用户名</td></tr><tr><td><code>update_time</code></td><td>BaseModel <code>onBeforeUpdate</code></td><td>始终覆盖为当前时间</td></tr></tbody></table><h2 id="核心表清单" tabindex="-1">核心表清单 <a class="header-anchor" href="#核心表清单" aria-label="Permalink to "核心表清单""></a></h2><h3 id="用户与权限-6-张表-" tabindex="-1">用户与权限(6 张表) <a class="header-anchor" href="#用户与权限-6-张表-" aria-label="Permalink to "用户与权限(6 张表)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Logic 基类</th></tr></thead><tbody><tr><td><code>think_user</code></td><td>用户表</td><td>BaseTenantLogic</td></tr><tr><td><code>think_user_role</code></td><td>用户角色关联表(N:N 中间表)</td><td>—</td></tr><tr><td><code>think_role</code></td><td>角色表</td><td>BaseLogic</td></tr><tr><td><code>think_role_menu</code></td><td>角色菜单关联表(N:N 中间表)</td><td>—</td></tr><tr><td><code>think_menu</code></td><td>菜单/权限表</td><td>BaseLogic</td></tr><tr><td><code>think_dept</code></td><td>部门表(树形)</td><td>BaseTenantLogic</td></tr></tbody></table><p><strong>关联关系:</strong></p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>think_user ──┐</span></span>
|
||
<span class="line"><span> │ N:N (think_user_role)</span></span>
|
||
<span class="line"><span>think_role ──┤</span></span>
|
||
<span class="line"><span> │ N:N (think_role_menu)</span></span>
|
||
<span class="line"><span>think_menu ──┘</span></span>
|
||
<span class="line"><span></span></span>
|
||
<span class="line"><span>think_dept ←── think_user.dept_id</span></span>
|
||
<span class="line"><span>think_tenant ←── think_user.tenant_id</span></span></code></pre></div><h3 id="组织架构-3-张表-" tabindex="-1">组织架构(3 张表) <a class="header-anchor" href="#组织架构-3-张表-" aria-label="Permalink to "组织架构(3 张表)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Logic 基类</th></tr></thead><tbody><tr><td><code>think_dept</code></td><td>部门表(树形,parent_id)</td><td>BaseTenantLogic</td></tr><tr><td><code>think_position</code></td><td>岗位表</td><td>BaseTenantLogic</td></tr><tr><td><code>think_level</code></td><td>职级表</td><td>BaseTenantLogic</td></tr></tbody></table><h3 id="租户-1-张表-" tabindex="-1">租户(1 张表) <a class="header-anchor" href="#租户-1-张表-" aria-label="Permalink to "租户(1 张表)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Logic 基类</th></tr></thead><tbody><tr><td><code>think_tenant</code></td><td>租户表</td><td>BaseLogic</td></tr></tbody></table><h3 id="系统配置-5-张表-" tabindex="-1">系统配置(5 张表) <a class="header-anchor" href="#系统配置-5-张表-" aria-label="Permalink to "系统配置(5 张表)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Logic 基类</th></tr></thead><tbody><tr><td><code>think_dict</code></td><td>字典表</td><td>BaseLogic</td></tr><tr><td><code>think_dict_item</code></td><td>字典项表</td><td>BaseLogic</td></tr><tr><td><code>think_config</code></td><td>配置组表</td><td>BaseLogic</td></tr><tr><td><code>think_config_item</code></td><td>配置项表</td><td>BaseLogic</td></tr><tr><td><code>think_param</code></td><td>系统参数表</td><td>BaseLogic</td></tr></tbody></table><p><strong>关联关系:</strong></p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>think_dict ←── think_dict_item.dict_id</span></span>
|
||
<span class="line"><span>think_config ←── think_config_item.config_id</span></span></code></pre></div><h3 id="内容管理-4-张表-" tabindex="-1">内容管理(4 张表) <a class="header-anchor" href="#内容管理-4-张表-" aria-label="Permalink to "内容管理(4 张表)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Logic 基类</th></tr></thead><tbody><tr><td><code>think_article</code></td><td>文章表</td><td>BaseTenantLogic</td></tr><tr><td><code>think_category</code></td><td>文章分类表(树形)</td><td>BaseTenantLogic</td></tr><tr><td><code>think_link</code></td><td>友情链接表</td><td>BaseTenantLogic</td></tr><tr><td><code>think_notice</code></td><td>通知公告表</td><td>BaseTenantLogic</td></tr></tbody></table><h3 id="日志审计-2-张表-" tabindex="-1">日志审计(2 张表) <a class="header-anchor" href="#日志审计-2-张表-" aria-label="Permalink to "日志审计(2 张表)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Logic 基类</th></tr></thead><tbody><tr><td><code>think_login_log</code></td><td>登录日志表</td><td>BaseLogic</td></tr><tr><td><code>think_operation_log</code></td><td>操作日志表</td><td>BaseLogic</td></tr></tbody></table><h3 id="定时任务-2-张表-" tabindex="-1">定时任务(2 张表) <a class="header-anchor" href="#定时任务-2-张表-" aria-label="Permalink to "定时任务(2 张表)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Logic 基类</th></tr></thead><tbody><tr><td><code>think_job</code></td><td>定时任务表</td><td>BaseLogic</td></tr><tr><td><code>think_job_log</code></td><td>定时任务执行日志表</td><td>BaseLogic</td></tr></tbody></table><p><strong>关联关系:</strong></p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>think_job ←── think_job_log.job_id</span></span></code></pre></div><h3 id="基础数据-2-张表-" tabindex="-1">基础数据(2 张表) <a class="header-anchor" href="#基础数据-2-张表-" aria-label="Permalink to "基础数据(2 张表)""></a></h3><table tabindex="0"><thead><tr><th>表名</th><th>说明</th><th>Logic 基类</th></tr></thead><tbody><tr><td><code>think_city</code></td><td>城市行政区划表(树形,pid)</td><td>BaseLogic</td></tr><tr><td><code>think_file_template</code></td><td>文件模板表</td><td>BaseLogic</td></tr></tbody></table><p><strong>共计 25 张业务表</strong>(不含中间表)。</p><h2 id="关键表字段说明" tabindex="-1">关键表字段说明 <a class="header-anchor" href="#关键表字段说明" aria-label="Permalink to "关键表字段说明""></a></h2><h3 id="think-user-用户表-" tabindex="-1">think_user(用户表) <a class="header-anchor" href="#think-user-用户表-" aria-label="Permalink to "think_user(用户表)""></a></h3><table tabindex="0"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td>INT</td><td>主键</td></tr><tr><td><code>username</code></td><td>VARCHAR(50)</td><td>用户名(登录账号)</td></tr><tr><td><code>password</code></td><td>VARCHAR(255)</td><td>密码(bcrypt 加密)</td></tr><tr><td><code>salt</code></td><td>VARCHAR(50)</td><td>密码盐值</td></tr><tr><td><code>realname</code></td><td>VARCHAR(50)</td><td>姓名</td></tr><tr><td><code>gender</code></td><td>TINYINT</td><td>性别(字典 gender)</td></tr><tr><td><code>mobile</code></td><td>VARCHAR(20)</td><td>手机号</td></tr><tr><td><code>email</code></td><td>VARCHAR(100)</td><td>邮箱</td></tr><tr><td><code>avatar</code></td><td>VARCHAR(500)</td><td>头像路径</td></tr><tr><td><code>status</code></td><td>TINYINT</td><td>状态(字典 user_status)</td></tr><tr><td><code>dept_id</code></td><td>INT</td><td>部门 ID</td></tr><tr><td><code>level_id</code></td><td>INT</td><td>职级 ID</td></tr><tr><td><code>position_id</code></td><td>INT</td><td>岗位 ID</td></tr><tr><td><code>tenant_id</code></td><td>INT</td><td>租户 ID</td></tr><tr><td><code>province_code</code></td><td>VARCHAR(20)</td><td>省编码</td></tr><tr><td><code>city_code</code></td><td>VARCHAR(20)</td><td>市编码</td></tr><tr><td><code>district_code</code></td><td>VARCHAR(20)</td><td>区编码</td></tr><tr><td><code>street_code</code></td><td>VARCHAR(20)</td><td>街道编码</td></tr><tr><td><code>city_info</code></td><td>VARCHAR(200)</td><td>城市名称拼接</td></tr><tr><td><code>is_delete</code></td><td>TINYINT(1)</td><td>软删除</td></tr><tr><td><code>create_user</code></td><td>VARCHAR(50)</td><td>创建人</td></tr><tr><td><code>create_time</code></td><td>DATETIME</td><td>创建时间</td></tr><tr><td><code>update_user</code></td><td>VARCHAR(50)</td><td>更新人</td></tr><tr><td><code>update_time</code></td><td>DATETIME</td><td>更新时间</td></tr></tbody></table><h3 id="think-role-角色表-" tabindex="-1">think_role(角色表) <a class="header-anchor" href="#think-role-角色表-" aria-label="Permalink to "think_role(角色表)""></a></h3><table tabindex="0"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td>INT</td><td>主键</td></tr><tr><td><code>name</code></td><td>VARCHAR(50)</td><td>角色名称</td></tr><tr><td><code>code</code></td><td>VARCHAR(50)</td><td>角色编码</td></tr><tr><td><code>data_scope</code></td><td>TINYINT</td><td>数据权限范围:1=全部 2=本部门 3=仅本人</td></tr><tr><td><code>status</code></td><td>TINYINT</td><td>状态</td></tr><tr><td><code>remark</code></td><td>VARCHAR(500)</td><td>备注</td></tr><tr><td><code>sort</code></td><td>INT</td><td>排序</td></tr><tr><td><code>...</code></td><td></td><td>公共字段</td></tr></tbody></table><h3 id="think-menu-菜单-权限表-" tabindex="-1">think_menu(菜单/权限表) <a class="header-anchor" href="#think-menu-菜单-权限表-" aria-label="Permalink to "think_menu(菜单/权限表)""></a></h3><table tabindex="0"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td>INT</td><td>主键</td></tr><tr><td><code>parent_id</code></td><td>INT</td><td>父级 ID(0=顶级)</td></tr><tr><td><code>name</code></td><td>VARCHAR(50)</td><td>菜单名称</td></tr><tr><td><code>permission</code></td><td>VARCHAR(100)</td><td>权限标识(如 <code>sys:user:add</code>)</td></tr><tr><td><code>type</code></td><td>TINYINT</td><td>类型:0=菜单/目录(可导航) 1=权限节点</td></tr><tr><td><code>path</code></td><td>VARCHAR(200)</td><td>路由路径</td></tr><tr><td><code>icon</code></td><td>VARCHAR(100)</td><td>图标</td></tr><tr><td><code>sort</code></td><td>INT</td><td>排序</td></tr><tr><td><code>status</code></td><td>TINYINT</td><td>状态</td></tr><tr><td><code>remark</code></td><td>VARCHAR(500)</td><td>备注</td></tr><tr><td><code>...</code></td><td></td><td>公共字段</td></tr></tbody></table><h3 id="think-tenant-租户表-" tabindex="-1">think_tenant(租户表) <a class="header-anchor" href="#think-tenant-租户表-" aria-label="Permalink to "think_tenant(租户表)""></a></h3><table tabindex="0"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td>INT</td><td>主键</td></tr><tr><td><code>name</code></td><td>VARCHAR(100)</td><td>租户名称</td></tr><tr><td><code>code</code></td><td>VARCHAR(50)</td><td>租户编码(系统自动生成:T+4位ID)</td></tr><tr><td><code>status</code></td><td>TINYINT</td><td>状态(字典 tenant_status):0=禁用 1=启用</td></tr><tr><td><code>expire_time</code></td><td>DATETIME</td><td>过期时间</td></tr><tr><td><code>max_user_num</code></td><td>INT</td><td>最大用户数限制</td></tr><tr><td><code>contact_name</code></td><td>VARCHAR(50)</td><td>联系人</td></tr><tr><td><code>contact_phone</code></td><td>VARCHAR(20)</td><td>联系电话</td></tr><tr><td><code>remark</code></td><td>VARCHAR(500)</td><td>备注</td></tr><tr><td><code>...</code></td><td></td><td>公共字段</td></tr></tbody></table><h3 id="think-article-文章表-" tabindex="-1">think_article(文章表) <a class="header-anchor" href="#think-article-文章表-" aria-label="Permalink to "think_article(文章表)""></a></h3><table tabindex="0"><thead><tr><th>字段</th><th>类型</th><th>说明</th></tr></thead><tbody><tr><td><code>id</code></td><td>INT</td><td>主键</td></tr><tr><td><code>title</code></td><td>VARCHAR(200)</td><td>标题</td></tr><tr><td><code>category_id</code></td><td>INT</td><td>分类 ID</td></tr><tr><td><code>cover</code></td><td>VARCHAR(500)</td><td>封面图路径</td></tr><tr><td><code>content</code></td><td>TEXT</td><td>内容(富文本,含 [IMG_URL] 占位符)</td></tr><tr><td><code>author</code></td><td>VARCHAR(50)</td><td>作者</td></tr><tr><td><code>status</code></td><td>TINYINT</td><td>状态(字典 article_status):0=正常 1=下架</td></tr><tr><td><code>sort</code></td><td>INT</td><td>排序</td></tr><tr><td><code>tenant_id</code></td><td>INT</td><td>租户 ID</td></tr><tr><td><code>...</code></td><td></td><td>公共字段</td></tr></tbody></table><h2 id="索引策略" tabindex="-1">索引策略 <a class="header-anchor" href="#索引策略" aria-label="Permalink to "索引策略""></a></h2><h3 id="推荐索引" tabindex="-1">推荐索引 <a class="header-anchor" href="#推荐索引" aria-label="Permalink to "推荐索引""></a></h3><div class="language-sql vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sql</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 用户表:高频查询字段</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_user </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_username (username);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_user </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_tenant_id (tenant_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_user </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_dept_id (dept_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_user </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_status (</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">status</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 角色关联表:外键索引</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_user_role </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_user_id (user_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_user_role </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_role_id (role_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_role_menu </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_role_id (role_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_role_menu </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_menu_id (menu_id);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 文章表:常用过滤字段</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_article </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_category_id (category_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_article </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_status (</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">status</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;">);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_article </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_tenant_id (tenant_id);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 日志表:按时间查询</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_login_log </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_create_time (create_time);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_operation_log </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_create_time (create_time);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_job_log </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_job_id (job_id);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 菜单表:树形查询</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_menu </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_parent_id (parent_id);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 字典项表:按字典 ID 查询</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_dict_item </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_dict_id (dict_id);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_config_item </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_config_id (config_id);</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">-- 城市表:按编码查询</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_city </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_area_code (area_code);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_city </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_parent_code (parent_code);</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ALTER</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> TABLE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> think_city </span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">ADD</span><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;"> INDEX</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> idx_pid (pid);</span></span></code></pre></div><h3 id="索引设计原则" tabindex="-1">索引设计原则 <a class="header-anchor" href="#索引设计原则" aria-label="Permalink to "索引设计原则""></a></h3><table tabindex="0"><thead><tr><th>原则</th><th>说明</th></tr></thead><tbody><tr><td>外键必加</td><td>所有 <code>_id</code> 外键字段都应加索引</td></tr><tr><td>过滤字段</td><td><code>pageEqFields</code> 中配置的精确匹配字段应加索引</td></tr><tr><td>模糊搜索</td><td><code>pageLikeFields</code> 中的字段可考虑全文索引,但 LIKE '%xx%' 无法用普通索引</td></tr><tr><td>排序字段</td><td><code>pageOrderBy</code> 中的默认排序字段可加索引</td></tr><tr><td>时间字段</td><td>日志表的 <code>create_time</code> 必加索引(按时间范围查询)</td></tr></tbody></table><h2 id="多数据库支持" tabindex="-1">多数据库支持 <a class="header-anchor" href="#多数据库支持" aria-label="Permalink to "多数据库支持""></a></h2><h3 id="支持的数据库" tabindex="-1">支持的数据库 <a class="header-anchor" href="#支持的数据库" aria-label="Permalink to "支持的数据库""></a></h3><table tabindex="0"><thead><tr><th>数据库</th><th>type 值</th><th>默认端口</th><th>默认用户</th><th>PHP 扩展</th></tr></thead><tbody><tr><td>MySQL</td><td><code>mysql</code></td><td>3306</td><td>root</td><td><code>pdo_mysql</code></td></tr><tr><td>PostgreSQL</td><td><code>pgsql</code></td><td>5432</td><td>postgres</td><td><code>pdo_pgsql</code></td></tr><tr><td>SQL Server</td><td><code>sqlsrv</code></td><td>1433</td><td>sa</td><td><code>pdo_sqlsrv</code></td></tr><tr><td>Oracle</td><td><code>oracle</code></td><td>1521</td><td>-</td><td><code>pdo_oci</code></td></tr><tr><td>SQLite</td><td><code>sqlite</code></td><td>-</td><td>-</td><td><code>pdo_sqlite</code></td></tr></tbody></table><h3 id="切换数据库" tabindex="-1">切换数据库 <a class="header-anchor" href="#切换数据库" aria-label="Permalink to "切换数据库""></a></h3><p>只需修改 <code>.env</code> 文件,无需改动任何代码:</p><div class="vp-code-group vp-adaptive-theme"><div class="tabs"><input type="radio" name="group-oEpOL" id="tab-pSUAzR1" checked><label for="tab-pSUAzR1">MySQL(默认)</label><input type="radio" name="group-oEpOL" id="tab-6IBsEq_"><label for="tab-6IBsEq_">PostgreSQL</label><input type="radio" name="group-oEpOL" id="tab-rCIJWF8"><label for="tab-rCIJWF8">SQL Server</label><input type="radio" name="group-oEpOL" id="tab-1Re_pdM"><label for="tab-1Re_pdM">Oracle</label><input type="radio" name="group-oEpOL" id="tab-23RRbya"><label for="tab-23RRbya">SQLite</label></div><div class="blocks"><div class="language-ini vp-adaptive-theme active"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">DATABASE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">TYPE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> mysql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">HOSTNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 127.0.0.1</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> rxthinkcmf.thinkphp8.elevue</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">USERNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">HOSTPORT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 3306</span></span></code></pre></div><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">DATABASE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">TYPE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> pgsql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">HOSTNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 127.0.0.1</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> rxthinkcmf.thinkphp8.elevue</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">USERNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> postgres</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">HOSTPORT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 5432</span></span></code></pre></div><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">DATABASE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">TYPE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> sqlsrv</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">HOSTNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 127.0.0.1</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> rxthinkcmf.thinkphp8.elevue</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">USERNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> sa</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">HOSTPORT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 1433</span></span></code></pre></div><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">DATABASE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">TYPE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> oracle</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">HOSTNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 127.0.0.1</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> rxthinkcmf.thinkphp8.elevue</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">USERNAME</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">PASSWORD</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">HOSTPORT</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 1521</span></span></code></pre></div><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">[</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#59873A;">DATABASE</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">]</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">TYPE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> sqlite</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">DATABASE</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> /www/api/runtime/database.sqlite</span></span></code></pre></div></div></div><h3 id="配置文件结构" tabindex="-1">配置文件结构 <a class="header-anchor" href="#配置文件结构" aria-label="Permalink to "配置文件结构""></a></h3><div class="language-php vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">php</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;">// config/database.php</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">return</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">default</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> env</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">(</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">database.type</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">,</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">mysql</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">),</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">connections</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">mysql</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">...</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">pgsql</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">...</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">sqlsrv</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">...</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">oracle</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">...</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">sqlite</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> =></span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> [</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;">...</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;"> ],</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#999999;">];</span></span></code></pre></div><h3 id="字段类型映射" tabindex="-1">字段类型映射 <a class="header-anchor" href="#字段类型映射" aria-label="Permalink to "字段类型映射""></a></h3><table tabindex="0"><thead><tr><th>通用类型</th><th>MySQL</th><th>PostgreSQL</th><th>SQL Server</th><th>Oracle</th><th>SQLite</th></tr></thead><tbody><tr><td>自增主键</td><td><code>INT AUTO_INCREMENT</code></td><td><code>SERIAL</code></td><td><code>INT IDENTITY</code></td><td><code>NUMBER</code> + 序列</td><td><code>INTEGER PRIMARY KEY</code></td></tr><tr><td>字符串</td><td><code>VARCHAR(n)</code></td><td><code>VARCHAR(n)</code></td><td><code>NVARCHAR(n)</code></td><td><code>VARCHAR2(n)</code></td><td><code>TEXT</code></td></tr><tr><td>文本</td><td><code>TEXT</code></td><td><code>TEXT</code></td><td><code>NVARCHAR(MAX)</code></td><td><code>CLOB</code></td><td><code>TEXT</code></td></tr><tr><td>布尔</td><td><code>TINYINT(1)</code></td><td><code>BOOLEAN</code></td><td><code>BIT</code></td><td><code>NUMBER(1)</code></td><td><code>INTEGER</code></td></tr><tr><td>日期时间</td><td><code>DATETIME</code></td><td><code>TIMESTAMP</code></td><td><code>DATETIME2</code></td><td><code>TIMESTAMP</code></td><td><code>TEXT</code></td></tr><tr><td>小数</td><td><code>DECIMAL(m,n)</code></td><td><code>NUMERIC(m,n)</code></td><td><code>DECIMAL(m,n)</code></td><td><code>NUMBER(m,n)</code></td><td><code>REAL</code></td></tr></tbody></table><div class="tip custom-block"><p class="custom-block-title">业务代码零修改</p><p>ThinkPHP 的 ORM 层会自动处理大部分 SQL 差异,切换数据库只需修改 <code>.env</code> 中的 <code>DATABASE.TYPE</code>,业务代码无需任何修改。</p></div><h3 id="各数据库安装与配置" tabindex="-1">各数据库安装与配置 <a class="header-anchor" href="#各数据库安装与配置" aria-label="Permalink to "各数据库安装与配置""></a></h3><p>项目支持五种数据库,按需选择一种即可。</p><table tabindex="0"><thead><tr><th>数据库</th><th>推荐场景</th><th>难度</th><th>XAMPP 自带</th><th>说明</th></tr></thead><tbody><tr><td><strong>MySQL</strong></td><td>日常开发、中小项目</td><td>⭐ 低</td><td>✅ 是</td><td>默认推荐,开箱即用</td></tr><tr><td><strong>PostgreSQL</strong></td><td>需要 JSONB、全文检索</td><td>⭐⭐ 中</td><td>❌ 否</td><td>功能丰富,需单独安装</td></tr><tr><td><strong>SQLite</strong></td><td>快速演示、单元测试</td><td>⭐ 低</td><td>✅ 是</td><td>无需数据库服务,零配置</td></tr><tr><td><strong>SQL Server</strong></td><td>企业 Windows 环境</td><td>⭐⭐ 中</td><td>驱动自带</td><td>需单独安装数据库服务</td></tr><tr><td><strong>Oracle</strong></td><td>大型企业项目</td><td>⭐⭐⭐ 高</td><td>驱动自带</td><td>需安装 Instant Client</td></tr></tbody></table><div class="tip custom-block"><p class="custom-block-title">新手推荐</p><p>XAMPP 已集成 MySQL 数据库服务,安装 XAMPP 后无需再单独安装数据库。</p></div><h4 id="MySQL-数据库" tabindex="-1">MySQL 数据库 <a class="header-anchor" href="#MySQL-数据库" aria-label="Permalink to "MySQL 数据库""></a></h4><p>MySQL 是项目默认推荐的关系型数据库,XAMPP 已自带,开箱即用。</p><div class="vp-code-group vp-adaptive-theme"><div class="tabs"><input type="radio" name="group-Mq_ik" id="tab-sBRsxEX" checked><label for="tab-sBRsxEX">Windows</label><input type="radio" name="group-Mq_ik" id="tab-acJkuTr"><label for="tab-acJkuTr">macOS</label><input type="radio" name="group-Mq_ik" id="tab-BViItSk"><label for="tab-BViItSk">Ubuntu / Debian</label><input type="radio" name="group-Mq_ik" id="tab-0fIMcBT"><label for="tab-0fIMcBT">Rocky Linux / CentOS</label></div><div class="blocks"><div class="language-sh vp-adaptive-theme active"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># XAMPP 已自带 MySQL,无需额外安装</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 在 XAMPP 控制面板启动 MySQL 即可</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 确认扩展已启用(编辑 D:\\xampp8.2\\php\\php.ini):</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># extension=pdo_mysql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 若前面有分号则去掉,保存后重启 XAMPP</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">D:\\xampp8.2\\mysql\\bin\\mysql.exe</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> root</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -proot</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -e</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE </span><span style="--shiki-dark:#E7EE98;--shiki-light:#999999;">\`</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">rxthinkcmf.thinkphp8.elevue</span><span style="--shiki-dark:#E7EE98;--shiki-light:#999999;">\`</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">brew</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mysql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">brew</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> services</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> start</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mysql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mysql_secure_installation</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">mysql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> root</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -proot</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -e</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE </span><span style="--shiki-dark:#E7EE98;--shiki-light:#999999;">\`</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">rxthinkcmf.thinkphp8.elevue</span><span style="--shiki-dark:#E7EE98;--shiki-light:#999999;">\`</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> apt</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mysql-server</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> systemctl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> start</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mysql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> systemctl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> enable</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mysql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mysql_secure_installation</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">mysql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> root</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -proot</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -e</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE </span><span style="--shiki-dark:#E7EE98;--shiki-light:#999999;">\`</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">rxthinkcmf.thinkphp8.elevue</span><span style="--shiki-dark:#E7EE98;--shiki-light:#999999;">\`</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> dnf</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mysql-server</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> systemctl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> start</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mysqld</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> systemctl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> enable</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mysqld</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mysql_secure_installation</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">mysql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> root</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -proot</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -e</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE </span><span style="--shiki-dark:#E7EE98;--shiki-light:#999999;">\`</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">rxthinkcmf.thinkphp8.elevue</span><span style="--shiki-dark:#E7EE98;--shiki-light:#999999;">\`</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div></div></div><h4 id="PostgreSQL-数据库" tabindex="-1">PostgreSQL 数据库 <a class="header-anchor" href="#PostgreSQL-数据库" aria-label="Permalink to "PostgreSQL 数据库""></a></h4><p>PostgreSQL 功能强大,支持 JSONB、全文检索等高级特性,需单独安装。</p><div class="vp-code-group vp-adaptive-theme"><div class="tabs"><input type="radio" name="group-SgKEC" id="tab-Y9MMTSp" checked><label for="tab-Y9MMTSp">Windows</label><input type="radio" name="group-SgKEC" id="tab-TeQm980"><label for="tab-TeQm980">macOS</label><input type="radio" name="group-SgKEC" id="tab-_GSfcf0"><label for="tab-_GSfcf0">Ubuntu / Debian</label><input type="radio" name="group-SgKEC" id="tab-3KJguur"><label for="tab-3KJguur">Rocky Linux / CentOS</label></div><div class="blocks"><div class="language-sh vp-adaptive-theme active"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 安装 PostgreSQL</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 访问 https://www.postgresql.org/download/windows/ 下载安装包</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 安装过程中记住设置的密码</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 确认扩展已启用(编辑 D:\\xampp8.2\\php\\php.ini):</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># extension=pdo_pgsql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># extension=pgsql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 若前面有分号则去掉,保存后重启 XAMPP</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 设置 postgres 密码(首次)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">psql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -U</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgres</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -c</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">ALTER USER postgres WITH PASSWORD 'root';</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">psql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -U</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgres</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -c</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE </span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">rxthinkcmf.thinkphp8.elevue</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> OWNER postgres ENCODING 'UTF8';</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">brew</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgresql</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">brew</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> services</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> start</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgresql</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 设置 postgres 密码</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgres</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> psql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -c</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">ALTER USER postgres WITH PASSWORD 'root';</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgres</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> psql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -c</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE </span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">rxthinkcmf.thinkphp8.elevue</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> OWNER postgres ENCODING 'UTF8';</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgres</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> psql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -c</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">GRANT ALL PRIVILEGES ON DATABASE </span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">rxthinkcmf.thinkphp8.elevue</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> TO postgres;</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> apt</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgresql</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgresql-contrib</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> systemctl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> start</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgresql</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 设置 postgres 密码</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgres</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> psql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -c</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">ALTER USER postgres WITH PASSWORD 'root';</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgres</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> psql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -c</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE </span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">rxthinkcmf.thinkphp8.elevue</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> OWNER postgres ENCODING 'UTF8';</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgres</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> psql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -c</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">GRANT ALL PRIVILEGES ON DATABASE </span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">rxthinkcmf.thinkphp8.elevue</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> TO postgres;</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> dnf</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgresql-server</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgresql-setup</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> --initdb</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> systemctl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> start</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgresql</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 设置 postgres 密码</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgres</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> psql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -c</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">ALTER USER postgres WITH PASSWORD 'root';</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgres</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> psql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -c</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE </span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">rxthinkcmf.thinkphp8.elevue</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> OWNER postgres ENCODING 'UTF8';</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -u</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> postgres</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> psql</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -c</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">GRANT ALL PRIVILEGES ON DATABASE </span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">rxthinkcmf.thinkphp8.elevue</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\"</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> TO postgres;</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div></div></div><h4 id="SQLite-数据库" tabindex="-1">SQLite 数据库 <a class="header-anchor" href="#SQLite-数据库" aria-label="Permalink to "SQLite 数据库""></a></h4><p>SQLite 无需安装数据库服务器,数据存储在单个文件中,适合开发环境和小型项目。</p><div class="vp-code-group vp-adaptive-theme"><div class="tabs"><input type="radio" name="group-cUQJt" id="tab-7_vZpK3" checked><label for="tab-7_vZpK3">Windows</label><input type="radio" name="group-cUQJt" id="tab-tUvTQzW"><label for="tab-tUvTQzW">macOS</label><input type="radio" name="group-cUQJt" id="tab-bYqcnjq"><label for="tab-bYqcnjq">Ubuntu / Debian</label><input type="radio" name="group-cUQJt" id="tab-Gzyb6Fl"><label for="tab-Gzyb6Fl">Rocky Linux / CentOS</label></div><div class="blocks"><div class="language-sh vp-adaptive-theme active"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># XAMPP 已自带 SQLite 扩展,无需额外安装</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 只需创建数据库文件</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">mkdir</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> D:</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\x</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">ampp</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\h</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">tdocs</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\r</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">untime</span></span>
|
||
<span class="line"><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">echo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">.</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> ></span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> D:</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\x</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">ampp</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\h</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">tdocs</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\r</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">untime</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;">\\d</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">atabase.sqlite</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 确认扩展已启用(编辑 D:\\xampp8.2\\php\\php.ini):</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># extension=pdo_sqlite</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># extension=sqlite3</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 若前面有分号则去掉,保存后重启 XAMPP</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># .env 配置</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># DATABASE.TYPE = sqlite</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># DATABASE.DATABASE = D:/xampp8.2/htdocs/runtime/database.sqlite</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">brew</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> php</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> sqlite</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库文件</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">mkdir</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -p</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /www/api/runtime</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">touch</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /www/api/runtime/database.sqlite</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> apt</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> php8.2-sqlite3</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库文件</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">mkdir</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -p</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /www/api/runtime</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">touch</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /www/api/runtime/database.sqlite</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> dnf</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> php-sqlite3</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库文件</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">mkdir</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -p</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /www/api/runtime</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">touch</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /www/api/runtime/database.sqlite</span></span></code></pre></div></div></div><h4 id="SQL-Server-数据库" tabindex="-1">SQL Server 数据库 <a class="header-anchor" href="#SQL-Server-数据库" aria-label="Permalink to "SQL Server 数据库""></a></h4><p>SQL Server 是微软商业数据库,XAMPP 已自带 pdo_sqlsrv 驱动,Windows 下开箱即用。</p><div class="vp-code-group vp-adaptive-theme"><div class="tabs"><input type="radio" name="group-Q4DEV" id="tab-rt6uxKn" checked><label for="tab-rt6uxKn">Windows</label><input type="radio" name="group-Q4DEV" id="tab-zCSUQlX"><label for="tab-zCSUQlX">macOS</label><input type="radio" name="group-Q4DEV" id="tab-khRAmwZ"><label for="tab-khRAmwZ">Ubuntu / Debian</label><input type="radio" name="group-Q4DEV" id="tab-nQGdwc6"><label for="tab-nQGdwc6">Rocky Linux / CentOS</label></div><div class="blocks"><div class="language-sh vp-adaptive-theme active"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># SQL Server 需单独安装(XAMPP 不自带数据库服务,但自带 PHP 驱动)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 1. 下载安装 SQL Server Express:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 2. XAMPP 已自带 pdo_sqlsrv 扩展,在 php.ini 中启用:</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># extension=php_sqlsrv_82_ts_x64.dll</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># extension=php_pdo_sqlsrv_82_ts_x64.dll</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sqlcmd</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -S</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> localhost</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -U</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> sa</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -P</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> root</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -Q</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE [rxthinkcmf.thinkphp8.elevue] COLLATE Chinese_PRC_CI_AS</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># macOS 不原生支持 SQL Server,建议使用 Docker</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">docker</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> run</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -e</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">ACCEPT_EULA=Y</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -e</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">SA_PASSWORD=root</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -p</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> 1433:1433</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> --name</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> sqlserver</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -d</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mcr.microsoft.com/mssql/server:2022-latest</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 安装 PHP 扩展</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">pecl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pdo_sqlsrv</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sqlcmd</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -S</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> localhost</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -U</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> sa</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -P</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> root</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -Q</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE [rxthinkcmf.thinkphp8.elevue] COLLATE Chinese_PRC_CI_AS</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 1. 安装 SQL Server</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">curl</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -sSL</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> https://packages.microsoft.com/keys/microsoft.asc</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> |</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> apt-key</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> add</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> -</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> add-apt-repository</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#999999;">$(</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">wget</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -qO-</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> https://packages.microsoft.com/config/ubuntu/22.04/mssql-server-2022.list</span><span style="--shiki-dark:#E7EE98;--shiki-light:#999999;">)</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> apt</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> update</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> apt</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -y</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mssql-server</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /opt/mssql/bin/mssql-conf</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> setup</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 2. 安装命令行工具</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> apt</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -y</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mssql-tools18</span></span>
|
||
<span class="line"><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">echo</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">export PATH="$PATH:/opt/mssql-tools18/bin"</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> >></span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> ~/.bashrc</span></span>
|
||
<span class="line"><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">source</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> ~/.bashrc</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 3. 安装 PHP 扩展</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pecl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pdo_sqlsrv</span></span>
|
||
<span class="line"><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">echo</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">extension=pdo_sqlsrv.so</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> |</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> tee</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /etc/php/8.2/mods-available/pdo_sqlsrv.ini</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> phpenmod</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pdo_sqlsrv</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sqlcmd</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -S</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> localhost</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -U</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> sa</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -P</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> root</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -Q</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE [rxthinkcmf.thinkphp8.elevue] COLLATE Chinese_PRC_CI_AS</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 1. 安装 SQL Server</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> curl</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -o</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /etc/yum.repos.d/mssql-server.repo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> https://packages.microsoft.com/config/rhel/8/mssql-server-2022.repo</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> dnf</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -y</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mssql-server</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /opt/mssql/bin/mssql-conf</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> setup</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 2. 安装命令行工具</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> curl</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -o</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /etc/yum.repos.d/msprod.repo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> https://packages.microsoft.com/config/rhel/8/prod.repo</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> dnf</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -y</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> mssql-tools18</span></span>
|
||
<span class="line"><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">echo</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> '</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">export PATH="$PATH:/opt/mssql-tools18/bin"</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">'</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> >></span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> ~/.bashrc</span></span>
|
||
<span class="line"><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">source</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> ~/.bashrc</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 3. 安装 PHP 扩展</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pecl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pdo_sqlsrv</span></span>
|
||
<span class="line"><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">echo</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">extension=pdo_sqlsrv.so</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> |</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> tee</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /etc/php.d/pdo_sqlsrv.ini</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 创建数据库</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sqlcmd</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -S</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> localhost</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -U</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> sa</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -P</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> root</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -Q</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE DATABASE [rxthinkcmf.thinkphp8.elevue] COLLATE Chinese_PRC_CI_AS</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span></span></code></pre></div></div></div><h4 id="Oracle-数据库" tabindex="-1">Oracle 数据库 <a class="header-anchor" href="#Oracle-数据库" aria-label="Permalink to "Oracle 数据库""></a></h4><p>Oracle 是企业级商业数据库,需手动安装 Instant Client 和 pdo_oci 扩展。</p><div class="vp-code-group vp-adaptive-theme"><div class="tabs"><input type="radio" name="group-XQTbx" id="tab-1DimOf1" checked><label for="tab-1DimOf1">Windows</label><input type="radio" name="group-XQTbx" id="tab-xYXYyr3"><label for="tab-xYXYyr3">macOS</label><input type="radio" name="group-XQTbx" id="tab-hE42vd9"><label for="tab-hE42vd9">Ubuntu / Debian</label><input type="radio" name="group-XQTbx" id="tab-w0Mlijq"><label for="tab-w0Mlijq">Rocky Linux / CentOS</label></div><div class="blocks"><div class="language-sh vp-adaptive-theme active"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># XAMPP 已自带 php_pdo_oci.dll,只需安装 Oracle Instant Client 并在 php.ini 中启用</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 1. 安装 Oracle Instant Client</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 下载地址:https://www.oracle.com/database/technologies/instant-client/downloads.html</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 选择 Basic Package,x64,推荐 19c</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 解压到 C:\\oracle\\instantclient_19_20(⚠️ 避免空格与中文)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 2. 配置系统环境变量</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 将 C:\\oracle\\instantclient_19_20 添加到系统 PATH</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 3. 安装 VC++ 运行库(必装)</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 下载:https://aka.ms/vc14/vc_redist.x64.exe</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 4. 启用扩展</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 编辑 D:\\xampp8.2\\php\\php.ini,去掉分号:</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># extension=pdo_oci</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 5. 重启 XAMPP(完全关闭再启动)</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># .env 配置</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># DATABASE.TYPE = oracle</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># DATABASE.HOSTNAME = 127.0.0.1</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># DATABASE.DATABASE = rxthinkcmf.thinkphp8.elevue</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># DATABASE.USERNAME = root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># DATABASE.PASSWORD = root</span></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># DATABASE.HOSTPORT = 1521</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># Oracle 不原生支持 macOS,建议使用 Docker</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">docker</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> run</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -d</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> --name</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> oracle-xe</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -p</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> 1521:1521</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -e</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> ORACLE_PWD=root</span><span style="--shiki-dark:#F286C4;--shiki-light:#A65E2B;"> \\</span></span>
|
||
<span class="line"><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> gvenzl/oracle-xe:21-slim</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 安装 PHP 扩展</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">pecl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pdo_oci</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 1. 安装 Oracle Database</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> dpkg</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -i</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> oracle-database-xe-21c-1.0-1.x86_64.deb</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /etc/init.d/oracle-xe-21c</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> configure</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 2. 安装 Oracle Instant Client</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> dpkg</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -i</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> oracle-instantclient-basic-</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-style:italic;--shiki-light:#A65E2B;--shiki-light-font-style:inherit;">*</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">.deb</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> dpkg</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -i</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> oracle-instantclient-devel-</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-style:italic;--shiki-light:#A65E2B;--shiki-light-font-style:inherit;">*</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">.deb</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 3. 安装 PHP 扩展</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pecl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pdo_oci</span></span>
|
||
<span class="line"><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">echo</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">extension=pdo_oci.so</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> |</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> tee</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /etc/php/8.2/mods-available/pdo_oci.ini</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> phpenmod</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pdo_oci</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 4. 创建表空间和用户</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sqlplus</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> system/root@localhost:1521/XE</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> <<</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B5695977;">EOF</span></span>
|
||
<span class="line"><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE TABLESPACE "rxthinkcmf_thinkphp8_elevue" DATAFILE '/opt/oracle/oradata/XE/rxthinkcmf_thinkphp8_elevue.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE USER "root" IDENTIFIED BY "root" DEFAULT TABLESPACE "rxthinkcmf_thinkphp8_elevue";</span></span>
|
||
<span class="line"><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">GRANT CONNECT, RESOURCE, CREATE VIEW TO "root";</span></span>
|
||
<span class="line"><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">GRANT UNLIMITED TABLESPACE TO "root";</span></span>
|
||
<span class="line"><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">EXIT;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#B5695977;">EOF</span></span></code></pre></div><div class="language-sh vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">sh</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 1. 安装 Oracle Database</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> rpm</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -ivh</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> oracle-database-xe-21c-1.0-1.x86_64.rpm</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /etc/init.d/oracle-xe-21c</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> configure</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 2. 安装 Oracle Instant Client</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> rpm</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -ivh</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> oracle-instantclient-basic-</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-style:italic;--shiki-light:#A65E2B;--shiki-light-font-style:inherit;">*</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">.rpm</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> rpm</span><span style="--shiki-dark:#BF9EEE;--shiki-light:#A65E2B;"> -ivh</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> oracle-instantclient-devel-</span><span style="--shiki-dark:#BF9EEE;--shiki-dark-font-style:italic;--shiki-light:#A65E2B;--shiki-light-font-style:inherit;">*</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">.rpm</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 3. 安装 PHP 扩展</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pecl</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> install</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pdo_oci</span></span>
|
||
<span class="line"><span style="--shiki-dark:#97E1F1;--shiki-light:#998418;">echo</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;"> "</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">extension=pdo_oci.so</span><span style="--shiki-dark:#DEE492;--shiki-light:#B5695977;">"</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> |</span><span style="--shiki-dark:#62E884;--shiki-light:#59873A;"> sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> tee</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> /etc/php/8.2/mods-available/pdo_oci.ini</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sudo</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> phpenmod</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> pdo_oci</span></span>
|
||
<span class="line"></span>
|
||
<span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># 4. 创建表空间和用户</span></span>
|
||
<span class="line"><span style="--shiki-dark:#62E884;--shiki-light:#59873A;">sqlplus</span><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;"> system/root@localhost:1521/XE</span><span style="--shiki-dark:#F286C4;--shiki-light:#AB5959;"> <<</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#B5695977;">EOF</span></span>
|
||
<span class="line"><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE TABLESPACE "rxthinkcmf_thinkphp8_elevue" DATAFILE '/opt/oracle/oradata/XE/rxthinkcmf_thinkphp8_elevue.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">CREATE USER "root" IDENTIFIED BY "root" DEFAULT TABLESPACE "rxthinkcmf_thinkphp8_elevue";</span></span>
|
||
<span class="line"><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">GRANT CONNECT, RESOURCE, CREATE VIEW TO "root";</span></span>
|
||
<span class="line"><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">GRANT UNLIMITED TABLESPACE TO "root";</span></span>
|
||
<span class="line"><span style="--shiki-dark:#E7EE98;--shiki-light:#B56959;">EXIT;</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F6F6F4;--shiki-light:#B5695977;">EOF</span></span></code></pre></div></div></div><h2 id="SQL-脚本" tabindex="-1">SQL 脚本 <a class="header-anchor" href="#SQL-脚本" aria-label="Permalink to "SQL 脚本""></a></h2><p>项目为每种数据库提供了独立的 SQL 脚本,存放在 <code>document/</code> 目录下按数据库类型分组:</p><div class="language-text vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">text</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span>document/</span></span>
|
||
<span class="line"><span>├── mysql/</span></span>
|
||
<span class="line"><span>│ └── rxthinkcmf.thinkphp8.elevue.sql # MySQL 版本</span></span>
|
||
<span class="line"><span>├── postgresql/</span></span>
|
||
<span class="line"><span>│ └── rxthinkcmf.thinkphp8.elevue.sql # PostgreSQL 版本</span></span>
|
||
<span class="line"><span>├── sqlserver/</span></span>
|
||
<span class="line"><span>│ └── rxthinkcmf.thinkphp8.elevue.sql # SQL Server 版本</span></span>
|
||
<span class="line"><span>├── oracle/</span></span>
|
||
<span class="line"><span>│ └── rxthinkcmf.thinkphp8.elevue.sql # Oracle 版本</span></span>
|
||
<span class="line"><span>└── sqlite/</span></span>
|
||
<span class="line"><span> └── rxthinkcmf.thinkphp8.elevue.sql # SQLite 版本</span></span></code></pre></div><p>各数据库脚本包含完整的表结构定义和初始数据(用户、角色、菜单、字典、城市行政区划等),已针对各数据库的 SQL 语法做了适配,可直接导入使用。</p><p>导入方法详见 <a href="/zh/quickstart/database-init.html">2.4 数据库初始化</a>。</p><h2 id="慢查询排查" tabindex="-1">慢查询排查 <a class="header-anchor" href="#慢查询排查" aria-label="Permalink to "慢查询排查""></a></h2><div class="language-ini vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">ini</span><pre class="shiki shiki-themes dracula-soft vitesse-light vp-code" tabindex="0"><code><span class="line"><span style="--shiki-dark:#7B7F8B;--shiki-light:#A0ADA0;"># MySQL my.cnf</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">slow_query_log</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 1</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">slow_query_log_file</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> /var/log/mysql/slow.log</span></span>
|
||
<span class="line"><span style="--shiki-dark:#F286C4;--shiki-light:#1E754F;">long_query_time</span><span style="--shiki-dark:#F286C4;--shiki-light:#999999;"> =</span><span style="--shiki-dark:#F6F6F4;--shiki-light:#393A34;"> 2</span></span></code></pre></div><div class="warning custom-block"><p class="custom-block-title">注意</p><p>项目所有查询都通过 ThinkPHP ORM 构建,不会出现原生 SQL 注入。如需排查慢查询,建议开启数据库慢查询日志,而非在代码层面埋点。</p></div>`,86)])])}const c=i(h,[["render",l]]);export{o as __pageData,c as default};
|