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

Once your tables exist, you fill them with rows and keep them up to date. The
examples use the [example library](/getting-started/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:

```rdbms
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](/reference/constraints/) (see [Types](/reference/types/)).

## Updating rows

`update` changes columns on the rows that match a filter:

```rdbms
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

```rdbms
delete from authors where author_id = 3
```

When the deleted row has children linked by an `on delete cascade`
[relationship](/reference/relationships/), 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`:

```rdbms
update books set published = 2000 --all-rows
delete from loans --all-rows
```

```rdbms-syntax
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`:

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

The same expression grammar drives `show data` — see
[Querying & inspecting](/reference/querying-and-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`:

```sql
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

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

To fill a table with many rows at once instead of typing each one, see
[Generating sample data](/reference/generating-sample-data/).

See also [Querying & inspecting](/reference/querying-and-inspecting/) and
[Constraints](/reference/constraints/).
