TL;DR
What: A serverless MySQL platform with branching and non-blocking schema changes.
Why: Git-like branching for databases, zero-downtime migrations, infinite scalability.
Quick Start
Sign up: Go to planetscale.com and create an account.
Install CLI:
brew install planetscale/tap/pscale # macOS
# or
scoop install pscale # Windows
Create database:
pscale auth login
pscale database create myapp --region us-east
Connect:
pscale shell myapp main
Create table:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE
);
Cheatsheet
| Command | Description |
|---|---|
pscale database create name | Create database |
pscale shell db branch | Connect to branch |
pscale branch create db name | Create branch |
pscale deploy-request create db branch | Create deploy request |
pscale connect db branch | Local connection proxy |
pscale password create db branch name | Create connection password |
Gotchas
Branching workflow
# Create development branch
pscale branch create myapp add-orders
# Connect to branch
pscale shell myapp add-orders
# Make schema changes
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT,
total DECIMAL(10,2)
);
# Create deploy request
pscale deploy-request create myapp add-orders
# Deploy to production (via UI or CLI)
pscale deploy-request deploy myapp 1
Connection strings
# Generate connection string
pscale password create myapp main production-password
# Use in application
DATABASE_URL="mysql://user:password@host/database?ssl=true"
Use with frameworks
// Prisma
// schema.prisma
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma" // Required for PlanetScale
}
// Drizzle
import { drizzle } from 'drizzle-orm/planetscale-serverless';
import { connect } from '@planetscale/database';
const connection = connect({
url: process.env.DATABASE_URL
});
const db = drizzle(connection);
No foreign keys (use application-level)
// PlanetScale doesn't support foreign keys for online migrations
// Handle relationships in application code
// With Prisma relationMode: "prisma"
model User {
id Int @id @default(autoincrement())
orders Order[]
}
model Order {
id Int @id @default(autoincrement())
userId Int
user User @relation(fields: [userId], references: [id])
}
Next Steps
- PlanetScale Documentation - Official docs
- PlanetScale Tutorials - Learning resources
- Branching Guide - Workflow
- Prisma + PlanetScale - Integration