# 数据库初始化
使用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';
# 脚本使用
- 将上述内容保存为
init_db.sql
文件 - 通过MySQL命令行工具执行:
mysql -u root -p < init_db.sql
或者登录MySQL后执行:
source /path/to/init_db.sql;
# 脚本特点
- 幂等性设计:使用
IF NOT EXISTS
确保脚本可重复执行 - 完整结构:包含数据库创建、表创建、外键关系、索引、初始数据
- 字符集设置:使用utf8mb4支持完整Unicode字符
- 时间戳管理:自动记录创建和更新时间
- 权限管理:创建专用数据库用户
- 验证步骤:最后显示初始化结果
# 辅助bat工具
将此工具与你的SQL放到统一目录,双击启动工具,按提示操作即可