DROP DATABASE IF EXISTS interview_mysql;
CREATE DATABASE interview_mysql DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
USE interview_mysql;
SET SESSION sql_safe_updates = 0;
DROP TABLE IF EXISTS order_item;
DROP TABLE IF EXISTS orders;
DROP TABLE IF EXISTS post;
DROP TABLE IF EXISTS user_role;
DROP TABLE IF EXISTS role;
DROP TABLE IF EXISTS account;
DROP TABLE IF EXISTS emp;
DROP TABLE IF EXISTS dept;
DROP TABLE IF EXISTS log;
DROP TABLE IF EXISTS t_a;
DROP TABLE IF EXISTS t_b;
DROP TABLE IF EXISTS user;
CREATE TABLE user (
id BIGINT PRIMARY KEY,
username VARCHAR(32) NOT NULL UNIQUE,
nickname VARCHAR(32) NULL,
email VARCHAR(64) NOT NULL UNIQUE,
city VARCHAR(32) NOT NULL,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
INDEX idx_user_city (city),
INDEX idx_user_created (created_at)
) ENGINE=InnoDB;
CREATE TABLE role (
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL UNIQUE
) ENGINE=InnoDB;
CREATE TABLE user_role (
user_id BIGINT NOT NULL,
role_id INT NOT NULL,
PRIMARY KEY (user_id, role_id),
CONSTRAINT fk_ur_user FOREIGN KEY (user_id) REFERENCES user(id),
CONSTRAINT fk_ur_role FOREIGN KEY (role_id) REFERENCES role(id)
) ENGINE=InnoDB;
CREATE TABLE dept (
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL UNIQUE,
city VARCHAR(32) NOT NULL
) ENGINE=InnoDB;
CREATE TABLE emp (
id INT PRIMARY KEY,
name VARCHAR(32) NOT NULL,
dept_id INT NOT NULL,
manager_id INT NULL,
job VARCHAR(32) NOT NULL,
salary DECIMAL(10,2) NOT NULL,
hired_at DATE NOT NULL,
CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id) REFERENCES dept(id),
CONSTRAINT fk_emp_mgr FOREIGN KEY (manager_id) REFERENCES emp(id),
INDEX idx_emp_dept (dept_id),
INDEX idx_emp_mgr (manager_id),
INDEX idx_emp_salary (salary)
) ENGINE=InnoDB;
CREATE TABLE account (
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL UNIQUE,
balance DECIMAL(12,2) NOT NULL,
updated_at DATETIME NOT NULL,
CONSTRAINT fk_acc_user FOREIGN KEY (user_id) REFERENCES user(id),
INDEX idx_acc_balance (balance)
) ENGINE=InnoDB;
CREATE TABLE orders (
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
status VARCHAR(16) NOT NULL,
amount DECIMAL(12,2) NOT NULL,
created_at DATETIME NOT NULL,
pay_time DATETIME NULL,
updated_at DATETIME NOT NULL,
CONSTRAINT fk_orders_user FOREIGN KEY (user_id) REFERENCES user(id),
INDEX idx_orders_user (user_id),
INDEX idx_orders_status_time (status, created_at),
INDEX idx_orders_paytime (pay_time)
) ENGINE=InnoDB;
CREATE TABLE order_item (
id BIGINT PRIMARY KEY,
order_id BIGINT NOT NULL,
product_name VARCHAR(64) NOT NULL,
price DECIMAL(12,2) NOT NULL,
qty INT NOT NULL,
created_at DATETIME NOT NULL,
CONSTRAINT fk_item_order FOREIGN KEY (order_id) REFERENCES orders(id),
INDEX idx_item_order (order_id)
) ENGINE=InnoDB;
CREATE TABLE post (
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
title VARCHAR(128) NOT NULL,
score INT NOT NULL,
created_at DATETIME NOT NULL,
CONSTRAINT fk_post_user FOREIGN KEY (user_id) REFERENCES user(id),
INDEX idx_post_score_time (score, created_at),
INDEX idx_post_user (user_id)
) ENGINE=InnoDB;
CREATE TABLE log (
id BIGINT PRIMARY KEY,
level VARCHAR(8) NOT NULL,
message VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL,
INDEX idx_log_time (created_at),
INDEX idx_log_level (level)
) ENGINE=InnoDB;
CREATE TABLE t_a (
id INT PRIMARY KEY
) ENGINE=InnoDB;
CREATE TABLE t_b (
id INT PRIMARY KEY
) ENGINE=InnoDB;
INSERT INTO user (id, username, nickname, email, city, created_at, updated_at)
VALUES
(1001, 'alice', '阿丽', '[email protected]', 'Beijing', '2025-11-01 10:00:00', '2025-12-10 09:10:00'),
(1002, 'bob', NULL, '[email protected]', 'Beijing', '2025-11-05 11:00:00', '2025-12-11 12:00:00'),
(1003, 'carol', '小 C', '[email protected]', 'Shanghai', '2025-10-20 09:30:00', '2025-12-09 08:00:00'),
(1004, 'dave', NULL, '[email protected]', 'Shanghai', '2025-11-12 16:20:00', '2025-12-12 19:00:00'),
(1005, 'erin', 'E 宝', '[email protected]', 'Shenzhen', '2025-11-18 14:00:00', '2025-12-13 10:01:00'),
(1006, 'frank', NULL, '[email protected]', 'Shenzhen', '2025-11-21 17:45:00', '2025-12-13 17:45:00'),
(1007, 'grace', '小 G', '[email protected]', 'Guangzhou', '2025-10-01 08:00:00', '2025-12-01 08:00:00'),
(1008, 'henry', NULL, '[email protected]', 'Guangzhou', '2025-09-15 09:00:00', '2025-11-30 10:00:00'),
(1009, 'ivy', 'Ivy', '[email protected]', 'Hangzhou', '2025-11-30 20:00:00', '2025-12-12 20:00:00'),
(1010, 'jack', NULL, '[email protected]', 'Hangzhou', '2025-12-01 09:00:00', '2025-12-13 09:00:00'),
(1011, 'kate', 'K', '[email protected]', 'Beijing', '2025-10-10 10:10:10', '2025-12-13 23:59:00'),
(1012, 'leo', NULL, '[email protected]', 'Shanghai', '2025-12-05 12:12:12', '2025-12-12 12:12:12');
INSERT INTO role (id, name) VALUES (1, 'admin'), (2, 'merchant'), (3, 'customer');
INSERT INTO user_role (user_id, role_id) VALUES
(1001, 1), (1001, 3), (1002, 3), (1003, 2), (1003, 3), (1004, 3),
(1005, 2), (1006, 3), (1007, 3), (1008, 3), (1009, 3), (1010, 3),
(1011, 1), (1012, 3);
INSERT INTO dept (id, name, city) VALUES (10, 'R&D', 'Beijing'), (20, 'Sales', 'Shanghai'), (30, 'Ops', 'Shenzhen');
INSERT INTO emp (id, name, dept_id, manager_id, job, salary, hired_at) VALUES
(1, 'ZhangBoss', 10, NULL, 'Director', 35000.00, '2022-01-01'),
(2, 'LiDev', 10, 1, 'Backend', 22000.00, '2023-03-15'),
(3, 'WangDev', 10, 1, 'Backend', 21000.00, '2023-06-01'),
(4, 'ChenQA', 10, 1, 'QA', 18000.00, '2024-02-20'),
(5, 'ZhaoSales', 20, NULL, 'Manager', 26000.00, '2021-09-10'),
(6, 'SunSales', 20, 5, 'Sales', 16000.00, '2024-05-01'),
(7, 'WuOps', 30, NULL, 'Manager', 24000.00, '2022-11-11'),
(8, 'HeSRE', 30, 7, 'SRE', 20000.00, '2024-08-08');
INSERT INTO account (id, user_id, balance, updated_at) VALUES
(9001, 1001, 1000.00, '2025-12-13 10:00:00'),
(9002, 1002, 250.50, '2025-12-13 10:00:00'),
(9003, 1003, 88.80, '2025-12-13 10:00:00'),
(9004, 1004, 500.00, '2025-12-13 10:00:00'),
(9005, 1005, 999.99, '2025-12-13 10:00:00'),
(9006, 1006, 10.00, '2025-12-13 10:00:00'),
(9007, 1007, 66.66, '2025-12-13 10:00:00'),
(9008, 1008, 77.77, '2025-12-13 10:00:00'),
(9009, 1009, 300.00, '2025-12-13 10:00:00'),
(9010, 1010, 120.00, '2025-12-13 10:00:00'),
(9011, 1011, 8888.88, '2025-12-13 10:00:00'),
(9012, 1012, 15.00, '2025-12-13 10:00:00');
INSERT INTO orders (id, user_id, status, amount, created_at, pay_time, updated_at) VALUES
(50001, 1001, 'PAID', 128.00, '2025-12-01 10:00:00', '2025-12-01 10:02:00', '2025-12-01 10:02:00'),
(50002, 1001, 'CREATED', 66.60, '2025-12-10 12:00:00', NULL, '2025-12-10 12:00:00'),
(50003, 1002, 'PAID', 19.90, '2025-12-02 09:00:00', '2025-12-02 09:01:00', '2025-12-02 09:01:00'),
(50004, 1003, 'CANCELLED', 58.00, '2025-11-20 18:30:00', NULL, '2025-11-20 18:45:00'),
(50005, 1003, 'PAID', 199.00, '2025-12-05 20:00:00', '2025-12-05 20:10:00', '2025-12-05 20:10:00'),
(50006, 1004, 'REFUNDED', 88.00, '2025-11-28 13:00:00', '2025-11-28 13:05:00', '2025-11-30 09:00:00'),
(50007, 1005, 'PAID', 520.00, '2025-12-11 11:11:11', '2025-12-11 11:12:00', '2025-12-11 11:12:00'),
(50008, 1006, 'CREATED', 39.90, '2025-12-12 15:00:00', NULL, '2025-12-12 15:00:00'),
(50009, 1009, 'PAID', 15.00, '2025-12-03 08:00:00', '2025-12-03 08:00:30', '2025-12-03 08:00:30'),
(50010, 1010, 'PAID', 88.88, '2025-12-13 09:09:09', '2025-12-13 09:10:00', '2025-12-13 09:10:00');
INSERT INTO order_item (id, order_id, product_name, price, qty, created_at) VALUES
(70001, 50001, 'Keyboard', 128.00, 1, '2025-12-01 10:00:10'),
(70002, 50003, 'Notebook', 19.90, 1, '2025-12-02 09:00:10'),
(70003, 50005, 'Monitor', 199.00, 1, '2025-12-05 20:00:10'),
(70004, 50006, 'Mouse', 88.00, 1, '2025-11-28 13:00:10'),
(70005, 50007, 'Phone', 520.00, 1, '2025-12-11 11:11:20'),
(70006, 50009, 'Cable', 15.00, 1, '2025-12-03 08:00:10'),
(70007, 50010, 'Headset', 88.88, 1, '2025-12-13 09:09:20');
INSERT INTO post (id, user_id, title, score, created_at) VALUES
(80001, 1001, 'MySQL 基础复盘', 98, '2025-12-01 09:00:00'),
(80002, 1001, 'JOIN 面试题整理', 88, '2025-12-06 09:00:00'),
(80003, 1002, '分页优化:深分页到游标', 95, '2025-12-10 21:00:00'),
(80004, 1003, '事务与锁:RR 是否幻读', 93, '2025-12-08 20:00:00'),
(80005, 1003, 'EXPLAIN 怎么看', 80, '2025-11-22 10:00:00'),
(80006, 1004, '子查询与 EXISTS 对比', 70, '2025-12-02 19:00:00'),
(80007, 1005, '外键要不要上生产', 85, '2025-12-03 13:00:00'),
(80008, 1006, '字符串函数清洗数据', 60, '2025-12-04 14:00:00'),
(80009, 1007, 'GROUP BY + HAVING 实战', 92, '2025-12-05 16:00:00'),
(80010, 1008, '慢查询排查流程', 99, '2025-12-07 18:00:00'),
(80011, 1009, 'NULL 处理:COALESCE', 75, '2025-12-09 08:00:00'),
(80012, 1010, 'UNION vs UNION ALL', 65, '2025-12-12 08:30:00');
INSERT INTO log (id, level, message, created_at) VALUES
(60001, 'INFO', 'service started', '2025-12-13 10:00:00'),
(60002, 'WARN', 'slow query detected', '2025-12-12 11:00:00'),
(60003, 'ERROR', 'db connection timeout', '2025-12-11 12:00:00'),
(60004, 'INFO', 'daily job finished', '2025-11-10 09:00:00'),
(60005, 'INFO', 'old log for cleanup (40d ago)', '2025-11-01 00:00:00'),
(60006, 'INFO', 'old log for cleanup (70d ago)', '2025-10-05 00:00:00');
INSERT INTO t_a (id) VALUES (1), (2), (3), (10);
INSERT INTO t_b (id) VALUES (3), (4), (5), (10);