# 数据库初始化脚本 本目录包含牛牛商城项目的数据库初始化脚本,用于创建数据库表结构和插入测试数据。 ## 文件说明 ### 1. `init_database.sql` - **功能**: 创建所有必要的数据库表结构 - **包含内容**: - 用户表 (users) - 供应商表 (suppliers) - 司机表 (drivers) - 车辆表 (vehicles) - 订单表 (orders) - 支付表 (payments) - 运输表 (transports) - 运输跟踪表 (transport_tracks) - 质检记录表 (quality_records) - 结算表 (settlements) - 外键约束关系 ### 2. `init_test_data.sql` - **功能**: 插入测试数据 - **包含内容**: - 管理员、采购商、贸易商、质检员等用户数据 - 5个供应商的基本信息 - 5个司机和车辆的信息 - 5个订单及相关的支付、运输、质检、结算记录 - 运输跟踪轨迹数据 ### 3. `run_init.sh` - **功能**: 一键执行数据库初始化的Shell脚本 - **特性**: - 支持命令行参数配置数据库连接 - 自动检测数据库连接 - 可选择跳过表结构创建或测试数据插入 - 彩色输出和进度提示 - 执行完成后显示统计信息 ## 使用方法 ### 前置条件 1. **安装MySQL客户端** ```bash # macOS brew install mysql-client # 或者安装完整的MySQL brew install mysql ``` 2. **确保数据库服务可访问** - 本地MySQL服务已启动 - 或者远程数据库连接正常 ### 执行初始化 #### 方法一:使用Shell脚本(推荐) ```bash # 进入脚本目录 cd /Users/aiotagro/vue/niumall/scripts/database # 使用默认配置(localhost:3306) ./run_init.sh -u root -p your_password -d niumall # 使用远程数据库 ./run_init.sh \ --host nj-cdb-3pwh2kz1.sql.tencentcdb.com \ --port 20784 \ --user jiebanke \ --password 'aiot741$12346' \ --database niumall # 只创建表结构,跳过测试数据 ./run_init.sh -u root -p password --skip-data # 只插入测试数据,跳过表结构创建 ./run_init.sh -u root -p password --skip-structure ``` #### 方法二:手动执行SQL文件 ```bash # 1. 创建表结构 mysql -h host -P port -u username -p database_name < init_database.sql # 2. 插入测试数据 mysql -h host -P port -u username -p database_name < init_test_data.sql ``` ### 脚本参数说明 | 参数 | 简写 | 说明 | 默认值 | |------|------|------|--------| | `--host` | `-h` | 数据库主机地址 | localhost | | `--port` | `-P` | 数据库端口 | 3306 | | `--user` | `-u` | 数据库用户名 | root | | `--password` | `-p` | 数据库密码 | 无 | | `--database` | `-d` | 数据库名称 | niumall | | `--skip-structure` | 无 | 跳过表结构创建 | false | | `--skip-data` | 无 | 跳过测试数据插入 | false | | `--help` | 无 | 显示帮助信息 | - | ## 测试数据说明 ### 用户数据 - **管理员**: admin/123456 - **采购商**: buyer001/123456, buyer002/123456 - **贸易商**: trader001/123456 - **质检员**: staff001/123456, staff002/123456 ### 业务数据 - **供应商**: 5个不同地区的供应商(内蒙古、山东、河南、新疆、黑龙江) - **订单**: 5个订单,涵盖不同的牛种类型和交易状态 - **运输**: 包含运输中和已安排的运输任务 - **质检**: 装车前和到货质检记录 - **结算**: 预付款和尾款结算记录 ## 数据库表关系 ``` users (用户表) ├── orders.buyerId (买方) ├── orders.traderId (贸易商) ├── payments.user_id (支付用户) ├── quality_records.inspector_id (质检员) └── settlements.approver_id (审批人) suppliers (供应商表) └── orders.supplierId (供应商) drivers (司机表) ├── vehicles.driver_id (车辆司机) ├── transports.driver_id (运输司机) └── transport_tracks.driver_id (跟踪司机) vehicles (车辆表) ├── drivers.current_vehicle_id (司机当前车辆) └── transports.vehicle_id (运输车辆) orders (订单表) ├── payments.order_id (订单支付) ├── transports.order_id (订单运输) ├── transport_tracks.order_id (运输跟踪) ├── quality_records.order_id (质检记录) └── settlements.order_id (结算记录) transports (运输表) └── transport_tracks.transport_id (运输跟踪) ``` ## 注意事项 1. **权限要求**: 执行脚本的数据库用户需要有CREATE、DROP、INSERT、SELECT权限 2. **数据清理**: 脚本会删除已存在的表,请确保备份重要数据 3. **字符集**: 所有表使用utf8mb4字符集,支持emoji和特殊字符 4. **外键约束**: 表之间设置了外键约束,删除数据时需注意依赖关系 5. **测试环境**: 建议在测试环境中先验证脚本的正确性 ## 故障排除 ### 1. MySQL客户端未安装 ```bash # macOS安装MySQL客户端 brew install mysql-client # 添加到PATH(如果需要) echo 'export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"' >> ~/.zshrc source ~/.zshrc ``` ### 2. 数据库连接失败 - 检查数据库服务是否启动 - 验证主机地址、端口、用户名、密码是否正确 - 确认网络连接和防火墙设置 ### 3. 权限不足 ```sql -- 为用户授予必要权限 GRANT CREATE, DROP, INSERT, SELECT, UPDATE, DELETE ON niumall.* TO 'username'@'%'; FLUSH PRIVILEGES; ``` ### 4. 外键约束错误 - 确保按照正确顺序创建表 - 检查外键引用的表和字段是否存在 - 验证数据类型是否匹配 ## 更新日志 - **2024-01-21**: 初始版本,包含完整的表结构和测试数据 - 支持10个核心业务表 - 提供一键初始化脚本 - 包含丰富的测试数据用于开发调试