Files
rxthinkcmf-wiki/RXThinkCMF_Laravel13_AntdVue/zh/quickstart/database-init.md
T
2026-10-08 17:50:29 +08:00

13 KiB
Raw Blame History

2.5 数据库初始化

:::tip 概述 本章指导您完成数据库的创建和 SQL 脚本导入。项目为每种数据库提供了独立的 SQL 脚本,存放在 document/ 目录下按数据库类型分组,可直接导入使用,无需手动转换。 :::

SQL 脚本目录结构

document/
├── mysql/
│   └── rxthinkcmf.laravel13.elevue.sql      # MySQL 版本
├── postgresql/
│   └── rxthinkcmf.laravel13.elevue.sql      # PostgreSQL 版本
├── sqlserver/
│   └── rxthinkcmf.laravel13.elevue.sql      # SQL Server 版本
├── oracle/
│   └── rxthinkcmf.laravel13.elevue.sql      # Oracle 版本
└── sqlite/
    └── rxthinkcmf.laravel13.elevue.sql      # SQLite 版本

各数据库脚本已针对对应的 SQL 语法做了适配,包含完整的表结构(25 张业务表,laravel_ 前缀)与初始数据。

:::warning 本项目未使用 Laravel 迁移建表 database/migrations/ 目录为空,php artisan migrate 只会初始化迁移记录表,不会创建业务表。数据库结构与初始数据以 SQL 脚本为准,表前缀为 laravel_(对应 .env 中 DB_PREFIX)。 :::


MySQL 初始化

1. 创建数据库

# 连接 MySQL(-u root 以 root 用户,-p 交互式输入密码)
mysql -u root -p
-- 创建项目数据库
-- CHARACTER SET utf8mb4 → 支持 emoji 等四字节字符
-- COLLATE utf8mb4_general_ci → 不区分大小写的排序规则
CREATE DATABASE `rxthinkcmf.laravel13.elevue` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
EXIT;

2. 导入 SQL 脚本

# -----------------------------------------------------------------------------
# 导入 MySQL 专用初始化脚本(约 226MB,耗时 1~3 分钟)
# -----------------------------------------------------------------------------
# -u root -proot → 数据库用户名和密码
# rxthinkcmf...    → 目标数据库名
# < file.sql       → 将 SQL 文件内容作为 mysql 命令的输入
mysql -u root -proot rxthinkcmf.laravel13.elevue < document/mysql/rxthinkcmf.laravel13.elevue.sql

:::tip 温馨提示

  • 使用 2.8 Docker 快速体验 时无需手动导入,MySQL 容器首次启动自动执行该脚本;
  • Windows PowerShell 不支持 < 重定向,可改用 CMD 执行,或在 Navicat / phpMyAdmin 中导入。 :::

3. 配置 .env

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_ 前缀

PostgreSQL 初始化

1. 创建数据库

# 以 postgres 系统用户身份进入 PostgreSQL 命令行
sudo -u postgres psql
-- 创建项目数据库
-- OWNER postgres → 指定数据库所有者
-- ENCODING 'UTF8' → 使用 UTF-8 编码
CREATE DATABASE "rxthinkcmf.laravel13.elevue" OWNER postgres ENCODING 'UTF8';

-- 授予用户对该数据库的所有权限
GRANT ALL PRIVILEGES ON DATABASE "rxthinkcmf.laravel13.elevue" TO postgres;
\q

2. 导入 SQL 脚本

# -----------------------------------------------------------------------------
# 导入 PostgreSQL 专用初始化脚本
# -----------------------------------------------------------------------------
# -U postgres → 连接用户
# -d ...      → 目标数据库
# -f file.sql → 执行 SQL 文件
psql -U postgres -d rxthinkcmf.laravel13.elevue -f document/postgresql/rxthinkcmf.laravel13.elevue.sql

3. 配置 .env

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_

SQLite 初始化

1. 创建数据库文件

# 安装 PHP 的 SQLite 扩展(如尚未安装)
sudo apt install php8.3-sqlite3

