MySQL – Un po’ di comandi via shell (Parte Seconda)

mysqlProseguo la mia collection di appunti sui più comuni comandi MySQL. Nella puntata precedente abbiamo visto come gestire gli utenti, partendo da noi stessi fino ad arrivare a garantire a terzi dei privilegi.

Oggi vediamo come creare un database, delle tabella all’interno ed il necessario per inserire, modificare, cancellare dati dalle tabelle.

Creare un database è operazione abbastanza semplice.

mysql> CREATE DATABASE provolone;

Nel caso in cui avessimo sbagliato a digitare il nome del database, basterà cancellarlo con un.

mysql> DROP DATABASE provolone;

Ma noi non abbiamo sbagliato e vogliamo usare il database provolone 🙂 . Per creare una tabella dentro il database, come prima cosa dobbiamo proprio usare quel database.

mysql> USE provolone;

Adesso possiamo creare una tabella, badando bene al fatto che non possiamo creare una tabella senza campi. Nel momento in cui la tabella vede la luce, deve avere almeno un campo definito.
A questo c’è da aggiungere che è buona norma (vale per tutti i database) impostare un campo definito come l’indicatore univoco del record. Il classico ID.
Per far si che questo sia veramente univoco, evitando di dover controllare con parsing vari la cosa, possiamo impostare un campo auto_increment. Ad ogni inserimento di record il campo si autoincrementerà di uno rispetto all’ultimo inserimeno.
L’univocità è garantita anche dal fatto che la funzione di auto_increment non è basata sull’id più alto presente, ma sull’ultimo id inserito, anche se poi successivamente cancellato.

Sapendo questo, creiamo una tabella con due campi.

mysql> CREATE TABLE prova (
-> id tinyint(4) NOT NULL auto_increment,
-> ciao varchar(80) NOT NULL,
-> PRIMARY KEY (id)
-> );

Abbiamo impostato il campo ID come valore tinyint di massimo 4 cifre (per grandi database è un valore troppo basso!), non vogliamo che il suo valore sia nullo, ed è auto_increment. In quanto tale, abbiamo settato proprio id come chiave primaria della tabella.

L’altro campo, è un semplice valore testuale di massimo 80 caratteri. Campo buono ad esempio per salvare le username degli utenti.

Se vogliamo aggiungere un nuovo campo alla tabella? Basta alterare la tabella.

mysql> ALTER TABLE prova ADD riprova varchar(40) NOT NULL;

Modificare un campo esistente? Ad esempio, proviamo a modificare il campo riprova da varchar(40) a longtext.

mysql> ALTER TABLE prova MODIFY riprova longtext;

Vogliamo vedere la struttura della tabella?

mysql> DESCRIBE prova;
+———+————-+——+—–+———+—————-+
| Field   | Type        | Null | Key | Default | Extra          |
+———+————-+——+—–+———+—————-+
| id      | tinyint(4)  | NO   | PRI | NULL    | auto_increment |
| ciao    | varchar(80) | NO   |     |         |                |
| riprova | longtext    | YES  |     | NULL    |                |
+———+————-+——+—–+———+—————-+

Adesso proviamo a cancellare il campo riprova.

mysql> ALTER prova DROP riprova;

E’ tutto abbastanza semplice ed intuitivo. La cosa che dovete fare per bene è pensare ad una struttura efficiente del database.

La forza dei database relazionali è quella dei confronti incrociati. Un dato in una tabella può essere collegato condizionatamente ad altri dati. Per ogni collegamento può esserci una condizione diversa.
In sintesi un singolo dato può rappresentare diverse fonti di informazione. Tanto più sarà di facile accesso il database, tanto maggiore sarà la possibilità di aggregare i dati e trarne profitto.
Questo vuol dire:

  • Struttura del database snella;
  • Evitare dati uguali salvati in più tabelle perchè destinati ad usi diversi;
  • Diminuire il più possibile lo storing dei dati nel database.

Queste precondizioni vanno soddisfatte da una progettazione seria della struttura del database.

Ritornando al discorso shell, come vedete è molto più semplice gestire le cose in questo modo, che adoperarsi con tool tipo phpmyadmin. Tool importanti per carità, utili sicuramente, ma nella misura in cui una GUI è il focus dell’utilizzatore. Se gestite un server via telnet o ssh, la conoscenza accurata dei comandi è indispensabile 🙂

Più avanti un overview sulla gestione dei dati.