# 数据库初始化

使用SQL脚本快速初始化MySQL数据库

# 脚本创建

示例:电商系统数据库初始化脚本

-- init_db.sql
-- 此脚本用于快速初始化电商系统数据库

-- 1. 创建数据库(如果不存在)
CREATE DATABASE IF NOT EXISTS ecommerce DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 使用该数据库
USE ecommerce;

-- 2. 创建用户表
CREATE TABLE IF NOT EXISTS users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    phone VARCHAR(20),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_username (username),
    INDEX idx_email (email)
) ENGINE=InnoDB;

-- 3. 创建商品表
CREATE TABLE IF NOT EXISTS products (
    product_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    description TEXT,
    price DECIMAL(10, 2) NOT NULL,
    stock INT NOT NULL DEFAULT 0,
    category_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    INDEX idx_name (name),
    INDEX idx_category (category_id)
) ENGINE=InnoDB;

-- 4. 创建分类表
CREATE TABLE IF NOT EXISTS categories (
    category_id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    parent_id INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (parent_id) REFERENCES categories(category_id) ON DELETE SET NULL
) ENGINE=InnoDB;

-- 5. 创建订单表
CREATE TABLE IF NOT EXISTS orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    user_id INT NOT NULL,
    total_amount DECIMAL(10, 2) NOT NULL,
    status ENUM('pending', 'paid', 'shipped', 'delivered', 'cancelled') DEFAULT 'pending',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE,
    INDEX idx_user (user_id),
    INDEX idx_status (status)
) ENGINE=InnoDB;

-- 6. 创建订单详情表
CREATE TABLE IF NOT EXISTS order_items (
    item_id INT AUTO_INCREMENT PRIMARY KEY,
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    unit_price DECIMAL(10, 2) NOT NULL,
    FOREIGN KEY (order_id) REFERENCES orders(order_id) ON DELETE CASCADE,
    FOREIGN KEY (product_id) REFERENCES products(product_id) ON DELETE CASCADE,
    INDEX idx_order (order_id)
) ENGINE=InnoDB;

-- 7. 插入初始数据
-- 插入分类
INSERT INTO categories (name, parent_id) VALUES 
('电子产品', NULL),
('手机', 1),
('笔记本电脑', 1),
('服装', NULL),
('男装', 4),
('女装', 4);

-- 插入商品
INSERT INTO products (name, description, price, stock, category_id) VALUES 
('iPhone 15', '最新款苹果手机', 7999.00, 100, 2),
('MacBook Pro', '16英寸苹果笔记本电脑', 18999.00, 50, 3),
('男士T恤', '纯棉舒适T恤', 99.00, 200, 5),
('女士连衣裙', '夏季新款连衣裙', 299.00, 150, 6);

-- 8. 创建数据库用户并授权
-- 注意: 这部分需要在有足够权限的会话中执行
CREATE USER IF NOT EXISTS 'ecommerce_user'@'%' IDENTIFIED BY 'SecurePass123!';
GRANT ALL PRIVILEGES ON ecommerce.* TO 'ecommerce_user'@'%';
FLUSH PRIVILEGES;

-- 9. 显示创建结果
SELECT '数据库初始化完成' AS message;
SELECT COUNT(*) AS user_tables FROM information_schema.tables WHERE table_schema = 'ecommerce';

# 脚本使用

  1. 将上述内容保存为init_db.sql文件
  2. 通过MySQL命令行工具执行:
mysql -u root -p < init_db.sql

或者登录MySQL后执行:

source /path/to/init_db.sql;

# 脚本特点

  1. 幂等性设计:使用IF NOT EXISTS确保脚本可重复执行
  2. 完整结构:包含数据库创建、表创建、外键关系、索引、初始数据
  3. 字符集设置:使用utf8mb4支持完整Unicode字符
  4. 时间戳管理:自动记录创建和更新时间
  5. 权限管理:创建专用数据库用户
  6. 验证步骤:最后显示初始化结果

# 辅助bat工具

将此工具与你的SQL放到统一目录,双击启动工具,按提示操作即可

点我去下载 (opens new window)