--- title: INSERT | Datasquirel docs description: Add new rows to a table using INSERT statements in Datasquirel page_title: INSERT page_description: Add new rows to your tables using SQL INSERT statements. --- ## Overview `INSERT INTO` adds one or more new rows to a table. Each row must provide values for all `NOT NULL` columns that do not have a default value. ## Basic Syntax ```sql INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3); ``` ## Examples ### Insert a Single Row ```sql INSERT INTO users (name, email, is_active) VALUES ('Alice', 'alice@example.com', 1); ``` ### Insert Multiple Rows ```sql INSERT INTO tags (name) VALUES ('javascript'), ('typescript'), ('sql'); ``` ### Insert with Default Values If a column has a DEFAULT value defined, you can omit it: ```sql INSERT INTO posts (title, content) VALUES ('My First Post', 'Hello world!'); -- created_at and updated_at will use their DEFAULT values ``` ## AUTO_INCREMENT Every Datasquirel table has an `id` column with `AUTO_INCREMENT`. You never need to provide the `id` value on insert — the database assigns the next available integer automatically. After an INSERT, the new row's `id` is returned as the `insertId` in the API response. ## Using INSERT via the API The [CRUD POST endpoint](/docs/api-reference/crud/post) handles inserts through a simple object: ```javascript const result = await datasquirel.crud.insert({ dbName: "my_database", tableName: "users", body: { name: "Alice", email: "alice@example.com", is_active: 1, }, apiKey: process.env.DATASQUIREL_API_KEY, }); console.log(result.payload); // The new row's id ``` For batch inserts via the API, include a `batchData` array: ```javascript const result = await datasquirel.crud.insert({ dbName: "my_database", tableName: "tags", body: { batchData: [ { name: "javascript" }, { name: "typescript" }, ]}, apiKey: process.env.DATASQUIREL_API_KEY, }); ```