Files
myblog/sql/init.sql
T
2026-09-09 19:30:18 +08:00

83 lines
3.1 KiB
SQL

-- myblog 数据库初始化脚本
-- 7 张表:users, categories, tags, articles, article_tags, comments, visitor_stats
CREATE TABLE IF NOT EXISTS users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
email VARCHAR(120) DEFAULT NULL,
role ENUM('admin','author') NOT NULL DEFAULT 'author',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS categories (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(60) NOT NULL,
slug VARCHAR(80) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS tags (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(60) NOT NULL,
slug VARCHAR(80) NOT NULL UNIQUE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS articles (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
user_id INT UNSIGNED NOT NULL,
category_id INT UNSIGNED DEFAULT NULL,
title VARCHAR(200) NOT NULL,
slug VARCHAR(220) NOT NULL UNIQUE,
content MEDIUMTEXT NOT NULL,
excerpt VARCHAR(500) DEFAULT NULL,
status ENUM('published','draft') NOT NULL DEFAULT 'draft',
views INT UNSIGNED NOT NULL DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS article_tags (
article_id INT UNSIGNED NOT NULL,
tag_id INT UNSIGNED NOT NULL,
PRIMARY KEY (article_id, tag_id),
FOREIGN KEY (article_id) REFERENCES articles(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS comments (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
article_id INT UNSIGNED NOT NULL,
parent_id INT UNSIGNED DEFAULT NULL,
author VARCHAR(60) NOT NULL,
email VARCHAR(120) DEFAULT NULL,
content TEXT NOT NULL,
status ENUM('pending','approved') NOT NULL DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (article_id) REFERENCES articles(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS visitor_stats (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
visit_date DATE NOT NULL,
ip VARCHAR(45) DEFAULT NULL,
page VARCHAR(200) DEFAULT NULL,
ua VARCHAR(255) DEFAULT NULL,
UNIQUE KEY uniq_visit (visit_date, ip, page)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 默认管理员:admin / 123456 (password_hash 加密)
INSERT INTO users (username, password_hash, role) VALUES
('admin', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', 'admin')
ON DUPLICATE KEY UPDATE id=id;
-- 示例分类
INSERT INTO categories (name, slug) VALUES
('设计','design'),('前端','frontend'),('后端','backend'),('随笔','notes')
ON DUPLICATE KEY UPDATE id=id;
-- 示例标签
INSERT INTO tags (name, slug) VALUES
('CSS','css'),('PHP','php'),('设计系统','design-system'),('动效','motion')
ON DUPLICATE KEY UPDATE id=id;