Files
rdbms-playground/website/src/content/docs/reference/inserting-and-editing-data.md
T
claude@clouddev1 10655e46de docs(website): fill the six Reference stubs with worked examples + output
Expand columns, relationships, indexes, constraints, inserting-and-editing-
data, and querying-and-inspecting from syntax-only stubs into full pages,
each with worked examples on the library schema and real captured app output
(structure boxes, relationship diagrams, data tables, show-lists, query
plans, cascade summaries). All output captured verbatim from the app — never
hand-drawn. Both simple- and advanced-mode forms shown where both apply;
advanced syntax verified against tests/source.

STYLE.md: record the output-block convention (plain unlabelled fence,
captured from a throwaway harness, not hand-drawn).

Verified: pnpm build clean (24 pages); no forbidden terms; internal links
and heading anchors resolve.
2026-06-10 11:50:18 +00:00

4.4 KiB

title, description, sidebar
title description sidebar
Inserting & editing data Add, change, and remove rows — with required filters and automatic confirmation of what changed.
order
7

Once your tables exist, you fill them with rows and keep them up to date. The examples use the example library. After every write, the playground shows you the rows that changed, so you can confirm the effect at a glance.

Inserting rows

List the columns you are providing, then the matching values:

insert into members (name, joined) values ('Katherine Johnson', '2024-06-01')
  1 row(s) inserted
┌───────────┬───────────────────┬────────────┐
│ member_id │ name              │ joined     │
├───────────┼───────────────────┼────────────┤
│         3 │ Katherine Johnson │ 2024-06-01 │
└───────────┴───────────────────┴────────────┘

Notice that member_id was filled in automatically — it is a serial column, so you leave it out of the insert and the database assigns the next value. The same applies to shortid columns and to any column with a default (see Types).

Updating rows

update changes columns on the rows that match a filter:

update books set published = 1970 where book_id = 2
  1 row(s) updated
┌─────────┬───────────────────────────┬───────────┬───────────┬────────────────┐
│ book_id │ title                     │ author_id │ published │ isbn           │
├─────────┼───────────────────────────┼───────────┼───────────┼────────────────┤
│       2 │ The Left Hand of Darkness │         1 │      1970 │ 978-0441478125 │
└─────────┴───────────────────────────┴───────────┴───────────┴────────────────┘

Deleting rows

delete from authors where author_id = 3

When the deleted row has children linked by an on delete cascade relationship, those children are removed too, and the result reports each affected relationship:

  1 row(s) deleted
  related: 1 row(s) deleted in `books` for relationship `books_author` (on delete cascade)

The required filter

update and delete must have a where clause. This is a safety rail: it is far too easy to wipe or rewrite a whole table by forgetting one. When you really do mean every row, say so explicitly with --all-rows:

update books set published = 2000 --all-rows
delete from loans --all-rows
update <Table> set <col>=<value>[, ...] (where <expr> | --all-rows)
delete from <Table> (where <expr> | --all-rows)

Richer filters

A where clause is more than simple equality. It accepts and / or / not, the comparison operators, and like, is null, in, and between:

delete from loans where returned_on is null and loaned_on < '2024-01-01'

The same expression grammar drives show data — see Querying & inspecting.

In advanced mode

The simple-mode commands above already use SQL-like syntax; advanced mode is full SQL, including multi-row inserts and returning:

insert into members (name, joined) values
  ('Katherine Johnson', '2024-06-01'),
  ('Dorothy Vaughan', '2024-06-02')
update books set published = 1970 where book_id = 2
delete from authors where author_id = 3

Syntax

insert into <Table> [(<col>[, ...])] [values] (<value>[, ...])
update <Table> set <col>=<value>[, ...] (where <expr> | --all-rows)
delete from <Table> (where <expr> | --all-rows)

See also Querying & inspecting and Constraints.