# 创建数据库文件存放目录(-p 参数:目录不存在时自动创建)
mkdir -p database

# 创建空的 SQLite 数据库文件(touch 创建空文件)
touch database/database.sqlite

2. 导入 SQL 脚本

# -----------------------------------------------------------------------------
# 导入 SQLite 专用初始化脚本
# -----------------------------------------------------------------------------
# sqlite3 → SQLite 命令行工具
# 数据库文件路径 → SQLite 数据库存储在单个文件中
# < file.sql → 将 SQL 文件作为输入执行
sqlite3 database/database.sqlite < document/sqlite/rxthinkcmf.laravel13.elevue.sql

3. 配置 .env

DB_CONNECTION=sqlite
# DB_DATABASE 指向 database/database.sqlite(Laravel 默认值,无需修改)
DB_PREFIX=laravel_

:::tip SQLite 特点

  • 无需安装数据库服务器,数据存储在单个文件中
  • 适合开发环境、小型项目或嵌入式场景
  • 文件路径需确保 PHP 进程有读写权限 :::

SQL Server 初始化

1. 创建数据库

# -----------------------------------------------------------------------------
# 使用 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.laravel13.elevue] COLLATE Chinese_PRC_CI_AS"

2. 导入 SQL 脚本

# -----------------------------------------------------------------------------
# 导入 SQL Server 专用初始化脚本
# -----------------------------------------------------------------------------
# -d rxthinkcmf... → 目标数据库
# -i file.sql      → 执行 SQL 文件
sqlcmd -S localhost -U sa -P root -d rxthinkcmf.laravel13.elevue -i document/sqlserver/rxthinkcmf.laravel13.elevue.sql

3. 配置 .env

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_

Oracle 初始化

1. 创建表空间和用户

-- 使用 sqlplus 连接 Oracle(system 为管理员用户,XE 为服务名)
sqlplus system/root@localhost:1521/XE

-- 创建表空间(Oracle 数据存储的逻辑单元)
-- DATAFILE → 数据文件的物理路径
-- SIZE 100M → 初始大小 100MB
-- AUTOEXTEND ON NEXT 100M → 空间不足时自动扩展 100MB
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_laravel13_elevue";

-- 授权
-- CONNECT → 连接权限
-- RESOURCE → 创建表/视图等对象的权限
-- CREATE VIEW → 创建视图的权限
-- UNLIMITED TABLESPACE → 不限制表空间使用量
GRANT CONNECT, RESOURCE, CREATE VIEW TO "root";
GRANT UNLIMITED TABLESPACE TO "root";
EXIT;

2. 导入 SQL 脚本

# -----------------------------------------------------------------------------
# 导入 Oracle 专用初始化脚本
# -----------------------------------------------------------------------------
# sqlplus → Oracle 命令行工具
# root/root@localhost:1521/XE → 用户/密码@主机:端口/服务名
# @file.sql → 执行 SQL 文件
sqlplus root/root@localhost:1521/XE @document/oracle/rxthinkcmf.laravel13.elevue.sql

3. 配置 .env

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 开发环境准备「数据库安装 → Oracle」;
  • 项目已内置 Oracle 运行时驱动:DB_CONNECTION=oracle 即可连接(AppServiceProvider 注册 oci 自定义驱动,配套 App\Support\Database\{OracleConnection, OracleGrammar, OracleProcessor},分页与自增主键回填已适配);切换时 .env 中 DB_PORT 改为 1521;
  • 表结构变更请使用跨库迁移工具 php artisan db:migrate(自动生成 Oracle 序列与触发器),不使用 Laravel 迁移;
  • 实际投产前请按业务场景完整验证(复杂查询、导入导出等)。 :::

验证数据库

无论使用哪种数据库,都可以通过以下方式验证:

# 方式一:框架命令行(能正常执行说明框架与数据库配置可加载)
php artisan --version

# 方式二:手动测试登录接口(POST 请求 + JSON 参数)
curl http://localhost:8000/api/login -X POST \
  -H "Content-Type: application/json" \
  -d '{"username":"admin","password":"123456"}'

