diff --git a/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java b/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java
new file mode 100644
index 0000000..eb87513
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/api/CategoryController.java
@@ -0,0 +1,26 @@
+package edu.bjtu.groupone.backend.api;
+
+import edu.bjtu.groupone.backend.domain.dto.CategoryDTO;
+import edu.bjtu.groupone.backend.service.CategoryService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/categories")
+@Tag(name = "Category", description = "分区相关接口")
+public class CategoryController {
+
+    @Autowired
+    private CategoryService categoryService;
+
+    @GetMapping
+    @Operation(summary = "获取所有分区（树形结构）", description = "返回所有分区及其子分区")
+    public ResponseEntity<List<CategoryDTO>> getCategories() {
+        return ResponseEntity.ok(categoryService.getCategoryTree());
+    }
+}
diff --git a/src/main/java/edu/bjtu/groupone/backend/api/user/UserController.java b/src/main/java/edu/bjtu/groupone/backend/api/UserController.java
similarity index 99%
rename from src/main/java/edu/bjtu/groupone/backend/api/user/UserController.java
rename to src/main/java/edu/bjtu/groupone/backend/api/UserController.java
index 4d85c18..4c08711 100644
--- a/src/main/java/edu/bjtu/groupone/backend/api/user/UserController.java
+++ b/src/main/java/edu/bjtu/groupone/backend/api/UserController.java
@@ -1,5 +1,5 @@
 // src/main/java/edu/bjtu/groupone/backend/api/user/UserController.java
-package edu.bjtu.groupone.backend.api.user;
+package edu.bjtu.groupone.backend.api;
 
 import edu.bjtu.groupone.backend.domain.dto.*;
 import edu.bjtu.groupone.backend.domain.entity.User;
