MySQL Command Line Client: operazioni fondamentali INTRODUZIONE Il RDBMS MySQL, oltre a fornire un applicazione che abbia un interfaccia user-friendly, ha a disposizione anche un altro client, che svolge le sue operazioni mediante righe di comando. Coloro i quali hanno avuto la possibilità di interagire con il vecchio sistema operativo della Microsoft, MS-DOS o coloro i quali si trovano ad utilizzare le shell, messe a disposizione dai sistemi Linux, possono avere una certa idea di come questo strumento funzioni. Specialmente all inizio, il non aver tutto graficamente a disposizione in modo pressoché immediato, come un interfaccia grafica può fare, potrebbe risultare decisamente frustrante e indurre gli utenti ad utilizzare il Query Browser. Tuttavia, per quelli che volessero approfondire le proprie conoscenze, qui vengono illustrati i principali comandi per eseguire agevolmente tutte le istruzioni base necessarie, facendo uso del CLC. Con un po di esercizio, capito il meccanismo, tutto diventa decisamente semplice. OPERAZIONI PRELIMINARI Una volta dato l avvio al CLC, appare una richiesta di immissione password. Acceduti al sistema compare una schermata come questa: Enter password: ***** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 to server version 5.0.20a-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. Le prime danno informazioni di carattere generale sul sistema, ma in particolare è importante ricordare che le istruzioni devono venir terminate dal carattere punto e virgola. Possiamo volere, a questo punto, o accedere ad un database già esistente o crearne uno nuovo. CREAZIONE ED ELIMINAZIONE DI UN DATABASE Per la creazione di un nuovo database, la sintassi da utilizzare è semplice. Viene fatto uso del comando create database seguito dal nome del nuovo db. mysql> create database nuovodatabase; Query OK, 1 row affected (0.24 sec) Una volta dato l invio, un messaggio del sistema ci informa del fatto che il nostro nuovo database è stato creato correttamente. Viceversa se si vuole eliminare il database, vi è il comando drop database seguito dal nome del db: mysql> drop database nuovodatabase; Query OK, 0 row affected (0.24 sec) ACCEDERE AD UN DATABASE ESISTENTE Per poter visualizzare tutti i database creati e disponibili, bisogna utilizzare il comando show databases, che non richiede parametri. Il risultato è simile a questo: mysql> show databases; Database information_schema mysql test nuovodatabase 4 rows in set (0.12 sec) per poter far uso di uno di questi, bisogna utilizzare il comando use seguito dal nome del database che si intende usare: mysql> use nuovodatabase; Database changed da qui è possibile effettuare una molteplicità di operazioni tra le quali agire sulle tabelle e far query.
CREAZIONE E DISTRUZIONE DI TABELLE La sintassi da utilizzare per la creazione delle tabelle è esattamente uguale a quella che sarebbe necessario immettere nel Query Browser. Nello specificare gli attributi bisogna far attenzione a non mettere il punto e virgola prima che tutta la tabella sia stata descritta. Supponiamo di voler creare una tabella di nome miatabella avente un attributo di tipo carattere chiave primaria, un secondo attributo di tipo carattere che non deve esser nullo, un terzo attributo numerico e un attributo di tipo data. mysql> create table miatabella ( -> att1 char(10) primary key, -> att2 varchar(10) not null, -> att3 numeric(3), -> att4 date -> ); Query OK, 0 rows affected (0.25 sec) Da notare è che i vari attributi sono sempre divisi tramite virgola, i ritorni a capo sono del tutto opzionali (MySQL ignora spazi bianchi), il punto e virgola chiude la descrizione della tabella e permette all interpretatore, una volta dato l invio, di eseguire le varie operazioni. Se durante la scrittura si dovesse commettere qualche errore allora possiamo cancellare tutto ciò che è stato fin lì immesso attraverso la sequenza \c. Attenzione: \c non deve trovarsi all interno dei caratteri di una stringa, altrimenti non verrà eseguito. mysql> create table miatabella2 ( -> att1 cher(10) promory kei, -> \c mysql> L eventuale presenza di errori verrebbe logicamente segnalata qualora si utilizzasse il punto e virgola, dopo che il codice è stato mandato in esecuzione. mysql> create table miatabella2 ( -> att1 cher(10) promory kei, -> ); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'miatabella2(att1 cher(10) promory kei)' at line 1 Analogamente alla sintassi utilizzata per il database, è possibile eliminare una tabella mediante il comando drop table seguito dal nome della tabella. mysql> drop table miatabella; Query OK, 0 rows affected (0.06 sec) INFORMAZIONI SULLA TABELLA Qualora avessimo bisogno di ricordarci che struttura abbia una tabella da noi creata, possiamo ricorrere all istruzione show columns from, specificando contestualmente il nome della tabella. mysql> show columns from miatabella; Field Type Null Key Default Extra att1 char(10) NO PRI att2 varchar(10) NO att3 decimal(3,0) YES att4 date YES 4 rows in set (0.00 sec) Tipicamente la prima colonna denominata Field indica il nome degli attributi presenti, la colonna Type, invece, dà informazioni sul tipo dell attributo, Null segnala se è possibile utilizzare il valore nullo per un determinato attributo, Key se l attributo specifico è chiave e, nel caso, di che genere, Default se l attributo ha un valore predefinito, Extra per tutte le informazioni accessorie.
POPOLARE UNA TABELLA Dopo aver creato la tabella, bisogna operare con delle query e inserire delle tuple. L operazione di inserimento (o insert) proviene direttamente dall algebra relazionale e si realizza praticamente attraverso l istruzione insert così strutturata: insert into nometabella values(valore1, valore2,, valoren); Nel caso particolare, che abbiamo fino ad adesso considerato, l istruzione sarebbe: insert into miatabella values( Alessandro, Magno, 1, 2003-12-05 ); mysql> insert into miatabella values( Alessandro, Magno, 1, 2003-12-05 ); Query OK, 1 row affected(0.06 sec) Attenzione: l ordine di inserimento dei valori delle tuple deve avvenire in concordanza con la posizione delle colonne. mysql> insert into miatabella values( Antonietta, Maria, 1789-07-14, 5 ); ERROR 1366 (HY000): Incorrect decimal value: '1789-07-14' for column 'att3' at row 1 Se non si vuole rispettare l ordine di inserimento è possibile utilizzare la seguente sintassi: insert into nometabella(att2, att1, att3,, attn) values(valore2, valore1, valore 3,, valoren); In questo caso l ordine che deve esser rispettato è quello specificato all interno delle parentesi che seguono il nome della tabella. Infine se non disponiamo di un informazione o non vogliamo che venga specificata, allora è lecito far uso della seguente sintassi (laddove N-k è il numero degli attributi a cui esplicitamente non assegniamo un valore): insert into nometabella(att1, att2,, attn-k) values(valore1, valore2, valoren-k); Attenzione: questa pratica è consentita unicamente se per gli attributi per i quali non si specifica un valore è stato preventivamente assegnato un valore di default. VISUALIZZARE IL CONTENUTO DI UNA TABELLA Dopo aver popolato la tabella, si rende necessario visualizzare ciò che è contenuto all interno di essa. Questo genere di operazione è effettuabile mediante una query ed in particolare servendosi del comando select, che ha questa sintassi: select colonnedavisualizzare from nometabella; Se vogliamo visualizzare tutto il contenuto della tabella, cioè se la schermata deve essere comprensiva di tutte le colonne che abbiamo creato allora, utilizziamo il carattere * (si legge all) dopo select, in particolare nel nostro caso: select * from miatabella; mysql> select * from miatabella; -------+------+-------------+ -------+------+-------------+ -------+------+-------------+ 1 row in set (0.00 sec) Se abbiamo intenzione di sapere unicamente i valori di una (o più) particolare colonna allora l istruzione diventa: select att1,, attk from nometabella; mysql> select att1 from miatabella; att1 Alessandro 1 row in set (0.00 sec) Accanto all istruzione di select possiamo aggiungere vari parametri o condizioni per visualizzare le informazioni con un determinato criterio oppure per restringere il campo delle tuple. Per decidere quale parametro utilizzare per ordinare le tuple è possibile aggiungere in coda all istruzione precedente order by e specificare, dopo di esso, mediante quale attributo deve essere eseguito l ordinamento.
select attributi from nometabella order by attributo; mysql> select * from miatabella order by att4; Antonietta Maria 2 1789-07-14 3 rows in set (0.00 sec) In questo caso l ordine viene stabilito mediante la data. Aggiungendo all istruzione di select where stabiliamo la condizione o le condizioni che permettono la visualizzazione di alcune tuple e non di altre. select attributi from nometabella where condizione; mysql> select * from miatabella where att3=1; La condizione all interno della query impone la visualizzazione di quelle tuple che hanno come valore impostato per l attributo att3 uguale a 1. Suggerimento: order by e where possono essere utilizzati in simultanea. MODIFICARE IL CONTENUTO DI UNA TABELLA Ogni DBMS permette la modifica delle informazioni. Il MySQL utilizza l istruzione update con la seguente sintassi: update nometabella set valoredamodificare where condizione; attraverso il sintagma set stabiliamo quale valore debba esser modificato e mediante where quale (o quali) valori devono esser modificati. Se la mia tabella è questa: Antonietta Maria 2 1789-07-14 Posso voler decidere di modificare tutte le tuple che hanno valore 1 per att3 e sostituirlo con 3. In particolare la mia istruzione sarebbe la seguente: mysql> update miatabella set att=3 where att3=1; Query OK, 2 rows affected (0.03 sec) Rows matched: 2 Changed: 2 Warnings: 0 ELIMINARE TUPLE Possiamo eliminare tutte le tuple con l istruzione delete, mediante la seguente sintassi: delete from nometabella; Volendo invece restringere il campo, inseriamo in coda il sintagma where: delete from nometabella where condizione;
mysql> delete from miatabella where att3=2; Query OK, 1 row affected (0.06 sec) mysql> select * from miatabella; Alessandro Magno 3 2003-12-05 Costantino Cesare 3 0313-02-09 VISUALIZZARE INFORMAZIONI DA PIÙ TABELLE Mediante l operazione di select possiamo visualizzare informazioni derivanti da più tabelle ed unirle. Poniamo di avere due tabelle così strutturate: Alessandro Magno 3 2003-12-05 Costantino Cesare 3 0313-02-09 id code id2 1 uno 1 2 due 1 3 tre 1 Se volessimo far corrispondere ad ogni nome e cognome un valore della colonna code, servendoci dell id, potremmo scrivere la seguente query: mysql> select miatabella.att1, miatabella.att2, miatabella2.code -> from miatabella, miatabella2 -> where miatabella.att3=miatabella2.id; att1 att2 code Alessandro Magno tre Costantino Cesare tre In generale dopo il comando select scegliamo le informazioni da visualizzare, indichiamo da quali tabelle le informazioni devono provenire mediante from ed infine con where la condizione che permette alle tabelle di collegarsi tra loro. Questi appunti sono stati scritti da hunter85 per il sito http://www.quellidiinformatica.org. Il presente documento non è da considerarsi privo di errori, mancanze o quant altro, pertanto è consigliata una lettura critica del testo e non limitata a questo. Per segnalazioni o suggerimenti è possibile utilizzare il servizio di messaggistica messo a disposizione della comunità.