본문으로 건너뛰기

Create

모든 예시는 예시 스키마를 기반으로 합니다.

단일 레코드 생성하기​

다음 질의는 두 개의 필드가 있는 단일 사용자를 생성합니다.

ts
const user = await prisma.user.create({
data: {
email: 'elsa@prisma.io',
name: 'Elsa Prisma',
},
})
ts
const user = await prisma.user.create({
data: {
email: 'elsa@prisma.io',
name: 'Elsa Prisma',
},
})
결과
ts
{
id: 22,
name: 'Elsa Prisma',
email: 'elsa@prisma.io',
profileViews: 0,
role: 'USER',
coinflips: []
}
결과
ts
{
id: 22,
name: 'Elsa Prisma',
email: 'elsa@prisma.io',
profileViews: 0,
role: 'USER',
coinflips: []
}

사용자 id는 자동 생성되며 스키마에 따라 필수 필드가 결정됩니다.

생성된 타입을 사용하여 단일 레코드 생성하기​

다음 예시에서는 동일한 결과를 생성하지만 create 질의의 컨텍스트 외부에 user라는 이름의 UserCreateInput 변수를 생성합니다. 간단한 검사(create 질의에 게시물을 포함해야 하는지 여부)를 완료한 후에 user 변수가 질의에 전달됩니다.

ts
import { PrismaClient, Prisma } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
let includePosts: boolean = false
let user: Prisma.UserCreateInput
// 질의에 게시물이 포함되야 하는지를 확인합니다.
if (includePosts) {
user = {
email: 'elsa@prisma.io',
name: 'Elsa Prisma',
posts: {
create: {
title: 'Include this post!',
},
},
}
} else {
user = {
email: 'elsa@prisma.io',
name: 'Elsa Prisma',
}
}
// 질의에 user 객체를 전달합니다.
const createUser = await prisma.user.create({ data: user })
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
ts
import { PrismaClient, Prisma } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
let includePosts: boolean = false
let user: Prisma.UserCreateInput
// 질의에 게시물이 포함되야 하는지를 확인합니다.
if (includePosts) {
user = {
email: 'elsa@prisma.io',
name: 'Elsa Prisma',
posts: {
create: {
title: 'Include this post!',
},
},
}
} else {
user = {
email: 'elsa@prisma.io',
name: 'Elsa Prisma',
}
}
// 질의에 user 객체를 전달합니다.
const createUser = await prisma.user.create({ data: user })
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})

자세한 내용은 생성된 타입을 참고하세요.

여러 레코드 생성하기​

프리즈마 클라이언트는 2.20.0 이상에서 GA 기능으로 대량 삽입을 지원합니다.

다음 createMany 질의는 여러 사용자를 생성하고 중복은 건너뜁니다. (email이 고유해야 함)

ts
const createMany = await prisma.user.createMany({
data: [
{ name: 'Bob', email: 'bob@prisma.io' },
{ name: 'Bobo', email: 'bob@prisma.io' }, // 중복된 고유 키!
{ name: 'Yewande', email: 'yewande@prisma.io' },
{ name: 'Angelique', email: 'angelique@prisma.io' },
],
skipDuplicates: true, // Bobo를 건너뜁니다.
})
ts
const createMany = await prisma.user.createMany({
data: [
{ name: 'Bob', email: 'bob@prisma.io' },
{ name: 'Bobo', email: 'bob@prisma.io' }, // 중복된 고유 키!
{ name: 'Yewande', email: 'yewande@prisma.io' },
{ name: 'Angelique', email: 'angelique@prisma.io' },
],
skipDuplicates: true, // Bobo를 건너뜁니다.
})
결과
ts
{
count: 3
}
결과
ts
{
count: 3
}

createMany는 복수의 값이 있는 단일 INSERT INTO문을 사용합니다. 이는 일반적으로 행별로 INSERT하는 것보다 효율적입니다.

sql
BEGIN
INSERT INTO "public"."User" ("id","name","email","profileViews","role","coinflips","testing","city","country") VALUES (DEFAULT,$1,$2,$3,$4,DEFAULT,DEFAULT,DEFAULT,$5), (DEFAULT,$6,$7,$8,$9,DEFAULT,DEFAULT,DEFAULT,$10), (DEFAULT,$11,$12,$13,$14,DEFAULT,DEFAULT,DEFAULT,$15), (DEFAULT,$16,$17,$18,$19,DEFAULT,DEFAULT,DEFAULT,$20) ON CONFLICT DO NOTHING
COMMIT
SELECT "public"."User"."country", "public"."User"."city", "public"."User"."email", SUM("public"."User"."profileViews"), COUNT(*) FROM "public"."User" WHERE 1=1 GROUP BY "public"."User"."country", "public"."User"."city", "public"."User"."email" HAVING AVG("public"."User"."profileViews") >= $1 ORDER BY "public"."User"."country" ASC OFFSET $2
sql
BEGIN
INSERT INTO "public"."User" ("id","name","email","profileViews","role","coinflips","testing","city","country") VALUES (DEFAULT,$1,$2,$3,$4,DEFAULT,DEFAULT,DEFAULT,$5), (DEFAULT,$6,$7,$8,$9,DEFAULT,DEFAULT,DEFAULT,$10), (DEFAULT,$11,$12,$13,$14,DEFAULT,DEFAULT,DEFAULT,$15), (DEFAULT,$16,$17,$18,$19,DEFAULT,DEFAULT,DEFAULT,$20) ON CONFLICT DO NOTHING
COMMIT
SELECT "public"."User"."country", "public"."User"."city", "public"."User"."email", SUM("public"."User"."profileViews"), COUNT(*) FROM "public"."User" WHERE 1=1 GROUP BY "public"."User"."country", "public"."User"."city", "public"."User"."email" HAVING AVG("public"."User"."profileViews") >= $1 ORDER BY "public"."User"."country" ASC OFFSET $2
참고

$transaction 내부에 복수의 create문이 있으면 복수의 INSERT문이 생성됩니다.

레코드를 생성하고 관련 레코드를 연결하거나 생성하기​

레코드와 하나 이상의 관련 레코드를 동시에 생성하는 방법은 관계 질의 > 중첩 쓰기를 참고하세요.