Map SQL DEFAULT Clauses to Prisma @default Attributes
Learn how SQL DEFAULT expressions — literals, NOW(), sequences, and database functions — map to Prisma @default(), @default(autoincrement()), @default(now()), and @default(dbgenerated()).
Detailed Explanation
Default Values in Prisma
SQL DEFAULT clauses set initial values for columns when no explicit value is provided during INSERT. Prisma supports several built-in default functions and a fallback for arbitrary database expressions.
Example SQL
CREATE TABLE articles (
id SERIAL PRIMARY KEY,
uuid UUID NOT NULL DEFAULT gen_random_uuid(),
title VARCHAR(255) NOT NULL,
status VARCHAR(20) NOT NULL DEFAULT 'draft',
view_count INTEGER NOT NULL DEFAULT 0,
is_featured BOOLEAN NOT NULL DEFAULT false,
rating DECIMAL(3, 2) NOT NULL DEFAULT 0.00,
published_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
Generated Prisma Schema
model Article {
id Int @id @default(autoincrement())
uuid String @default(uuid()) @db.Uuid
title String
status String @default("draft") @db.VarChar(20)
viewCount Int @default(0) @map("view_count")
isFeatured Boolean @default(false) @map("is_featured")
rating Decimal @default(0.00) @db.Decimal(3, 2)
publishedAt DateTime? @map("published_at") @db.Timestamptz()
createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz()
updatedAt DateTime @updatedAt @map("updated_at") @db.Timestamptz()
@@map("articles")
}
Default Mapping Table
| SQL default | Prisma default |
|---|---|
Literal string ('draft') |
@default("draft") |
Literal number (0, 1.5) |
@default(0), @default(1.5) |
true / false |
@default(true), @default(false) |
NOW() / CURRENT_TIMESTAMP |
@default(now()) |
SERIAL / AUTO_INCREMENT |
@default(autoincrement()) |
gen_random_uuid() |
@default(uuid()) |
| Other DB functions | @default(dbgenerated("...")) |
Prisma Built-in Functions
Prisma provides four built-in default functions:
autoincrement()— maps to SERIAL, AUTO_INCREMENT, IDENTITYnow()— maps to NOW(), CURRENT_TIMESTAMP, GETDATE()uuid()— generates UUID v4 at the Prisma levelcuid()— generates CUID at the Prisma level
The dbgenerated() Escape Hatch
For database-specific defaults not covered by Prisma's built-in functions, use dbgenerated():
// PostgreSQL array default
tags String[] @default(dbgenerated("'{}'::text[]"))
// PostGIS geometry default
location Unsupported("geometry") @default(dbgenerated("ST_GeomFromText('POINT(0 0)')"))
// MySQL UUID function
id String @default(dbgenerated("(UUID())"))
@updatedAt vs DEFAULT NOW()
Both created_at and updated_at in SQL often have DEFAULT NOW(). Prisma uses:
@default(now())forcreated_at— set once at creation@updatedAtforupdated_at— automatically updated by Prisma client on every save
The converter detects common column names (updated_at, modified_at) and applies @updatedAt instead of @default(now()).
Enum Defaults
When a column with an enum type has a default:
status user_status NOT NULL DEFAULT 'active'
Prisma maps this to the enum value directly:
status UserStatus @default(active)
Note that enum defaults in Prisma use the enum value without quotes.
Use Case
Your SQL schema uses a variety of default expressions — literal values, NOW() for timestamps, gen_random_uuid() for UUIDs, and SERIAL for auto-increment. The converter maps each to the appropriate Prisma @default function or falls back to dbgenerated().
Try It — SQL to Prisma Schema
Related Topics
Convert a Simple SQL Table to a Prisma Model
Basic Models
Convert SQL Date and Timestamp Columns to Prisma DateTime
Field Types
Map SQL Numeric Types to Prisma Int, Float, Decimal, and BigInt
Field Types
Convert SQL ENUM and CHECK Constraints to Prisma Enums
Advanced Features
Map SQL Primary Key Strategies to Prisma @id
Basic Models