各数据库直接查询验证:

# -----------------------------------------------------------------------------
# MySQL:查询用户表记录数(验证表是否创建成功且有数据)
# -----------------------------------------------------------------------------
# -e → 执行 SQL 后退出
mysql -u root -proot rxthinkcmf.laravel13.elevue -e "SELECT COUNT(*) FROM laravel_user;"

# -----------------------------------------------------------------------------
# PostgreSQL:查询用户表记录数
# -----------------------------------------------------------------------------
# -c → 执行 SQL 命令
psql -U postgres -d rxthinkcmf.laravel13.elevue -c "SELECT COUNT(*) FROM laravel_user;"

# -----------------------------------------------------------------------------
# SQLite:查询用户表记录数
# -----------------------------------------------------------------------------
sqlite3 database/database.sqlite "SELECT COUNT(*) FROM laravel_user;"

# -----------------------------------------------------------------------------
# SQL Server:查询用户表记录数
# -----------------------------------------------------------------------------
# -Q → 执行查询后退出
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 laravel_user;
EXIT;

查询到记录数 > 0 即初始化成功。


默认数据

导入完成后,系统包含以下初始数据:

数据 说明
管理员账号 admin / 123456(超级管理员,用户 ID=1)
租户演示账号 tenant001 / 123456(客户租户A 租户管理员)
默认角色 超级管理员(全部数据权限)
部门与岗位 默认组织架构数据
系统菜单 完整的菜单和权限节点数据
字典数据 性别、状态等基础字典
系统参数 DEFAULT_PASSWORD 等系统参数
系统配置 动态配置项
城市数据 全国行政区划数据
租户数据 平台租户与客户租户初始数据

常见问题

Q: 导入报错字符集问题(MySQL)

# --default-character-set=utf8mb4 → 指定字符集为 utf8mb4(支持 emoji)
mysql -u root -proot --default-character-set=utf8mb4 rxthinkcmf.laravel13.elevue < document/mysql/rxthinkcmf.laravel13.elevue.sql

Q: 报 Table 'xxx.users' doesn't exist

A: DB_PREFIX 未配置或不匹配。脚本中的表均为 laravel_ 前缀(如 laravel_user),确认 .env 中:

DB_PREFIX=laravel_

修改后执行 php artisan config:clear。

Q: 报错提示表已存在

# -----------------------------------------------------------------------------
# 先删除旧数据库再重建(⚠️ 会清空所有数据)
# -----------------------------------------------------------------------------
# DROP DATABASE IF EXISTS → 如果存在则删除
mysql -u root -proot -e "DROP DATABASE IF EXISTS \`rxthinkcmf.laravel13.elevue\`;"

# 创建数据库(指定字符集)
mysql -u root -proot -e "CREATE DATABASE \`rxthinkcmf.laravel13.elevue\` DEFAULT CHARACTER SET utf8mb4;"

# 重新导入 SQL
mysql -u root -proot rxthinkcmf.laravel13.elevue < document/mysql/rxthinkcmf.laravel13.elevue.sql

Q: 导入很慢或中断

脚本约 226MB(含全国行政区划等大数据量表),导入需 1~3 分钟属正常。确保命令行窗口保持打开直到导入完成;中断后按上一条清库重导。

Q: 使用了错误数据库类型的脚本

A: 请使用 document/ 下与你的数据库类型对应目录中的脚本(如 MySQL 用 document/mysql/),脚本已按对应 SQL 语法适配,混用会报语法错误。

Q: php artisan migrate 后依然表不存在

正常现象——本项目 migrations 为空,migrate 不创建业务表,请按本章手动导入 SQL 脚本。

Q: SQLite 文件权限问题

# 664 → owner/group 可读写,others 只读
chmod 664 database/database.sqlite

# 修改文件所有者为 Web 服务器用户
chown www-data:www-data database/database.sqlite

Q: 想把已有 MySQL 数据迁移到其他数据库

使用跨库迁移工具(结构 + 数据 + Oracle 序列自动处理),见 7.6 数据库迁移工具。