You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Prisma插入MySQL记录后表排序异常问题

解决Prisma插入MySQL记录顺序不符的问题

问题根源

MySQL数据库的表本身不保证插入顺序就是查询的默认顺序,InnoDB引擎默认按聚簇索引(主键)排序,但如果存在事务提交顺序差异、异步请求并发等情况,可能导致你看到的默认排序不符合预期。手动插入时顺序正常只是同步执行的巧合,并非数据库的保证行为。

解决方案

1. 添加插入时间字段并按其排序(推荐)

在数据表中新增记录创建时间字段,通过这个字段的顺序来确保插入顺序的一致性:

修改schema.prisma,添加createdAt字段:

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

model tasks {
  id        String    @id @db.VarChar(255)
  title     String    @db.VarChar(255)
  text      String?   @db.Text
  tags      String?   @db.VarChar(255)
  createdBy String    @db.VarChar(255)
  time      String    @db.VarChar(255)
  date      String    @db.VarChar(255)
  completed Int       @db.TinyInt
  createdAt DateTime  @default(now()) @db.DateTime(0) // 新增自动生成的创建时间
}

执行数据库迁移:

npx prisma migrate dev

查询记录时显式按createdAt升序排列:

const tasks = await prisma.tasks.findMany({
  orderBy: {
    createdAt: 'asc'
  }
})

2. 直接按主键ID排序(如果ID是有序格式)

如果你的id字段是可排序的格式(如数字字符串"1"、"2"、"3"),可以直接在查询时按ID排序:

const tasks = await prisma.tasks.findMany({
  orderBy: {
    id: 'asc'
  }
})

3. 检查请求执行顺序

确认前端发送插入请求的顺序是否严格为1→2→3,避免因异步请求并发导致后端接收到的请求顺序颠倒(比如未使用await串行处理请求)。


内容的提问来源于stack exchange,提问作者MalikShr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 16:23:07