Skip to content
SQLCraft
  • 100% client-side isolated
  • no upload
  • same seed, same rows

Rows you can generate twice and get the same table

Generate reproducible test rows from a seed: four preset tables, twenty-three column kinds, and output as INSERT statements, a full DDL script, CSV or JSON. The same seed is always the same table, on any machine.

Format
Seed 7 · users · 25 rows generated

Output

Written for the dialect and format you picked.

INSERT INTO users (id, first_name, last_name, email, company, country, plan, monthly_spend, signed_up_at)
VALUES
  (1, 'Irene', 'Bishop', 'irene.bishop0@pine.analytics.com', 'Pine Studios S.L.', 'Argentina', 'scale', 1844.79, CAST('2023-09-10 08:48:08' AS TIMESTAMP)),
  (2, 'Yuki', 'Tanaka', 'yuki.tanaka@harbor.labs.com', 'Quartz Labs Inc', 'Poland', 'growth', 120, CAST('2023-04-26 00:15:53' AS TIMESTAMP)),
  (3, 'Tomas', 'Silva', 'tomas.silva@blue.studios.com', 'Pine Works Inc', 'Italy', 'growth', 997.75, CAST('2024-04-30 20:51:51' AS TIMESTAMP)),
  (4, 'Ravi', 'Lombardi', 'ravi.lombardi@blue.labs.com', 'Vertex Analytics B.V.', 'Mexico', 'free', 143.21, CAST('2024-03-10 05:37:17' AS TIMESTAMP)),
  (5, 'Sofia', 'Bishop', 'sofia.bishop@blue.analytics.com', 'Vertex Logistics S.L.', 'Sweden', 'scale', 1213.77, CAST('2023-01-28 09:02:59' AS TIMESTAMP)),
  (6, 'Felix', 'Ibarra', 'felix.ibarra@lumen.logistics.com', 'Pine Traders B.V.', 'Argentina', 'enterprise', NULL, CAST('2024-03-05 02:03:01' AS TIMESTAMP)),
  (7, 'Felix', 'Moreau', 'felix.moreau@vertex.studios.com', 'Harbor Traders Ltd', 'Chile', 'enterprise', 1803.38, CAST('2023-05-27 04:52:01' AS TIMESTAMP)),
  (8, 'Elena', 'Moreau', 'elena.moreau@iron.analytics.com', 'Cedar Logistics GmbH', 'Brazil', 'scale', 2168.99, CAST('2023-11-14 08:13:34' AS TIMESTAMP)),
  (9, 'Sofia', 'Cardoso', 'sofia.cardoso@north.labs.com', 'Lumen Logistics B.V.', 'Sweden', 'free', 1889.59, CAST('2023-08-11 09:44:03' AS TIMESTAMP)),
  (10, 'Marc', 'Dupart', 'marc.dupart9@lumen.analytics.com', 'Quartz Studios GmbH', 'Chile', 'starter', 2025.67, CAST('2023-02-09 13:39:01' AS TIMESTAMP)),
  (11, 'Yuki', 'Haas', 'yuki.haas@lumen.traders.com', 'Vertex Works GmbH', 'Italy', 'enterprise', 2144.52, CAST('2023-10-02 08:25:13' AS TIMESTAMP)),
  (12, 'Hugo', 'Grant', 'hugo.grant@orbit.labs.com', 'Harbor Analytics GmbH', 'Colombia', 'scale', 1140.72, CAST('2023-04-13 12:07:38' AS TIMESTAMP)),
  (13, 'Ravi', 'Ibarra', 'ravi.ibarra@north.analytics.com', 'Blue Systems Inc', 'Australia', 'scale', 1601.29, CAST('2024-03-06 07:34:04' AS TIMESTAMP)),
  (14, 'Ana', 'Dupart', 'ana.dupart@harbor.traders.com', 'Iron Systems S.L.', 'Australia', 'scale', 863.62, CAST('2024-04-30 11:33:49' AS TIMESTAMP)),
  (15, 'Ravi', 'Silva', 'ravi.silva@pine.traders.com', 'Cedar Health AB', 'Netherlands', 'growth', NULL, CAST('2023-04-19 22:16:10' AS TIMESTAMP)),
  (16, 'Sofia', 'Silva', 'sofia.silva@quartz.works.com', 'Orbit Labs Inc', 'Netherlands', 'growth', 2030.06, CAST('2023-08-15 14:37:04' AS TIMESTAMP)),
  (17, 'Marc', 'Ibarra', 'marc.ibarra@harbor.studios.com', 'Lumen Traders Inc', 'Brazil', 'starter', 1640.45, CAST('2023-03-15 18:47:31' AS TIMESTAMP)),
  (18, 'Lena', 'Lombardi', 'lena.lombardi@blue.health.com', 'Quartz Logistics Inc', 'Mexico', 'starter', 421.88, CAST('2023-05-29 22:33:09' AS TIMESTAMP)),
  (19, 'Clara', 'Jansen', 'clara.jansen18@iron.systems.com', 'Blue Traders Inc', 'Italy', 'growth', 1389.11, CAST('2023-01-14 23:59:01' AS TIMESTAMP)),
  (20, 'Kadir', 'Jansen', 'kadir.jansen@iron.studios.com', 'Quartz Analytics Ltd', 'Spain', 'starter', 1915.77, CAST('2023-06-18 23:21:32' AS TIMESTAMP)),
  (21, 'Ines', 'Novak', 'ines.novak@quartz.analytics.com', 'Cedar Health S.L.', 'Australia', 'free', 2192.25, CAST('2023-04-01 08:17:30' AS TIMESTAMP)),
  (22, 'Lena', 'Kowalski', 'lena.kowalski@harbor.logistics.com', 'Vertex Traders AB', 'Finland', 'scale', 1137.72, CAST('2023-11-17 09:02:43' AS TIMESTAMP)),
  (23, 'Irene', 'Erdem', 'irene.erdem@north.labs.com', 'Lumen Traders Inc', 'Italy', 'enterprise', 2236.29, CAST('2023-01-19 00:31:40' AS TIMESTAMP)),
  (24, 'Yuki', 'Quintero', 'yuki.quintero@harbor.health.com', 'Harbor Labs GmbH', 'United States', 'starter', 1847.13, CAST('2023-12-22 04:56:42' AS TIMESTAMP)),
  (25, 'Lena', 'Cardoso', 'lena.cardoso@iron.health.com', 'Cedar Logistics AB', 'Finland', 'growth', 703.11, CAST('2023-09-07 13:39:24' AS TIMESTAMP));
