# MariaDB INSERT INTO: come inserire dati nelle tabelle

Il comando `INSERT INTO` in MariaDB consente di aggiungere nuovi record a una tabella già esistente. Si tratta di uno dei comandi SQL fondamentali, utilizzato per aggiungere nuovi dati a un database o ampliare le informazioni già presenti.

## Cos’è il comando `INSERT` in MariaDB?

Il comando `INSERT` in [MariaDB](https://www.ionos.it/digitalguide/server/know-how/cose-mariadb/) consente di **inserire nuovi dati in una tabella**, aggiungendo intere righe alla struttura esistente. Ogni volta che un utente si registra, invia un modulo o crea un nuovo prodotto, il sistema esegue in background il comando `INSERT INTO`.

Durante l’inserimento, MariaDB verifica che i valori corrispondano ai **tipi di dati delle colonne** e che tutti i campi obbligatori siano compilati. Se i valori violano restrizioni quali `NOT NULL`, `UNIQUE` o `FOREIGN KEY`, il database rifiuta l’operazione. Pertanto, la struttura della tabella di destinazione e l’indicazione corretta delle colonne sono fondamentali per l’utilizzo di `INSERT`.

## Qual è la sintassi del comando `INSERT INTO` in MariaDB?

La sintassi standard per `INSERT INTO` è:

```sql
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);
```

- `table_name` indica la tabella di destinazione, dove i dati verranno scritti.
- L’elenco delle colonne (`column1, column2, ...`) è facoltativo, ma consigliato.
- Nel campo `VALUES` si specificano i valori da inserire nelle colonne indicate.

I valori vengono associati alle colonne secondo l’ordine definito. Se il numero o l’**ordine dei valori** non corrisponde a quello delle colonne, si verifica un errore.

## Quali parametri e varianti esistono per `INSERT INTO` in MariaDB?

Il comando `INSERT INTO` è flessibile e può essere adattato a diversi casi d’uso. Le principali varianti sono:

### Elenco delle colonne

È possibile indicare tutte le colonne o solo alcune. Se non viene specificato l’elenco delle colonne, MariaDB si aspetterà un valore per ogni colonna definita nella tabella, nello stesso ordine in cui sono state create.

```sql
INSERT INTO users VALUES (1, 'Anna', 'anna@example.com');
```

Se desideri compilare solo colonne specifiche, esegui il seguente comando:

```sql
INSERT INTO users (name, email) VALUES ('Anna', 'anna@example.com');
```

In questo caso, vengono compilati solo i campi `name` ed `email`.

### Inserire più righe

Questa sintassi è più efficiente rispetto a più comandi MariaDB `INSERT` singoli, soprattutto in caso di grandi volumi di dati:

```sql
INSERT INTO products (name, price)
VALUES ('pen', 1.50),
    ('notepad', 2.00),
    ('bag', 9.90);
```

### `INSERT IGNORE`

Con il comando `IGNORE`, MariaDB ignora le righe che violano le restrizioni e continua con le restanti.

```sql
INSERT IGNORE INTO users (id, name) VALUES (1, 'Anna');
```

### `INSERT ... ON DUPLICATE KEY UPDATE`

Questa sintassi permette di aggiornare una riga esistente in caso di conflitto su una chiave univoca:

```sql
INSERT INTO users (id, name)
VALUES (1, 'Anna')
ON DUPLICATE KEY UPDATE name = 'Anna';
```

È utile per combinare inserimento e aggiornamento in un’unica istruzione, ad esempio nei processi di importazione, sincronizzazione o operazioni automatizzate.

### Inserire i dati con `SELECT`

Con `SELECT` puoi copiare record da una tabella all’altra:

```sql
INSERT INTO archive_orders (id, status)
SELECT id, status FROM orders WHERE status = 'completed';
```

## Esempi d’uso per il comando `INSERT INTO` in MariaDB

Di seguito alcuni scenari pratici per l’uso di `INSERT INTO`.

### Registrazione utenti

In questo esempio, MariaDB aggiunge una nuova persona alla tabella `users`. I valori delle colonne `name` ed `email` provengono da un modulo o da un’applicazione. Il valore `NOW()` restituisce la marca temporale della registrazione, ovvero il momento esatto in cui l’utente si registra:

```sql
INSERT INTO users (name, email, created_at)
VALUES ('Lena', 'lena@example.com', NOW());
```

Questo metodo è adatto ai moduli web di registrazione, dove ogni inserimento viene registrato direttamente nel database. È importante che `created_at` sia di tipo `DATETIME` o `TIMESTAMP`, in modo che `NOW()` venga memorizzato correttamente.

### Copiare dati da un’altra tabella

Questo esempio mostra come trasferire dati esistenti da una tabella (`orders`) a un’altra tabella (`archive_orders`). MariaDB seleziona tutti gli ordini con lo stato `'completed'` e trasferisce le colonne `id` e `status`.

```sql
INSERT INTO archive_orders (id, status)
SELECT id, status FROM orders WHERE status = 'completed';
```

Questi comandi vengono utilizzati per l’archiviazione, la pulizia dei dati e la creazione di report. Ricordati di verificare sempre che la struttura, ad esempio i tipi di colonna, sia la stessa nella tabella di origine e nella tabella di destinazione, altrimenti MariaDB non eseguirà il comando.


This is a markdown version of: [https://www.ionos.it/digitalguide/hosting/tecniche-hosting/mariadb-insert-into/](https://www.ionos.it/digitalguide/hosting/tecniche-hosting/mariadb-insert-into/) for AI/LLM consumption.