签入版本
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# 2.4 数据库初始化
|
||||
# 2.5 数据库初始化
|
||||
|
||||
:::tip 概述
|
||||
本章指导您完成数据库的创建和 SQL 脚本导入。项目为每种数据库提供了独立的 SQL 脚本,存放在 `document/` 目录下按数据库类型分组。
|
||||
本章指导您完成数据库的创建和 SQL 脚本导入。项目为每种数据库提供了独立的 SQL 脚本,存放在 `document/` 目录下按数据库类型分组,可直接导入使用,无需手动转换。
|
||||
:::
|
||||
|
||||
## SQL 脚本目录结构
|
||||
@@ -9,18 +9,22 @@
|
||||
```text
|
||||
document/
|
||||
├── mysql/
|
||||
│ └── rxthinkcmf.thinkphp6.elevue.sql # MySQL 版本
|
||||
│ └── rxthinkcmf.laravel13.elevue.sql # MySQL 版本
|
||||
├── postgresql/
|
||||
│ └── rxthinkcmf.thinkphp6.elevue.sql # PostgreSQL 版本
|
||||
│ └── rxthinkcmf.laravel13.elevue.sql # PostgreSQL 版本
|
||||
├── sqlserver/
|
||||
│ └── rxthinkcmf.thinkphp6.elevue.sql # SQL Server 版本
|
||||
│ └── rxthinkcmf.laravel13.elevue.sql # SQL Server 版本
|
||||
├── oracle/
|
||||
│ └── rxthinkcmf.thinkphp6.elevue.sql # Oracle 版本
|
||||
│ └── rxthinkcmf.laravel13.elevue.sql # Oracle 版本
|
||||
└── sqlite/
|
||||
└── rxthinkcmf.thinkphp6.elevue.sql # SQLite 版本
|
||||
└── rxthinkcmf.laravel13.elevue.sql # SQLite 版本
|
||||
```
|
||||
|
||||
各数据库脚本已针对对应的 SQL 语法做了适配,可直接导入使用,无需手动转换。
|
||||
各数据库脚本已针对对应的 SQL 语法做了适配,包含完整的表结构(25 张业务表,`laravel_` 前缀)与初始数据。
|
||||
|
||||
:::warning 本项目未使用 Laravel 迁移建表
|
||||
`database/migrations/` 目录为空,`php artisan migrate` 只会初始化迁移记录表,**不会创建业务表**。数据库结构与初始数据以 SQL 脚本为准,表前缀为 `laravel_`(对应 `.env` 中 `DB_PREFIX`)。
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
@@ -37,7 +41,7 @@ mysql -u root -p
|
||||
-- 创建项目数据库
|
||||
-- CHARACTER SET utf8mb4 → 支持 emoji 等四字节字符
|
||||
-- COLLATE utf8mb4_general_ci → 不区分大小写的排序规则
|
||||
CREATE DATABASE `rxthinkcmf.thinkphp6.elevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||
CREATE DATABASE `rxthinkcmf.laravel13.elevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||||
EXIT;
|
||||
```
|
||||
|
||||
@@ -45,29 +49,29 @@ EXIT;
|
||||
|
||||
```bash
|
||||
# -----------------------------------------------------------------------------
|
||||
# 导入 MySQL 专用初始化脚本
|
||||
# 导入 MySQL 专用初始化脚本(约 226MB,耗时 1~3 分钟)
|
||||
# -----------------------------------------------------------------------------
|
||||
# -u root -proot → 数据库用户名和密码
|
||||
# rxthinkcmf... → 目标数据库名
|
||||
# < file.sql → 将 SQL 文件内容作为 mysql 命令的输入
|
||||
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
|
||||
mysql -u root -proot rxthinkcmf.laravel13.elevue < document/mysql/rxthinkcmf.laravel13.elevue.sql
|
||||
```
|
||||
|
||||
:::tip 温馨提示
|
||||
导入完成后,数据库中包含完整的表结构和初始数据(管理员账号、菜单、字典、城市数据等),可直接使用。
|
||||
- 使用 [2.8 Docker 快速体验](/zh/quickstart/docker.html) 时无需手动导入,MySQL 容器**首次启动自动执行**该脚本;
|
||||
- Windows PowerShell 不支持 `<` 重定向,可改用 CMD 执行,或在 Navicat / phpMyAdmin 中导入。
|
||||
:::
|
||||
|
||||
### 3. 配置 .env
|
||||
|
||||
```ini
|
||||
[DATABASE]
|
||||
TYPE = mysql ; 数据库类型
|
||||
HOSTNAME = 127.0.0.1 ; 数据库地址
|
||||
DATABASE = rxthinkcmf.thinkphp6.elevue ; 数据库名
|
||||
USERNAME = root ; 用户名
|
||||
PASSWORD = root ; 密码
|
||||
HOSTPORT = 3306 ; 端口
|
||||
PREFIX = think_ ; 表前缀
|
||||
DB_CONNECTION=mysql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=3306
|
||||
DB_DATABASE=rxthinkcmf.laravel13.elevue
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=root
|
||||
DB_PREFIX=laravel_ # 必须保留,脚本中表均为 laravel_ 前缀
|
||||
```
|
||||
|
||||
---
|
||||
@@ -82,16 +86,13 @@ 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';
|
||||
CREATE DATABASE "rxthinkcmf.laravel13.elevue" OWNER postgres ENCODING 'UTF8';
|
||||
|
||||
-- 授予用户对该数据库的所有权限
|
||||
GRANT ALL PRIVILEGES ON DATABASE "rxthinkcmf.thinkphp6.elevue" TO postgres;
|
||||
GRANT ALL PRIVILEGES ON DATABASE "rxthinkcmf.laravel13.elevue" TO postgres;
|
||||
\q
|
||||
```
|
||||
|
||||
@@ -102,22 +103,21 @@ GRANT ALL PRIVILEGES ON DATABASE "rxthinkcmf.thinkphp6.elevue" TO postgres;
|
||||
# 导入 PostgreSQL 专用初始化脚本
|
||||
# -----------------------------------------------------------------------------
|
||||
# -U postgres → 连接用户
|
||||
# -d ... → 目标数据库
|
||||
# -d ... → 目标数据库
|
||||
# -f file.sql → 执行 SQL 文件
|
||||
psql -U postgres -d rxthinkcmf.thinkphp6.elevue -f document/postgresql/rxthinkcmf.thinkphp6.elevue.sql
|
||||
psql -U postgres -d rxthinkcmf.laravel13.elevue -f document/postgresql/rxthinkcmf.laravel13.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_
|
||||
DB_CONNECTION=pgsql
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=rxthinkcmf.laravel13.elevue
|
||||
DB_USERNAME=postgres
|
||||
DB_PASSWORD=root
|
||||
DB_PREFIX=laravel_
|
||||
```
|
||||
|
||||
---
|
||||
@@ -128,13 +128,13 @@ PREFIX = think_
|
||||
|
||||
```bash
|
||||
# 安装 PHP 的 SQLite 扩展(如尚未安装)
|
||||
sudo apt install php8.2-sqlite3
|
||||
sudo apt install php8.3-sqlite3
|
||||
|
||||
# 创建数据库文件存放目录(-p 参数:目录不存在时自动创建)
|
||||
mkdir -p /www/api/runtime
|
||||
mkdir -p database
|
||||
|
||||
# 创建空的 SQLite 数据库文件(touch 创建空文件)
|
||||
touch /www/api/runtime/database.sqlite
|
||||
touch database/database.sqlite
|
||||
```
|
||||
|
||||
### 2. 导入 SQL 脚本
|
||||
@@ -146,16 +146,15 @@ touch /www/api/runtime/database.sqlite
|
||||
# sqlite3 → SQLite 命令行工具
|
||||
# 数据库文件路径 → SQLite 数据库存储在单个文件中
|
||||
# < file.sql → 将 SQL 文件作为输入执行
|
||||
sqlite3 /www/api/runtime/database.sqlite < document/sqlite/rxthinkcmf.thinkphp6.elevue.sql
|
||||
sqlite3 database/database.sqlite < document/sqlite/rxthinkcmf.laravel13.elevue.sql
|
||||
```
|
||||
|
||||
### 3. 配置 .env
|
||||
|
||||
```ini
|
||||
[DATABASE]
|
||||
TYPE = sqlite ; 数据库类型改为 sqlite
|
||||
DATABASE = /www/api/runtime/database.sqlite ; SQLite 文件路径
|
||||
PREFIX = think_
|
||||
DB_CONNECTION=sqlite
|
||||
# DB_DATABASE 指向 database/database.sqlite(Laravel 默认值,无需修改)
|
||||
DB_PREFIX=laravel_
|
||||
```
|
||||
|
||||
:::tip SQLite 特点
|
||||
@@ -179,7 +178,7 @@ PREFIX = think_
|
||||
# -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"
|
||||
sqlcmd -S localhost -U sa -P root -Q "CREATE DATABASE [rxthinkcmf.laravel13.elevue] COLLATE Chinese_PRC_CI_AS"
|
||||
```
|
||||
|
||||
### 2. 导入 SQL 脚本
|
||||
@@ -190,20 +189,19 @@ sqlcmd -S localhost -U sa -P root -Q "CREATE DATABASE [rxthinkcmf.thinkphp6.elev
|
||||
# -----------------------------------------------------------------------------
|
||||
# -d rxthinkcmf... → 目标数据库
|
||||
# -i file.sql → 执行 SQL 文件
|
||||
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.thinkphp6.elevue -i document/sqlserver/rxthinkcmf.thinkphp6.elevue.sql
|
||||
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.laravel13.elevue -i document/sqlserver/rxthinkcmf.laravel13.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_
|
||||
DB_CONNECTION=sqlsrv
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=1433
|
||||
DB_DATABASE=rxthinkcmf.laravel13.elevue
|
||||
DB_USERNAME=sa
|
||||
DB_PASSWORD=root
|
||||
DB_PREFIX=laravel_
|
||||
```
|
||||
|
||||
---
|
||||
@@ -220,15 +218,15 @@ sqlplus system/root@localhost:1521/XE
|
||||
-- DATAFILE → 数据文件的物理路径
|
||||
-- SIZE 100M → 初始大小 100MB
|
||||
-- AUTOEXTEND ON NEXT 100M → 空间不足时自动扩展 100MB
|
||||
CREATE TABLESPACE "rxthinkcmf_thinkphp6_elevue"
|
||||
DATAFILE '/u01/oradata/rxthinkcmf_thinkphp6_elevue.dbf'
|
||||
CREATE TABLESPACE "rxthinkcmf_laravel13_elevue"
|
||||
DATAFILE '/u01/oradata/rxthinkcmf_laravel13_elevue.dbf'
|
||||
SIZE 100M AUTOEXTEND ON NEXT 100M;
|
||||
|
||||
-- 创建数据库用户
|
||||
-- IDENTIFIED BY → 设置密码
|
||||
-- DEFAULT TABLESPACE → 指定默认表空间
|
||||
CREATE USER "root" IDENTIFIED BY "root"
|
||||
DEFAULT TABLESPACE "rxthinkcmf_thinkphp6_elevue";
|
||||
DEFAULT TABLESPACE "rxthinkcmf_laravel13_elevue";
|
||||
|
||||
-- 授权
|
||||
-- CONNECT → 连接权限
|
||||
@@ -249,22 +247,28 @@ EXIT;
|
||||
# sqlplus → Oracle 命令行工具
|
||||
# root/root@localhost:1521/XE → 用户/密码@主机:端口/服务名
|
||||
# @file.sql → 执行 SQL 文件
|
||||
sqlplus root/root@localhost:1521/XE @document/oracle/rxthinkcmf.thinkphp6.elevue.sql
|
||||
sqlplus root/root@localhost:1521/XE @document/oracle/rxthinkcmf.laravel13.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_
|
||||
DB_CONNECTION=oracle
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=1521
|
||||
DB_DATABASE=rxthinkcmf.laravel13.elevue
|
||||
DB_USERNAME=root
|
||||
DB_PASSWORD=root
|
||||
DB_PREFIX=laravel_
|
||||
```
|
||||
|
||||
:::warning Oracle 前置条件与实现说明
|
||||
- 需要 PHP 的 `pdo_oci` 扩展与 Oracle Instant Client,安装步骤见 [2.1 开发环境准备](/zh/quickstart/environment.html)「数据库安装 → Oracle」;
|
||||
- 项目已内置 Oracle 运行时驱动:`DB_CONNECTION=oracle` 即可连接(`AppServiceProvider` 注册 `oci` 自定义驱动,配套 `App\Support\Database\{OracleConnection, OracleGrammar, OracleProcessor}`,分页与自增主键回填已适配);切换时 `.env` 中 `DB_PORT` 改为 `1521`;
|
||||
- 表结构变更请使用跨库迁移工具 `php artisan db:migrate`(自动生成 Oracle 序列与触发器),不使用 Laravel 迁移;
|
||||
- 实际投产前请按业务场景完整验证(复杂查询、导入导出等)。
|
||||
:::
|
||||
|
||||
---
|
||||
|
||||
## 验证数据库
|
||||
@@ -272,8 +276,8 @@ PREFIX = think_
|
||||
无论使用哪种数据库,都可以通过以下方式验证:
|
||||
|
||||
```bash
|
||||
# 方式一:ThinkPHP 命令行(显示版本信息,验证框架可正常加载)
|
||||
php think version
|
||||
# 方式一:框架命令行(能正常执行说明框架与数据库配置可加载)
|
||||
php artisan --version
|
||||
|
||||
# 方式二:手动测试登录接口(POST 请求 + JSON 参数)
|
||||
curl http://localhost:8000/api/login -X POST \
|
||||
@@ -288,33 +292,35 @@ curl http://localhost:8000/api/login -X POST \
|
||||
# MySQL:查询用户表记录数(验证表是否创建成功且有数据)
|
||||
# -----------------------------------------------------------------------------
|
||||
# -e → 执行 SQL 后退出
|
||||
mysql -u root -proot rxthinkcmf.thinkphp6.elevue -e "SELECT COUNT(*) FROM think_user;"
|
||||
mysql -u root -proot rxthinkcmf.laravel13.elevue -e "SELECT COUNT(*) FROM laravel_user;"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# PostgreSQL:查询用户表记录数
|
||||
# -----------------------------------------------------------------------------
|
||||
# -c → 执行 SQL 命令
|
||||
psql -U postgres -d rxthinkcmf.thinkphp6.elevue -c "SELECT COUNT(*) FROM think_user;"
|
||||
psql -U postgres -d rxthinkcmf.laravel13.elevue -c "SELECT COUNT(*) FROM laravel_user;"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# SQLite:查询用户表记录数
|
||||
# -----------------------------------------------------------------------------
|
||||
sqlite3 /www/api/runtime/database.sqlite "SELECT COUNT(*) FROM think_user;"
|
||||
sqlite3 database/database.sqlite "SELECT COUNT(*) FROM laravel_user;"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# SQL Server:查询用户表记录数
|
||||
# -----------------------------------------------------------------------------
|
||||
# -Q → 执行查询后退出
|
||||
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.thinkphp6.elevue -Q "SELECT COUNT(*) FROM think_user;"
|
||||
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.laravel13.elevue -Q "SELECT COUNT(*) FROM laravel_user;"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Oracle:查询用户表记录数(需先进入 SQL 命令行)
|
||||
# -----------------------------------------------------------------------------
|
||||
sqlplus root/root@localhost:1521/XE
|
||||
SELECT COUNT(*) FROM think_user;
|
||||
SELECT COUNT(*) FROM laravel_user;
|
||||
EXIT;
|
||||
```
|
||||
|
||||
查询到记录数 > 0 即初始化成功。
|
||||
|
||||
---
|
||||
|
||||
## 默认数据
|
||||
@@ -323,12 +329,16 @@ EXIT;
|
||||
|
||||
| 数据 | 说明 |
|
||||
|------|------|
|
||||
| 管理员账号 | admin / 123456 |
|
||||
| 默认角色 | 超级管理员(data_scope=1,全部数据权限) |
|
||||
| 管理员账号 | admin / 123456(超级管理员,用户 ID=1) |
|
||||
| 租户演示账号 | tenant001 / 123456(客户租户A 租户管理员) |
|
||||
| 默认角色 | 超级管理员(全部数据权限) |
|
||||
| 部门与岗位 | 默认组织架构数据 |
|
||||
| 系统菜单 | 完整的菜单和权限节点数据 |
|
||||
| 字典数据 | 性别、状态等基础字典 |
|
||||
| 系统参数 | DEFAULT_PASSWORD 等系统参数 |
|
||||
| 系统配置 | 动态配置项 |
|
||||
| 城市数据 | 全国行政区划数据 |
|
||||
| 租户数据 | 平台租户与客户租户初始数据 |
|
||||
|
||||
---
|
||||
|
||||
@@ -338,35 +348,57 @@ EXIT;
|
||||
|
||||
```bash
|
||||
# --default-character-set=utf8mb4 → 指定字符集为 utf8mb4(支持 emoji)
|
||||
mysql -u root -proot --default-character-set=utf8mb4 rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
|
||||
mysql -u root -proot --default-character-set=utf8mb4 rxthinkcmf.laravel13.elevue < document/mysql/rxthinkcmf.laravel13.elevue.sql
|
||||
```
|
||||
|
||||
### Q: 表已存在错误
|
||||
### Q: 报 `Table 'xxx.users' doesn't exist`
|
||||
|
||||
A: `DB_PREFIX` 未配置或不匹配。脚本中的表均为 `laravel_` 前缀(如 `laravel_user`),确认 `.env` 中:
|
||||
|
||||
```ini
|
||||
DB_PREFIX=laravel_
|
||||
```
|
||||
|
||||
修改后执行 `php artisan config:clear`。
|
||||
|
||||
### Q: 报错提示表已存在
|
||||
|
||||
```bash
|
||||
# -----------------------------------------------------------------------------
|
||||
# 先删除旧数据库再重建(⚠️ 会清空所有数据)
|
||||
# -----------------------------------------------------------------------------
|
||||
# DROP DATABASE IF EXISTS → 如果存在则删除
|
||||
mysql -u root -proot -e "DROP DATABASE IF EXISTS \`rxthinkcmf.thinkphp6.elevue\`;"
|
||||
mysql -u root -proot -e "DROP DATABASE IF EXISTS \`rxthinkcmf.laravel13.elevue\`;"
|
||||
|
||||
# 创建数据库(指定字符集)
|
||||
mysql -u root -proot -e "CREATE DATABASE \`rxthinkcmf.thinkphp6.elevue\` DEFAULT CHARACTER SET utf8mb4;"
|
||||
mysql -u root -proot -e "CREATE DATABASE \`rxthinkcmf.laravel13.elevue\` DEFAULT CHARACTER SET utf8mb4;"
|
||||
|
||||
# 重新导入 SQL
|
||||
mysql -u root -proot rxthinkcmf.thinkphp6.elevue < document/mysql/rxthinkcmf.thinkphp6.elevue.sql
|
||||
mysql -u root -proot rxthinkcmf.laravel13.elevue < document/mysql/rxthinkcmf.laravel13.elevue.sql
|
||||
```
|
||||
|
||||
### Q: PostgreSQL 导入报错
|
||||
### Q: 导入很慢或中断
|
||||
|
||||
确保使用 `document/postgresql/` 目录下的脚本,该脚本已针对 PostgreSQL 语法做了适配。
|
||||
脚本约 226MB(含全国行政区划等大数据量表),导入需 1~3 分钟属正常。确保命令行窗口保持打开直到导入完成;中断后按上一条清库重导。
|
||||
|
||||
### Q: 使用了错误数据库类型的脚本
|
||||
|
||||
A: 请使用 `document/` 下**与你的数据库类型对应目录**中的脚本(如 MySQL 用 `document/mysql/`),脚本已按对应 SQL 语法适配,混用会报语法错误。
|
||||
|
||||
### Q: `php artisan migrate` 后依然表不存在
|
||||
|
||||
正常现象——本项目 migrations 为空,`migrate` 不创建业务表,请按本章手动导入 SQL 脚本。
|
||||
|
||||
### Q: SQLite 文件权限问题
|
||||
|
||||
```bash
|
||||
# 664 → owner/group 可读写,others 只读
|
||||
chmod 664 /www/api/runtime/database.sqlite
|
||||
chmod 664 database/database.sqlite
|
||||
|
||||
# 修改文件所有者为 Web 服务器用户
|
||||
chown www-data:www-data /www/api/runtime/database.sqlite
|
||||
chown www-data:www-data database/database.sqlite
|
||||
```
|
||||
|
||||
### Q: 想把已有 MySQL 数据迁移到其他数据库
|
||||
|
||||
使用跨库迁移工具(结构 + 数据 + Oracle 序列自动处理),见 [7.6 数据库迁移工具](/zh/tools/db-migrate.html)。
|
||||
|
||||
Reference in New Issue
Block a user