Rows
25
Columns
9
Seed
7
Format
INSERT

First five rows

The same data the script carries, laid out as a table.

seed 7
idBIGINTfirst_nameVARCHAR(24)last_nameVARCHAR(24)emailVARCHAR(40)companyVARCHAR(32)countryVARCHAR(24)planVARCHAR(16)monthly_spendNUMERIC(12,2)signed_up_atTIMESTAMPTZ
1HugoBishophugo.bishop0@quartz.logistics.comVertex Health B.V.Germanyfree3362023-04-13
2KadirSilvakadir.silva@vertex.labs.comLumen Analytics GmbHGermanyfree404.152023-10-31
3ClaraGrantclara.grant@iron.traders.comLumen Analytics GmbHJapanenterprise1481.732024-01-04
4FelixSilvafelix.silva@lumen.works.comBlue Traders LtdJapanscaleNULL2023-03-03
5LenaHaaslena.haas@cedar.traders.comIron Labs S.L.Denmarkscale1535.322023-01-16

What the generator promises

Coherence and reproducibility are what make a fixture useful.

Seeded
mulberry32, so one seed is one table every time
No clock
dates run from 1 Jan 2023, never from now()
Coherent
an email is built from that row's own names
Nullable
a nullable column is NULL about one row in twenty
  • Booleans are written as TRUE and FALSE, and dates as CASTs the dialect accepts.

A seed, not a coin flip

The generator is a seeded mulberry32 PRNG, and every value — including the dates, which run from a fixed epoch rather than from the clock — is derived from that single stream. The same preset, row count and seed produce byte-identical output, which is what makes the result usable as a committed fixture.

Rows that hold together

Values are derived within a row, so an email is built from that row's first and last name, a URL reuses the same company slug, and an id follows the row number. Coherent rows are what let a generated table exercise a join, a filter or a group-by instead of only looking plausible.

One table, four formats

The rows can leave as INSERT statements for a table that already exists, a full DDL script that creates it first, a CSV export, or JSON with the JavaScript types preserved. The DDL path reuses the same generator as the schema builder, so a CREATE TABLE here matches what that tool emits for the same types.

  • SQL Formatter

    Pretty-print a query with clause phrases on their own line, commas broken only inside a list and subqueries on their own indent — or collapse it back to one line. Keyword casing, indent width, leading or trailing commas and a line-length limit are all switches, and the token stream is compared before and after so a reformat can never rewrite the query.

    Open tool
  • Dialect Converter

    Move one query between six engines and get the spellings that actually differ: identifier quoting, string escaping, boolean literals, type names, auto-increment columns and the LIMIT / TOP / FETCH FIRST family. What cannot be translated — ILIKE, JSONB operators, QUALIFY, ON CONFLICT — is listed as a gap instead of being silently dropped.

    Open tool
  • JSON / CSV to SQL

    Paste an API response, one JSON object per line, or a CSV export and get a CREATE TABLE with types inferred from the values rather than declared up front: sizes come from the longest string, a date that meets a timestamp widens to a timestamp, and every substitution or renamed key is reported. The INSERT statements follow, batched or one per row.

    Open tool

Mock data FAQ

What can be generated, the four output formats, why the values hold together, and why the output is reproducible.

What can I generate?

Four preset tables — users, orders, products and subscriptions — built from twenty-three column kinds, including ids, names, derived emails, companies, cities, countries, currencies, amounts, statuses, plans, SKUs, phones, URLs, words, sentences, UUIDs, dates, timestamps, booleans, integers and JSON tag lists. A column can be marked nullable, which makes roughly one row in twenty NULL.

What formats can the rows leave in?

INSERT statements for an existing table, a full DDL script (CREATE TABLE plus the INSERTs), CSV, or JSON with the JavaScript types preserved and dates as ISO strings. The DDL path reuses the same generator as the schema builder, so a CREATE TABLE produced here is identical to the one that tool emits for the same types.

Why do the values look coherent?

Because they are derived from the same row. The email is built from that row's first and last name, the URL reuses the same company slug, and an id follows the row number. Coherence is what makes generated data useful: a fixture where every row has an unrelated company cannot exercise a join or a group-by.

Is the output stable across seeds and machines?

It is stable per seed, and deterministic everywhere. The PRNG is mulberry32 seeded from the seed you set plus the row count, and dates are offset from a fixed epoch (1 January 2023) rather than from the current time. Change the seed for a different fixture, keep it to freeze one — and nothing in the output depends on the machine or the clock.