--- 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 set =[, ...] (where | --all-rows) delete from
(where | --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
[([, ...])] [values] ([, ...]) update
set =[, ...] (where | --all-rows) delete from
(where | --all-rows) ``` See also [Querying & inspecting](/reference/querying-and-inspecting/) and [Constraints](/reference/constraints/).