Files
rxthinkcmf-wiki/RXThinkCMF_ThinkPhp8_AntdVue/zh/quickstart/database-init.md
T
2026-09-29 10:14:04 +08:00

373 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2.4 数据库初始化
:::tip 概述
本章指导您完成数据库的创建和 SQL 脚本导入。项目为每种数据库提供了独立的 SQL 脚本,存放在 `document/` 目录下按数据库类型分组。
:::
## SQL 脚本目录结构
```text
document/
├── mysql/
│ └── rxthinkcmf.thinkphp6.elevue.sql # MySQL 版本
├── postgresql/
│ └── rxthinkcmf.thinkphp6.elevue.sql # PostgreSQL 版本
├── sqlserver/
│ └── rxthinkcmf.thinkphp6.elevue.sql # SQL Server 版本
├── oracle/
│ └── rxthinkcmf.thinkphp6.elevue.sql # Oracle 版本
└── sqlite/
└── rxthinkcmf.thinkphp6.elevue.sql # SQLite 版本
```
各数据库脚本已针对对应的 SQL 语法做了适配,可直接导入使用,无需手动转换。
---
## MySQL 初始化
### 1. 创建数据库
```bash
# 连接 MySQL(-u root 以 root 用户,-p 交互式输入密码)
mysql -u root -p
```
```sql
-- 创建项目数据库
-- CHARACTER SET utf8mb4 → 支持 emoji 等四字节字符
-- COLLATE utf8mb4_general_ci → 不区分大小写的排序规则
CREATE DATABASE `rxthinkcmf.thinkphp6.elevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
EXIT;
```
### 2. 导入 SQL 脚本
```bash
# -----------------------------------------------------------------------------
# 导入 MySQL 专用初始化脚本
# -----------------------------------------------------------------------------
# -u root -proot → 数据库用户名和密码
# rxthinkcmf... → 目标数据库名
# < file.sql → 将 SQL 文件内容作为 mysql 命令的输入
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
```
:::tip 温馨提示
导入完成后,数据库中包含完整的表结构和初始数据(管理员账号、菜单、字典、城市数据等),可直接使用。
:::
### 3. 配置 .env
```ini
[DATABASE]
TYPE = mysql ; 数据库类型
HOSTNAME = 127.0.0.1 ; 数据库地址
DATABASE = rxthinkcmf.thinkphp6.elevue ; 数据库名
USERNAME = root ; 用户名
PASSWORD = root ; 密码
HOSTPORT = 3306 ; 端口
PREFIX = think_ ; 表前缀
```
---
## PostgreSQL 初始化
### 1. 创建数据库
```bash
# 以 postgres 系统用户身份进入 PostgreSQL 命令行
sudo -u postgres psql
```
```sql
-- 创建数据库用户(如已存在可跳过)
CREATE USER postgres WITH PASSWORD 'root';
-- 创建项目数据库
-- OWNER postgres → 指定数据库所有者
-- ENCODING 'UTF8' → 使用 UTF-8 编码
CREATE DATABASE "rxthinkcmf.thinkphp6.elevue" OWNER postgres ENCODING 'UTF8';
-- 授予用户对该数据库的所有权限
GRANT ALL PRIVILEGES ON DATABASE "rxthinkcmf.thinkphp6.elevue" TO postgres;
\q
```
### 2. 导入 SQL 脚本
```bash
# -----------------------------------------------------------------------------
# 导入 PostgreSQL 专用初始化脚本
# -----------------------------------------------------------------------------
# -U postgres → 连接用户
# -d ... → 目标数据库
# -f file.sql → 执行 SQL 文件
psql -U postgres -d rxthinkcmf.thinkphp6.elevue -f document/postgresql/rxthinkcmf.thinkphp6.elevue.sql
```
### 3. 配置 .env
```ini
[DATABASE]
TYPE = pgsql ; 数据库类型改为 pgsql
HOSTNAME = 127.0.0.1
DATABASE = rxthinkcmf.thinkphp6.elevue
USERNAME = postgres ; PostgreSQL 默认用户
PASSWORD = root
HOSTPORT = 5432 ; PostgreSQL 默认端口
PREFIX = think_
```
---
## SQLite 初始化
### 1. 创建数据库文件
```bash
# 安装 PHP 的 SQLite 扩展(如尚未安装)
sudo apt install php8.2-sqlite3
# 创建数据库文件存放目录(-p 参数:目录不存在时自动创建)
mkdir -p /www/api/runtime
# 创建空的 SQLite 数据库文件(touch 创建空文件)
touch /www/api/runtime/database.sqlite
```
### 2. 导入 SQL 脚本
```bash
# -----------------------------------------------------------------------------
# 导入 SQLite 专用初始化脚本
# -----------------------------------------------------------------------------
# sqlite3 → SQLite 命令行工具
# 数据库文件路径 → SQLite 数据库存储在单个文件中
# < file.sql → 将 SQL 文件作为输入执行
sqlite3 /www/api/runtime/database.sqlite < document/sqlite/rxthinkcmf.thinkphp6.elevue.sql
```
### 3. 配置 .env
```ini
[DATABASE]
TYPE = sqlite ; 数据库类型改为 sqlite
DATABASE = /www/api/runtime/database.sqlite ; SQLite 文件路径
PREFIX = think_
```
:::tip SQLite 特点
- 无需安装数据库服务器,数据存储在单个文件中
- 适合开发环境、小型项目或嵌入式场景
- 文件路径需确保 PHP 进程有读写权限
:::
---
## SQL Server 初始化
### 1. 创建数据库
```bash
# -----------------------------------------------------------------------------
# 使用 sqlcmd 创建数据库
# -----------------------------------------------------------------------------
# -S localhost → 服务器地址
# -U sa → 用户名(sa 为 SQL Server 管理员)
# -P root → 密码
# -Q → 执行 SQL 查询后退出
# COLLATE Chinese_PRC_CI_AS → 中文排序规则(不区分大小写)
sqlcmd -S localhost -U sa -P root -Q "CREATE DATABASE [rxthinkcmf.thinkphp6.elevue] COLLATE Chinese_PRC_CI_AS"
```
### 2. 导入 SQL 脚本
```bash
# -----------------------------------------------------------------------------
# 导入 SQL Server 专用初始化脚本
# -----------------------------------------------------------------------------
# -d rxthinkcmf... → 目标数据库
# -i file.sql → 执行 SQL 文件
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.thinkphp6.elevue -i document/sqlserver/rxthinkcmf.thinkphp6.elevue.sql
```
### 3. 配置 .env
```ini
[DATABASE]
TYPE = sqlsrv ; 数据库类型改为 sqlsrv
HOSTNAME = 127.0.0.1
DATABASE = rxthinkcmf.thinkphp6.elevue
USERNAME = sa ; SQL Server 默认管理员
PASSWORD = root
HOSTPORT = 1433 ; SQL Server 默认端口
PREFIX = think_
```
---
## Oracle 初始化
### 1. 创建表空间和用户
```sql
-- 使用 sqlplus 连接 Oracle(system 为管理员用户,XE 为服务名)
sqlplus system/root@localhost:1521/XE
-- 创建表空间(Oracle 数据存储的逻辑单元)
-- DATAFILE → 数据文件的物理路径
-- SIZE 100M → 初始大小 100MB
-- AUTOEXTEND ON NEXT 100M → 空间不足时自动扩展 100MB
CREATE TABLESPACE "rxthinkcmf_thinkphp6_elevue"
DATAFILE '/u01/oradata/rxthinkcmf_thinkphp6_elevue.dbf'
SIZE 100M AUTOEXTEND ON NEXT 100M;
-- 创建数据库用户
-- IDENTIFIED BY → 设置密码
-- DEFAULT TABLESPACE → 指定默认表空间
CREATE USER "root" IDENTIFIED BY "root"
DEFAULT TABLESPACE "rxthinkcmf_thinkphp6_elevue";
-- 授权
-- CONNECT → 连接权限
-- RESOURCE → 创建表/视图等对象的权限
-- CREATE VIEW → 创建视图的权限
-- UNLIMITED TABLESPACE → 不限制表空间使用量
GRANT CONNECT, RESOURCE, CREATE VIEW TO "root";
GRANT UNLIMITED TABLESPACE TO "root";
EXIT;
```
### 2. 导入 SQL 脚本
```bash
# -----------------------------------------------------------------------------
# 导入 Oracle 专用初始化脚本
# -----------------------------------------------------------------------------
# sqlplus → Oracle 命令行工具
# root/root@localhost:1521/XE → 用户/密码@主机:端口/服务名
# @file.sql → 执行 SQL 文件
sqlplus root/root@localhost:1521/XE @document/oracle/rxthinkcmf.thinkphp6.elevue.sql
```
### 3. 配置 .env
```ini
[DATABASE]
TYPE = oracle ; 数据库类型改为 oracle
HOSTNAME = 127.0.0.1
DATABASE = rxthinkcmf.thinkphp6.elevue
USERNAME = root
PASSWORD = root
HOSTPORT = 1521 ; Oracle 默认端口
PREFIX = think_
```
---
## 验证数据库
无论使用哪种数据库,都可以通过以下方式验证:
```bash
# 方式一:ThinkPHP 命令行(显示版本信息,验证框架可正常加载)
php think version
# 方式二:手动测试登录接口(POST 请求 + JSON 参数)
curl http://localhost:8000/api/login -X POST \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"123456"}'
```
各数据库直接查询验证:
```bash
# -----------------------------------------------------------------------------
# MySQL:查询用户表记录数(验证表是否创建成功且有数据)
# -----------------------------------------------------------------------------
# -e → 执行 SQL 后退出
mysql -u root -proot rxthinkcmf.thinkphp6.elevue -e "SELECT COUNT(*) FROM think_user;"
# -----------------------------------------------------------------------------
# PostgreSQL:查询用户表记录数
# -----------------------------------------------------------------------------
# -c → 执行 SQL 命令
psql -U postgres -d rxthinkcmf.thinkphp6.elevue -c "SELECT COUNT(*) FROM think_user;"
# -----------------------------------------------------------------------------
# SQLite:查询用户表记录数
# -----------------------------------------------------------------------------
sqlite3 /www/api/runtime/database.sqlite "SELECT COUNT(*) FROM think_user;"
# -----------------------------------------------------------------------------
# SQL Server:查询用户表记录数
# -----------------------------------------------------------------------------
# -Q → 执行查询后退出
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.thinkphp6.elevue -Q "SELECT COUNT(*) FROM think_user;"
# -----------------------------------------------------------------------------
# Oracle:查询用户表记录数(需先进入 SQL 命令行)
# -----------------------------------------------------------------------------
sqlplus root/root@localhost:1521/XE
SELECT COUNT(*) FROM think_user;
EXIT;
```
---
## 默认数据
导入完成后,系统包含以下初始数据:
| 数据 | 说明 |
|------|------|
| 管理员账号 | admin / 123456 |
| 默认角色 | 超级管理员(data_scope=1,全部数据权限) |
| 系统菜单 | 完整的菜单和权限节点数据 |
| 字典数据 | 性别、状态等基础字典 |
| 系统参数 | DEFAULT_PASSWORD 等系统参数 |
| 城市数据 | 全国行政区划数据 |
---
## 常见问题
### Q: 导入报错字符集问题(MySQL)
```bash
# --default-character-set=utf8mb4 → 指定字符集为 utf8mb4(支持 emoji)
mysql -u root -proot --default-character-set=utf8mb4 rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
```
### Q: 表已存在错误
```bash
# -----------------------------------------------------------------------------
# 先删除旧数据库再重建(⚠️ 会清空所有数据)
# -----------------------------------------------------------------------------
# DROP DATABASE IF EXISTS → 如果存在则删除
mysql -u root -proot -e "DROP DATABASE IF EXISTS \`rxthinkcmf.thinkphp6.elevue\`;"
# 创建数据库(指定字符集)
mysql -u root -proot -e "CREATE DATABASE \`rxthinkcmf.thinkphp6.elevue\` DEFAULT CHARACTER SET utf8mb4;"
# 重新导入 SQL
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
```
### Q: PostgreSQL 导入报错
确保使用 `document/postgresql/` 目录下的脚本,该脚本已针对 PostgreSQL 语法做了适配。
### Q: SQLite 文件权限问题
```bash
# 664 → owner/group 可读写,others 只读
chmod 664 /www/api/runtime/database.sqlite
# 修改文件所有者为 Web 服务器用户
chown www-data:www-data /www/api/runtime/database.sqlite
```