diff --git a/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java b/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
new file mode 100644
index 0000000..a56d1cd
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/api/WorkController.java
@@ -0,0 +1,29 @@
+package edu.bjtu.groupone.backend.api;
+
+import edu.bjtu.groupone.backend.domain.dto.WorkResponse;
+import edu.bjtu.groupone.backend.service.WorkService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/api/works")
+@Tag(name = "Work", description = "作品相关接口")
+public class WorkController {
+
+    @Autowired
+    private WorkService workService;
+
+    @GetMapping
+    @Operation(summary = "获取作品列表", description = "可按分区分页查询作品")
+    public ResponseEntity<Page<WorkResponse>> getWorks(
+            @Parameter(description = "分区 ID（可选）") @RequestParam(required = false) Long categoryId,
+            @Parameter(description = "页码，从 1 开始", example = "1") @RequestParam(defaultValue = "1") int page,
+            @Parameter(description = "每页数量", example = "20") @RequestParam(defaultValue = "20") int size) {
+        return ResponseEntity.ok(workService.getWorks(categoryId, page, size));
+    }
+}
diff --git a/src/main/java/edu/bjtu/groupone/backend/config/PaginationConfig.java b/src/main/java/edu/bjtu/groupone/backend/config/PaginationConfig.java
new file mode 100644
index 0000000..e8261dd
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/config/PaginationConfig.java
@@ -0,0 +1,16 @@
+package edu.bjtu.groupone.backend.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.web.PageableHandlerMethodArgumentResolver;
+
+@Configuration
+public class PaginationConfig {
+    @Bean
+    public PageableHandlerMethodArgumentResolver pageableResolver() {
+        PageableHandlerMethodArgumentResolver resolver = new PageableHandlerMethodArgumentResolver();
+        resolver.setOneIndexedParameters(true); // 启用1-based页码
+        resolver.setMaxPageSize(100);            // 限制最大每页数量
+        return resolver;
+    }
+}
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/dto/CategoryDTO.java b/src/main/java/edu/bjtu/groupone/backend/domain/dto/CategoryDTO.java
new file mode 100644
index 0000000..0f65c73
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/dto/CategoryDTO.java
@@ -0,0 +1,32 @@
+package edu.bjtu.groupone.backend.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@Schema(description = "分区信息")
+public class CategoryDTO {
+
+    @Schema(description = "分区 ID", example = "1")
+    private Long id;
+
+    @Schema(description = "分区名称", example = "文学艺术")
+    private String name;
+
+    @Schema(description = "子分区")
+    private List<CategoryDTO> children = new ArrayList<>();
+
+    public CategoryDTO(Long id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public CategoryDTO(Long id, String name, List<CategoryDTO> children) {
+        this.id = id;
+        this.name = name;
+        this.children = children;
+    }
+}
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/dto/WorkResponse.java b/src/main/java/edu/bjtu/groupone/backend/domain/dto/WorkResponse.java
new file mode 100644
index 0000000..bdc15e1
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/dto/WorkResponse.java
@@ -0,0 +1,26 @@
+package edu.bjtu.groupone.backend.domain.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+@Schema(description = "作品信息")
+public class WorkResponse {
+
+    @Schema(description = "作品 ID", example = "101")
+    private Long id;
+
+    @Schema(description = "作品标题", example = "《我的世界》")
+    private String title;
+
+    @Schema(description = "作者", example = "张三")
+    private String author;
+
+    @Schema(description = "浏览量", example = "1234")
+    private Integer views;
+
+    @Schema(description = "所属分区 ID", example = "1")
+    private Long categoryId;
+}
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/entity/Category.java b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Category.java
new file mode 100644
index 0000000..de02aab
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Category.java
@@ -0,0 +1,59 @@
+package edu.bjtu.groupone.backend.domain.entity;
+
+import jakarta.persistence.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import java.util.ArrayList;
+import java.util.List;
+
+@Entity
+@Table(name = "categories") // 显式指定表名
+@Data // 自动生成 getter/setter/toString
+@NoArgsConstructor // JPA 要求无参构造
+@AllArgsConstructor // 全参构造
+@Builder // 支持 Builder 模式
+@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"}) // 解决 Jackson 序列化问题
+
+public class Category {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(nullable = false, length = 50) // 数据库字段约束
+    private String name;
+
+    @ManyToOne(fetch = FetchType.LAZY) // 推荐懒加载
+    @JoinColumn(
+            name = "parent_id",
+            foreignKey = @ForeignKey(name = "fk_category_parent")
+    )
+    @JsonIgnoreProperties("children") // 避免双向循环序列化
+    private Category parent;
+
+    @OneToMany(
+            mappedBy = "parent",
+            cascade = CascadeType.ALL,
+            orphanRemoval = true
+    )
+    @Builder.Default // 保证 Lombok Builder 初始化集合
+    private List<Category> children = new ArrayList<>();
+
+    // 双向关联辅助方法
+    public void addChild(Category child) {
+        children.add(child);
+        child.setParent(this);
+    }
+
+    public void removeChild(Category child) {
+        children.remove(child);
+        child.setParent(null);
+    }
+    public Category(Long id, String name, Category parent) {
+        this.id = id;
+        this.name = name;
+        this.parent = parent;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/domain/entity/Work.java b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Work.java
new file mode 100644
index 0000000..55e036b
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/domain/entity/Work.java
@@ -0,0 +1,32 @@
+package edu.bjtu.groupone.backend.domain.entity;
+
+import jakarta.persistence.*;
+import lombok.*;
+
+@Entity
+@Table(name = "works")
+@Data // 自动生成 getter/setter/toString
+@NoArgsConstructor // JPA 必需的无参构造
+@AllArgsConstructor // 全参构造
+@Builder // 关键修复：添加 Builder 模式
+public class Work {
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    private Long id;
+
+    @Column(nullable = false, length = 255)
+    private String title;
+
+    @Column(nullable = false, length = 100)
+    private String author;
+
+    @Column(columnDefinition = "INT DEFAULT 0")
+    private Integer views = 0;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(
+            name = "category_id",
+            foreignKey = @ForeignKey(name = "fk_work_category")
+    )
+    private Category category;
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java b/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java
new file mode 100644
index 0000000..42bb6af
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/mapper/CategoryMybatisMapper.java
@@ -0,0 +1,13 @@
+package edu.bjtu.groupone.backend.mapper;
+
+import edu.bjtu.groupone.backend.domain.entity.Category;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface CategoryMybatisMapper {
+    List<Category> findByParentId(Long parentId);
+    List<Category> findAll();
+}
diff --git a/src/main/java/edu/bjtu/groupone/backend/mapper/WorkMybatisMapper.java b/src/main/java/edu/bjtu/groupone/backend/mapper/WorkMybatisMapper.java
new file mode 100644
index 0000000..a3485d7
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/mapper/WorkMybatisMapper.java
@@ -0,0 +1,17 @@
+// WorkMapper.java
+package edu.bjtu.groupone.backend.mapper;
+
+//import edu.bjtu.groupone.backend.model.Work;
+import edu.bjtu.groupone.backend.domain.entity.Work;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable; // 正确导入
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface WorkMybatisMapper  {
+    // 修正参数类型为 Spring Data 的 Pageable
+    Page<Work> findByCategoryIdIn(List<Long> categoryIds, Pageable pageable);
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java b/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java
new file mode 100644
index 0000000..7b745c1
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/service/CategoryService.java
@@ -0,0 +1,42 @@
+package edu.bjtu.groupone.backend.service;
+
+import edu.bjtu.groupone.backend.domain.dto.CategoryDTO;
+import edu.bjtu.groupone.backend.domain.entity.Category;
+import edu.bjtu.groupone.backend.mapper.CategoryMybatisMapper;
+//import edu.bjtu.groupone.backend.model.Category;
+import edu.bjtu.groupone.backend.utils.TreeBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class CategoryService {
+    @Autowired
+    private CategoryMybatisMapper categoryMybatisMapper;
+
+    public List<CategoryDTO> getCategoryTree() {
+        List<Category> allCategories = categoryMybatisMapper.findAll();
+        return TreeBuilder.buildTree(allCategories);
+    }
+
+    public List<Long> getAllSubcategoryIds(Long categoryId) {
+        // 获取所有子分类（包含自身）
+        List<Long> ids = new ArrayList<>();
+        if (categoryId != null) {
+            ids.add(categoryId);
+            findSubIds(categoryId, ids);
+        }
+        return ids;
+    }
+
+    private void findSubIds(Long parentId, List<Long> result) {
+        List<Category> children = categoryMybatisMapper.findByParentId(parentId);
+        for (Category child : children) {
+            result.add(child.getId());
+            findSubIds(child.getId(), result); // 递归查找子分类
+        }
+    }
+
+}
diff --git a/src/main/java/edu/bjtu/groupone/backend/service/WorkService.java b/src/main/java/edu/bjtu/groupone/backend/service/WorkService.java
new file mode 100644
index 0000000..f3b58af
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/service/WorkService.java
@@ -0,0 +1,39 @@
+package edu.bjtu.groupone.backend.service;
+
+import edu.bjtu.groupone.backend.domain.dto.WorkResponse;
+import edu.bjtu.groupone.backend.domain.entity.Work;
+import edu.bjtu.groupone.backend.mapper.WorkMybatisMapper;
+//import edu.bjtu.groupone.backend.model.Work;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class WorkService {
+    @Autowired
+    private WorkMybatisMapper workMybatisMapper;
+
+    @Autowired
+    private CategoryService categoryService;
+
+    public Page<WorkResponse> getWorks(Long categoryId, int page, int size) {
+        List<Long> categoryIds = categoryService.getAllSubcategoryIds(categoryId);
+        Pageable pageable = PageRequest.of(page-1, size);
+        return workMybatisMapper.findByCategoryIdIn(categoryIds, pageable)
+                .map(this::convertToResponse);
+    }
+
+    private WorkResponse convertToResponse(Work work) {
+        return new WorkResponse(
+                work.getId(),
+                work.getTitle(),
+                work.getAuthor(),
+                work.getViews(),
+                work.getCategory().getId()
+        );
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/edu/bjtu/groupone/backend/utils/TreeBuilder.java b/src/main/java/edu/bjtu/groupone/backend/utils/TreeBuilder.java
new file mode 100644
index 0000000..b8bd674
--- /dev/null
+++ b/src/main/java/edu/bjtu/groupone/backend/utils/TreeBuilder.java
@@ -0,0 +1,35 @@
+package edu.bjtu.groupone.backend.utils;
+
+import edu.bjtu.groupone.backend.domain.dto.CategoryDTO;
+import edu.bjtu.groupone.backend.domain.entity.Category;
+//import edu.bjtu.groupone.backend.model.Category;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public class TreeBuilder {
+    public static List<CategoryDTO> buildTree(List<Category> allCategories) {
+        // 使用明确的类型声明
+        Map<Long, CategoryDTO> dtoMap = allCategories.stream()
+                .map(c -> new CategoryDTO(c.getId(), c.getName()))
+                .collect(Collectors.toMap(
+                        CategoryDTO::getId,
+                        dto -> dto,
+                        (existing, replacement) -> existing
+                ));
+
+        List<CategoryDTO> result = new ArrayList<>();
+        allCategories.forEach(c -> {
+            CategoryDTO dto = dtoMap.get(c.getId());
+            if (c.getParent() == null) {
+                result.add(dto);
+            } else {
+                CategoryDTO parentDto = dtoMap.get(c.getParent().getId());
+                parentDto.getChildren().add(dto);
+            }
+        });
+        return result;
+    }
+}
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index db34ebe..668bc3b 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,13 +1,15 @@
 # ??MySQL??
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
-spring.datasource.url=jdbc:mysql://localhost:3306/groupone_db\
+spring.datasource.url=jdbc:mysql://localhost:3306/llksh\
 ?useSSL=false\
 &serverTimezone=Asia/Shanghai\
 &characterEncoding=utf8\
 &allowPublicKeyRetrieval=true
 
 spring.datasource.username=root
-spring.datasource.password=Rfw@2935
+spring.datasource.password=wuxiaorui123
+# src/main/resources/application.properties
+spring.jpa.database-platform=org.hibernate.dialect.MySQL8Dialect
 
 # ???????????
 spring.datasource.hikari.maximum-pool-size=10
@@ -16,4 +18,12 @@
 spring.datasource.hikari.connection-timeout=30000
 
 # ???? MyBatis ?????
-mybatis.configuration.map-underscore-to-camel-case=true
\ No newline at end of file
+mybatis.configuration.map-underscore-to-camel-case=true
+
+
+
+# ?????????
+mybatis.type-aliases-package=edu.bjtu.groupone.backend.domain.entity
+
+# ????????
+mybatis.mapper-locations=classpath:mapper/*.xml
\ No newline at end of file
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 6cf60f3..2d79bf4 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -15,9 +15,9 @@
 
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://localhost:3306/groupone_db?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
+    url: jdbc:mysql://localhost:3306/llksh?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
     username: root
-    password: "Rfw@2935"
+    password: "wuxiaorui123"
     hikari:
       maximum-pool-size: 10
       minimum-idle: 5
diff --git a/src/main/resources/mapper/CategoryMybatisMapper.xml b/src/main/resources/mapper/CategoryMybatisMapper.xml
new file mode 100644
index 0000000..1a8e7e0
--- /dev/null
+++ b/src/main/resources/mapper/CategoryMybatisMapper.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- 修改1：使用全限定类名 -->
+<mapper namespace="edu.bjtu.groupone.backend.mapper.CategoryMybatisMapper">
+
+    <!-- 查询所有分类 -->
+    <select id="findAll"
+            resultType="edu.bjtu.groupone.backend.domain.entity.Category">
+        SELECT * FROM categories
+    </select>
+
+    <!-- 根据父分类ID查询 -->
+    <select id="findByParentId" parameterType="Long"
+            resultType="edu.bjtu.groupone.backend.domain.entity.Category">
+        SELECT * FROM categories WHERE parent_id = #{parentId}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/WorkMybatisMapper.xml b/src/main/resources/mapper/WorkMybatisMapper.xml
new file mode 100644
index 0000000..dd0d444
--- /dev/null
+++ b/src/main/resources/mapper/WorkMybatisMapper.xml
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+
+<mapper namespace="edu.bjtu.groupone.backend.mapper.WorkMybatisMapper">
+
+    <!-- 结果集映射 -->
+    <resultMap id="WorkResultMap" type="Work">
+        <id property="id" column="id"/>
+        <result property="title" column="title"/>
+        <result property="description" column="description"/>
+        <result property="categoryId" column="category_id"/>
+        <result property="createTime" column="create_time"/>
+    </resultMap>
+
+    <!-- 查询所有作品 -->
+    <select id="findAll" resultMap="WorkResultMap">
+        SELECT id, title, description, category_id, create_time
+        FROM works
+    </select>
+
+    <!-- 根据分类ID列表分页查询 -->
+    <select id="findByCategoryIdIn" resultMap="WorkResultMap">
+        SELECT * FROM works
+        <where>
+            <if test="categoryIds != null and categoryIds.size() > 0">
+                category_id IN
+                <foreach item="categoryId" collection="categoryIds"
+                         open="(" separator="," close=")">
+                    #{categoryId}
+                </foreach>
+            </if>
+        </where>
+        ORDER BY create_time DESC
+        LIMIT #{pageable.pageSize} OFFSET #{pageable.offset}
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/schema.sql b/src/main/resources/schema.sql
index 823ecdf..beb0cc7 100644
--- a/src/main/resources/schema.sql
+++ b/src/main/resources/schema.sql
@@ -1,3 +1,4 @@
+-- 使用反引号包裹保留字表名
 CREATE TABLE `user` (
                         `user_id` INT PRIMARY KEY AUTO_INCREMENT,
                         `username` VARCHAR(255) NOT NULL UNIQUE,
@@ -6,27 +7,25 @@
                         `address` VARCHAR(255),
                         `role` VARCHAR(50) NOT NULL DEFAULT 'user',
                         `profile_pic` VARCHAR(255),
-                        `registration_date` DATETIME NOT NULL,  -- 推荐用时间类型（而非字符串）
-                        `identification_number` VARCHAR(18),    -- 身份证号建议用 VARCHAR(18)
+                        `registration_date` DATETIME NOT NULL,
+                        `identification_number` VARCHAR(18),
                         `avatar` VARCHAR(255),
-                        `isfollowed` BOOLEAN NOT NULL DEFAULT FALSE,
-                        INDEX `idx_user_id` (`user_id`)          -- 可选：主键通常自带索引
+                        `isfollowed` BOOLEAN NOT NULL DEFAULT FALSE
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
 
-
-
+-- 外键表同样使用反引号
 CREATE TABLE user_follow (
-                             follower_id INT NOT NULL,
-                             followed_id INT NOT NULL,
-                             created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-                             PRIMARY KEY (follower_id, followed_id),
-                             FOREIGN KEY (follower_id) REFERENCES user(user_id),
-                             FOREIGN KEY (followed_id) REFERENCES user(user_id)
+                             `follower_id` INT NOT NULL,
+                             `followed_id` INT NOT NULL,
+                             `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+                             PRIMARY KEY (`follower_id`, `followed_id`),
+                             FOREIGN KEY (`follower_id`) REFERENCES `user`(`user_id`),
+                             FOREIGN KEY (`followed_id`) REFERENCES `user`(`user_id`)
 );
 
+-- 插入语句使用反引号包裹表名和列名
 INSERT INTO `user` (
-    username, email, password, registration_date, identification_number, role
+    `username`, `email`, `password`, `registration_date`, `identification_number`, `role`
 ) VALUES (
-             'admin', 'admin@example.com', 'admin123', NOW(), 87654321, 'admin'
-         );
-
+             'admin', 'admin@example.com', 'admin123', NOW(), '87654321', 'admin'
+         );
\ No newline at end of file
