From 9f1c5f837e4d63f31c19fb114e9946e2da42d230 Mon Sep 17 00:00:00 2001 From: YoVinchen Date: Tue, 10 Mar 2026 23:21:01 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E8=84=9A=E6=9C=AC=E9=80=82=E9=85=8D=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新 schema.sql 添加用户地址、收藏、评价、订单项表结构 - 更新测试数据和演示用户脚本 --- src/main/resources/sql/demo-users.sql | 8 +- src/main/resources/sql/fix-demo-users.sql | 8 +- src/main/resources/sql/schema.sql | 126 ++++++++++++++++++-- src/main/resources/sql/test-data.sql | 50 ++++---- src/main/resources/sql/update-passwords.sql | 8 +- 5 files changed, 156 insertions(+), 44 deletions(-) diff --git a/src/main/resources/sql/demo-users.sql b/src/main/resources/sql/demo-users.sql index f072b1c..b1cc868 100644 --- a/src/main/resources/sql/demo-users.sql +++ b/src/main/resources/sql/demo-users.sql @@ -4,12 +4,12 @@ USE flash_sale_db; -- 插入演示用户(密码已加密) -INSERT INTO users (username, password, email, phone, status, created_at, updated_at) -VALUES ('demo1', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'demo1@example.com', '13800138001', 1, +INSERT INTO users (username, password, email, phone, role, status, created_at, updated_at) +VALUES ('demo1', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'demo1@example.com', '13800138001', 'USER', 1, NOW(), NOW()), - ('demo2', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'demo2@example.com', '13800138002', 1, + ('demo2', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'demo2@example.com', '13800138002', 'USER', 1, NOW(), NOW()), - ('admin', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'admin@example.com', '13800138000', 1, + ('admin', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'admin@example.com', '13800138000', 'ADMIN', 1, NOW(), NOW()) ON DUPLICATE KEY UPDATE username = VALUES(username), email = VALUES(email), diff --git a/src/main/resources/sql/fix-demo-users.sql b/src/main/resources/sql/fix-demo-users.sql index 9a7181e..61d1b97 100644 --- a/src/main/resources/sql/fix-demo-users.sql +++ b/src/main/resources/sql/fix-demo-users.sql @@ -11,12 +11,12 @@ WHERE username IN ('demo1', 'demo2', 'admin'); -- 插入正确的演示用户 -- demo1/demo2 密码: 123456 -- admin 密码: admin123 -INSERT INTO users (username, password, email, phone, status, created_at, updated_at) -VALUES ('demo1', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'demo1@example.com', '13800138001', 1, +INSERT INTO users (username, password, email, phone, role, status, created_at, updated_at) +VALUES ('demo1', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'demo1@example.com', '13800138001', 'USER', 1, NOW(), NOW()), - ('demo2', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'demo2@example.com', '13800138002', 1, + ('demo2', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'demo2@example.com', '13800138002', 'USER', 1, NOW(), NOW()), - ('admin', '$2a$10$DOwVJZHH.5PkZKJKJKJKJOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'admin@example.com', '13800138000', 1, + ('admin', '$2a$10$DOwVJZHH.5PkZKJKJKJKJOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'admin@example.com', '13800138000', 'ADMIN', 1, NOW(), NOW()); -- 验证插入结果 diff --git a/src/main/resources/sql/schema.sql b/src/main/resources/sql/schema.sql index a9d1269..d1fdcd7 100644 --- a/src/main/resources/sql/schema.sql +++ b/src/main/resources/sql/schema.sql @@ -15,6 +15,8 @@ CREATE TABLE IF NOT EXISTS users password VARCHAR(255) NOT NULL COMMENT '密码(加密)', email VARCHAR(100) COMMENT '邮箱', phone VARCHAR(20) COMMENT '手机号', + avatar VARCHAR(500) COMMENT '头像', + role VARCHAR(20) DEFAULT 'USER' COMMENT '角色:ADMIN/USER', status TINYINT DEFAULT 1 COMMENT '状态:1-正常,0-禁用', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', @@ -37,6 +39,7 @@ CREATE TABLE IF NOT EXISTS products name VARCHAR(200) NOT NULL COMMENT '商品名称', description TEXT COMMENT '商品描述', price DECIMAL(10, 2) NOT NULL COMMENT '商品价格', + category VARCHAR(100) COMMENT '商品分类', stock INT NOT NULL DEFAULT 0 COMMENT '库存数量', image_url VARCHAR(500) COMMENT '商品图片URL', status TINYINT DEFAULT 1 COMMENT '状态:1-上架,0-下架', @@ -82,15 +85,25 @@ CREATE TABLE IF NOT EXISTS flash_sales -- ================================ CREATE TABLE IF NOT EXISTS orders ( - id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID', - user_id BIGINT NOT NULL COMMENT '用户ID', + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '订单ID', + order_no VARCHAR(64) NOT NULL UNIQUE COMMENT '订单号', + group_no VARCHAR(64) COMMENT '聚合订单号', + user_id BIGINT NOT NULL COMMENT '用户ID', product_id BIGINT NOT NULL COMMENT '商品ID', quantity INT NOT NULL DEFAULT 1 COMMENT '购买数量', total_price DECIMAL(10, 2) NOT NULL COMMENT '总价', - status TINYINT DEFAULT 1 COMMENT '状态:1-待支付,2-已支付,3-已发货,4-已完成,5-已取消', - order_type TINYINT DEFAULT 1 COMMENT '订单类型:1-普通订单,2-秒杀订单', - created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', - updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + status TINYINT DEFAULT 1 COMMENT '状态:1-待支付,2-已支付,3-已发货,4-已完成,5-已取消', + order_type TINYINT DEFAULT 1 COMMENT '订单类型:1-普通订单,2-秒杀订单', + receiver_name VARCHAR(100) COMMENT '收货人', + receiver_phone VARCHAR(20) COMMENT '收货手机号', + receiver_address VARCHAR(255) COMMENT '收货地址', + remark VARCHAR(255) COMMENT '订单备注', + payment_method VARCHAR(50) COMMENT '支付方式', + paid_at TIMESTAMP NULL COMMENT '支付时间', + shipped_at TIMESTAMP NULL COMMENT '发货时间', + completed_at TIMESTAMP NULL COMMENT '完成时间', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE, @@ -104,8 +117,107 @@ CREATE TABLE IF NOT EXISTS orders DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT ='订单表'; + + + + -- ================================ --- 5. 创建视图(可选) +-- 5. 订单明细表 +-- ================================ +CREATE TABLE IF NOT EXISTS order_items +( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '明细ID', + order_id BIGINT NOT NULL COMMENT '主订单ID', + product_id BIGINT NOT NULL COMMENT '商品ID', + product_name VARCHAR(200) NOT NULL COMMENT '商品名称快照', + product_image_url VARCHAR(500) COMMENT '商品图片快照', + price DECIMAL(10, 2) NOT NULL COMMENT '下单单价', + quantity INT NOT NULL COMMENT '购买数量', + subtotal DECIMAL(10, 2) NOT NULL COMMENT '小计', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + + FOREIGN KEY (order_id) REFERENCES orders (id) ON DELETE CASCADE, + FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE, + INDEX idx_order_items_order_id (order_id), + INDEX idx_order_items_product_id (product_id) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci COMMENT ='订单明细表'; + +-- ================================ +-- 6. 用户地址表 +-- ================================ +CREATE TABLE IF NOT EXISTS user_addresses +( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '地址ID', + user_id BIGINT NOT NULL COMMENT '用户ID', + name VARCHAR(100) NOT NULL COMMENT '收货人', + phone VARCHAR(20) NOT NULL COMMENT '手机号', + province VARCHAR(50) COMMENT '省份', + city VARCHAR(50) COMMENT '城市', + district VARCHAR(50) COMMENT '区县', + address VARCHAR(255) NOT NULL COMMENT '详细地址', + is_default TINYINT DEFAULT 0 COMMENT '是否默认地址', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, + INDEX idx_address_user_id (user_id), + INDEX idx_address_default (is_default) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci COMMENT ='用户地址表'; + +-- ================================ +-- 7. 商品评价表 +-- ================================ +CREATE TABLE IF NOT EXISTS product_reviews +( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '评价ID', + product_id BIGINT NOT NULL COMMENT '商品ID', + user_id BIGINT NOT NULL COMMENT '用户ID', + order_id BIGINT NOT NULL COMMENT '订单ID', + rating TINYINT NOT NULL DEFAULT 5 COMMENT '评分', + content TEXT NOT NULL COMMENT '评价内容', + status TINYINT NOT NULL DEFAULT 1 COMMENT '状态:1-显示,0-隐藏', + admin_reply TEXT COMMENT '管理员回复', + replied_at TIMESTAMP NULL COMMENT '回复时间', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', + + FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE, + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, + FOREIGN KEY (order_id) REFERENCES orders (id) ON DELETE CASCADE, + INDEX idx_review_product_id (product_id), + INDEX idx_review_user_id (user_id), + UNIQUE KEY uk_review_order_user (order_id, user_id) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci COMMENT ='商品评价表'; + + + +-- ================================ +-- 8. 用户收藏表 +-- ================================ +CREATE TABLE IF NOT EXISTS user_favorites +( + id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '收藏ID', + user_id BIGINT NOT NULL COMMENT '用户ID', + product_id BIGINT NOT NULL COMMENT '商品ID', + created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE, + FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE, + UNIQUE KEY uk_favorite_user_product (user_id, product_id), + INDEX idx_favorite_user_id (user_id), + INDEX idx_favorite_product_id (product_id) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8mb4 + COLLATE = utf8mb4_unicode_ci COMMENT ='用户收藏表'; + +-- ================================ +-- 9. 创建视图(可选) -- ================================ -- 活跃秒杀活动视图 diff --git a/src/main/resources/sql/test-data.sql b/src/main/resources/sql/test-data.sql index 5fdcf91..ad6a452 100644 --- a/src/main/resources/sql/test-data.sql +++ b/src/main/resources/sql/test-data.sql @@ -21,60 +21,60 @@ USE flash_sale_db; -- 1. 插入测试用户数据 -- ================================ -INSERT INTO users (username, password, email, phone, status, created_at, updated_at) +INSERT INTO users (username, password, email, phone, role, status, created_at, updated_at) VALUES -- 演示账号(密码都是明文,实际应用中应该加密) -('demo1', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'demo1@example.com', '13800138001', 1, NOW(), +('demo1', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'demo1@example.com', '13800138001', 'USER', 1, NOW(), NOW()), -('demo2', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'demo2@example.com', '13800138002', 1, NOW(), +('demo2', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'demo2@example.com', '13800138002', 'USER', 1, NOW(), NOW()), -('admin', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'admin@example.com', '13800138000', 1, NOW(), +('admin', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'admin@example.com', '13800138000', 'ADMIN', 1, NOW(), NOW()), -- 普通测试用户 -('testuser1', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'test1@example.com', '13800138003', 1, +('testuser1', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'test1@example.com', '13800138003', 'USER', 1, NOW(), NOW()), -('testuser2', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'test2@example.com', '13800138004', 1, +('testuser2', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'test2@example.com', '13800138004', 'USER', 1, NOW(), NOW()), -('testuser3', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'test3@example.com', '13800138005', 1, +('testuser3', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'test3@example.com', '13800138005', 'USER', 1, NOW(), NOW()), -('testuser4', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'test4@example.com', '13800138006', 1, +('testuser4', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'test4@example.com', '13800138006', 'USER', 1, NOW(), NOW()), -('testuser5', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'test5@example.com', '13800138007', 1, +('testuser5', '$2a$10$N.zmdr9k7uOkXUJEkKWZaOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'test5@example.com', '13800138007', 'USER', 1, NOW(), NOW()); -- ================================ -- 2. 插入测试商品数据 -- ================================ -INSERT INTO products (name, description, price, stock, image_url, status, created_at, updated_at) +INSERT INTO products (name, description, price, category, stock, image_url, status, created_at, updated_at) VALUES -- 电子产品类 -('iPhone 15 Pro Max', '苹果最新旗舰手机,A17 Pro芯片,钛金属设计', 9999.00, 100, '/images/iphone15.jpg', 1, NOW(), NOW()), -('MacBook Pro 16英寸', 'M3 Max芯片,36GB内存,1TB存储', 25999.00, 50, '/images/macbook.jpg', 1, NOW(), NOW()), -('iPad Air', '10.9英寸液晶显示屏,M1芯片', 4399.00, 80, '/images/ipad.jpg', 1, NOW(), NOW()), -('AirPods Pro 2', '主动降噪无线耳机,空间音频', 1899.00, 200, '/images/airpods.jpg', 1, NOW(), NOW()), -('Apple Watch Series 9', '健康监测,GPS+蜂窝网络', 3199.00, 150, '/images/watch.jpg', 1, NOW(), NOW()), +('iPhone 15 Pro Max', '苹果最新旗舰手机,A17 Pro芯片,钛金属设计', 9999.00, '电子产品', 100, '/images/iphone15.jpg', 1, NOW(), NOW()), +('MacBook Pro 16英寸', 'M3 Max芯片,36GB内存,1TB存储', 25999.00, '电子产品', 50, '/images/macbook.jpg', 1, NOW(), NOW()), +('iPad Air', '10.9英寸液晶显示屏,M1芯片', 4399.00, '电子产品', 80, '/images/ipad.jpg', 1, NOW(), NOW()), +('AirPods Pro 2', '主动降噪无线耳机,空间音频', 1899.00, '电子产品', 200, '/images/airpods.jpg', 1, NOW(), NOW()), +('Apple Watch Series 9', '健康监测,GPS+蜂窝网络', 3199.00, '电子产品', 150, '/images/watch.jpg', 1, NOW(), NOW()), -- 家电类 -('小米电视 65英寸', '4K超高清,120Hz刷新率', 2999.00, 60, '/images/tv.jpg', 1, NOW(), NOW()), -('戴森吸尘器 V15', '激光显微尘,强劲吸力', 4690.00, 40, '/images/dyson.jpg', 1, NOW(), NOW()), -('美的空调 1.5匹', '变频节能,静音运行', 2599.00, 80, '/images/airconditioner.jpg', 1, NOW(), NOW()), +('小米电视 65英寸', '4K超高清,120Hz刷新率', 2999.00, '家电', 60, '/images/tv.jpg', 1, NOW(), NOW()), +('戴森吸尘器 V15', '激光显微尘,强劲吸力', 4690.00, '家电', 40, '/images/dyson.jpg', 1, NOW(), NOW()), +('美的空调 1.5匹', '变频节能,静音运行', 2599.00, '家电', 80, '/images/airconditioner.jpg', 1, NOW(), NOW()), -- 服装类 -('Nike Air Jordan 1', '经典篮球鞋,限量版配色', 1299.00, 120, '/images/jordan.jpg', 1, NOW(), NOW()), -('Adidas Ultra Boost', '缓震跑鞋,Boost中底', 1599.00, 100, '/images/ultraboost.jpg', 1, NOW(), NOW()), +('Nike Air Jordan 1', '经典篮球鞋,限量版配色', 1299.00, '服饰鞋包', 120, '/images/jordan.jpg', 1, NOW(), NOW()), +('Adidas Ultra Boost', '缓震跑鞋,Boost中底', 1599.00, '服饰鞋包', 100, '/images/ultraboost.jpg', 1, NOW(), NOW()), -- 图书类 -('深入理解Java虚拟机', 'JVM原理与实践,第3版', 89.00, 500, '/images/jvm-book.jpg', 1, NOW(), NOW()), -('Redis设计与实现', 'Redis内部机制详解', 79.00, 300, '/images/redis-book.jpg', 1, NOW(), NOW()), +('深入理解Java虚拟机', 'JVM原理与实践,第3版', 89.00, '图书音像', 500, '/images/jvm-book.jpg', 1, NOW(), NOW()), +('Redis设计与实现', 'Redis内部机制详解', 79.00, '图书音像', 300, '/images/redis-book.jpg', 1, NOW(), NOW()), -- 食品类 -('茅台酒 53度 500ml', '国酒茅台,收藏佳品', 2680.00, 30, '/images/maotai.jpg', 1, NOW(), NOW()), -('五常大米 10kg', '东北优质大米,香甜可口', 168.00, 200, '/images/rice.jpg', 1, NOW(), NOW()), +('茅台酒 53度 500ml', '国酒茅台,收藏佳品', 2680.00, '食品饮料', 30, '/images/maotai.jpg', 1, NOW(), NOW()), +('五常大米 10kg', '东北优质大米,香甜可口', 168.00, '食品饮料', 200, '/images/rice.jpg', 1, NOW(), NOW()), -- 美妆类 -('SK-II神仙水 230ml', '护肤精华,改善肌肤', 1690.00, 80, '/images/skii.jpg', 1, NOW(), NOW()); +('SK-II神仙水 230ml', '护肤精华,改善肌肤', 1690.00, '美妆个护', 80, '/images/skii.jpg', 1, NOW(), NOW()); -- ================================ -- 3. 插入秒杀活动数据 diff --git a/src/main/resources/sql/update-passwords.sql b/src/main/resources/sql/update-passwords.sql index 545915f..97c1dc4 100644 --- a/src/main/resources/sql/update-passwords.sql +++ b/src/main/resources/sql/update-passwords.sql @@ -11,12 +11,12 @@ WHERE username IN ('demo1', 'demo2', 'admin'); -- 插入使用BCrypt加密的演示用户 -- demo1/demo2 密码: 123456 (BCrypt哈希) -- admin 密码: admin123 (BCrypt哈希) -INSERT INTO users (username, password, email, phone, status, created_at, updated_at) -VALUES ('demo1', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'demo1@example.com', '13800138001', 1, +INSERT INTO users (username, password, email, phone, role, status, created_at, updated_at) +VALUES ('demo1', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'demo1@example.com', '13800138001', 'USER', 1, NOW(), NOW()), - ('demo2', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'demo2@example.com', '13800138002', 1, + ('demo2', '$2a$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2uheWG/igi.', 'demo2@example.com', '13800138002', 'USER', 1, NOW(), NOW()), - ('admin', '$2a$10$DOwVJZHH.5PkZKJKJKJKJOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'admin@example.com', '13800138000', 1, + ('admin', '$2a$10$DOwVJZHH.5PkZKJKJKJKJOh.3VQ8nl83hq8/Qhx6.5PkZKJKJKJKJ', 'admin@example.com', '13800138000', 'ADMIN', 1, NOW(), NOW()); -- 验证插入结果