# Inserting or updating data
### INSERT
immudb supports standard `INSERT` sql statement.
It can be used to add one or multiple values within the same transaction.
```sql
INSERT INTO customers (
id, customer_name, email, address,
city, ip, country, age, active, created_at
)
VALUES (
1,
'Isidro Behnen',
'ibehnen0@mail.ru',
'ibehnen0@chronoengine.com',
'Arvika',
'127.0.0.15',
'SE',
24,
true,
NOW()
);
INSERT INTO products (id, product, price, created_at)
VALUES
( 1, 'Juice - V8, Tomato', '$4.04', NOW() ),
( 2, 'Milk', '$3.24', NOW() );
INSERT INTO orders (customerid, productid, created_at)
VALUES (1, 1, NOW()), (1, 2, NOW());
INSERT INTO customer_review (customerid, productid, review, created_at)
VALUES
(1, 1, 'Nice Juice!', NOW());
```
### UPSERT
`UPSERT` is an operation with a syntax similar to `INSERT`,
the difference between those two is that `UPSERT` either creates a new or replaces an existing row.
A new row is created if an entry with the same primary key does not yet exist in the table,
otherwise the current row is replaced with the new one.
If a table contains an `AUTO_INCREMENT` primary key,
the value for that key must be provided
and the `UPSERT` operation will only update the existing row.
```sql
UPSERT INTO products (id, product, price)
VALUES
( 2, 'Milk', '$3.17' ),
( 3, 'Grapes - Red', '$5.03' );
UPSERT INTO orders (id, customerid, productid)
VALUES (1, 1, 3);
```
### ON CONFLICT
The optional `ON CONFLICT` clause specifies an alternative action to raising a unique violation or constraint error.
`ON CONFLICT DO NOTHING` simply avoids inserting a row as its alternative action. In this case the primary key of the row is returned.
### Timestamp, NOW() and CAST() built-in function
The built-in `NOW()` function returns the current timestamp value as seen on the server.
The `CAST` function can be used to convert a string or an integer to a timestamp value.
The integer value is interpreted as a Unix timestamp (number of seconds since the epoch time).
The string value passed to the `CAST` function must be in one of the following formats:
`2021-12-08`, `2021-12-08 17:21`, `2021-12-08 17:21:59`, `2021-12-08 17:21:59.342516`.
Time components not specified in the string are set to 0.
```sql
UPSERT INTO products (id, product, price, created_at)
VALUES
( 3, 'Bread', '$1.50', NOW() ),
( 4, 'Spinach', '$0.99', CAST('2021-02-01' AS TIMESTAMP) )
```
```sql
SELECT * FROM products WHERE created_at < NOW()
```