> Realizzazione DataBase Basket con SQL

Appunti di Programmazione

Creative Commons License

Pagina 1 2 3 4 5 6 7 8

Realizzazione DataBase Basket con SQL

Ho usato MAMP per programmare in PHP e usare SQL. Per l’installazione e la configurazione vi rimando al sito di appartenenza: https://www.mamp.info/en/.
Io preferisco usare il terminale al posto dell'interfaccia visuale di phpMyAdmin; permette di ottenere una migliore conoscenza del linguaggio SQL, anche se è necessario porre maggiore attenzione nello scrivere i comandi per evitare problemi inutili.

- Avviare MAMP e il Terminale.

- Se l'installazione di MAMP è stata effettuata senza apportare alcuna modifica né alla posizione di registrazione sull' HD, né al nome utente e password, scrivere il seguente comando nel terminale:

/Applications/MAMP/Library/bin/mysql --host=localhost -uroot -proot

Appare il seguente messaggio per indicare che siamo entrati in MySQL e possiamo iniziare a lavorare:

Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

altrimenti modificare il percorso assoluto “/Applications/MAMP/Library/bin/“ con quello da voi impostato e/o le credenziali -u(sta per utente) e -p(sta per password) con quelle scelte da voi.
Se tutto è andato bene il prompt deve cambiare in “mysql>”.

INFORMAZIONI SU SQL:

- OGNI comando SQL deve terminare con un ';' (punto e virgola).
- Un comando può essere interrotto digitando al prompt '\c'.
- Le istruzioni SQL possono essere scritte indifferentemente in MAIUSCOLO o minuscolo.
- I comandi possono essere suddivisi su più linee semplicemente premendo INVIO laddove vogliamo separarli. Quando l’istruzione è terminata è sufficiente digitare il “;” e premere INVIO per mandarlo in esecuzione.

Per ogni riferimento all'uso di SQL si consulti il Manuale Online.

- Creiamo il nostro DataBase assegnandogli il nome di Basket:

mysql> CREATE DATABASE IF NOT EXISTS Basket;
Manuale Online: CREATE DATABASE

Il comando opposto, ossia quello per eliminare un DataBase non più necessario, è:

mysql> DROP DATABASE Basket;
Manuale Online: DROP DATABASE

- Verifichiamo che sia stato creato:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Basket             |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0,00 sec)
Manuale Online: SHOW DATABASES

Per poter lavorare con il nostro DB è necessario impartire il seguente comando:

mysql> USE Basket;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
Manuale Online: USE DATABASE

Il nome del DB DEVE essere scritto rispettando MAIUSCOLE/minuscole.
Da ora in poi possiamo manipolare il nostro DB, creando, modificando, cancellando, rinominando Tabelle, Campi, Record, Viste e Relazioni. Ogni qualvolta si vuole utilizzare il DataBase è sufficiente aprire il terminale, entrare in MySQL con il comando impartito all’inizio e usare l’istruzione “USE Basket;”.

- Creiamo le nostre 3 Tabelle:

mysql> CREATE TABLE Giocatori (
    -> Numero_Maglia INT NOT NULL, 
    -> Cognome VARCHAR(20) NOT NULL, 
    -> Nome VARCHAR(20) NOT NULL, 
    -> Anno INT NOT NULL, 
    -> PRIMARY KEY (Numero_Maglia));
Manuale Online: CREATE TABLE

Il comando crea una Tabella di nome "Giocatori" composta da 4 campi:
- Numero_Maglia: contiene valori numerici di tipo intero e non può essere vuota ( NOT NULL).
- Cognome: contiene del testo, ossia un numero di caratteri fino ad un massimo del valore impostato fra parentesi, 20 in questo caso, e non può essere lasciato vuoto.
- Nome: come Cognome.
- Anno: esattamente come Numero_Maglia.
Ogni Tabella deve contenere una colonna (campo) che contiene valori UNICI, mai ripetuti, in modo da poterle assegnare il titolo di "Chiave Primaria" e identificare quel particolare record proprio attraverso quel campo specifico. Un pò come accade per le persone con il Codice Fiscale, o il Numero di Targa dei veicoli.
-Il comando PRIMARY KEY(Numero_Maglia) attribuisce al campo inserito fra le parentesi il titolo di Chiave Primaria.
Per i vari tipi di dati utilizzabili in MySQL si fa riferimento alla Documentazione online.

Come per il DB anche per la Tabelle esiste il comando che ne permette l'eliminazione:

mysql> DROP TABLE Giocatori;
Manuale Online: DROP TABLE

Se invece desideriamo CANCELLARE solo il contenuto della Tabella senza eliminarne la struttura si usa il comando DELETE:

mysql> DELETE FROM Giocatori;
Query OK, 7 rows affected (0,03 sec)
Manuale Online: DELETE

Adesso verifichiamo che sia stata creata la Tabella Giocatori.

mysql> SHOW TABLES;
+------------------+
| Tables_in_basket |
+------------------+
| Giocatori        |
+------------------+
1 row in set (0,00 sec)
Manuale Online: SHOW TABLES

Per assicurarci che abbiamo fatto le cose per bene chiediamo che ci venga mostrata la descrizione della struttura di "Giocatori":

mysql> DESCRIBE Giocatori;
+---------------+-------------+------+-----+---------+-------+
| Field         | Type        | Null | Key | Default | Extra |
+---------------+-------------+------+-----+---------+-------+
| Numero_Maglia | int(11)     | NO   | PRI | NULL    |       |
| Cognome       | varchar(20) | NO   |     | NULL    |       |
| Nome          | varchar(20) | NO   |     | NULL    |       |
| Anno          | int(11)     | NO   |     | NULL    |       |
+---------------+-------------+------+-----+---------+-------+
4 rows in set (0,06 sec)
Manuale Online: DESCRIBE

- Creiamo le altre 2 Tabelle: Campionato e Partita:

mysql> CREATE TABLE Campionato (
    -> Codice_Partita INT NOT NULL AUTO_INCREMENT,
    -> Data_Partita DATE NOT NULL,
    -> Squadra_Casa VARCHAR(25) NOT NULL,
    -> Squadra_Ospite VARCHAR(25) NOT NULL,
    -> Tipologia VARCHAR(15) NOT NULL,
    -> Categoria VARCHAR(15) NOT NULL,
    -> Risultato_Finale VARCHAR(10) NULL,
    -> Parziale_1T VARCHAR(10) NULL,
    -> Parziale_2T VARCHAR(10) NULL,
    -> Parziale_3T VARCHAR(10) NULL,
    -> Parziale_4T VARCHAR(10) NULL,
    -> Parziale_5T VARCHAR(10) NULL,
    -> Parziale_6T VARCHAR(10) NULL,
    -> Parziale_7T VARCHAR(10) NULL,
    -> Parziale_8T VARCHAR(10) NULL,
    -> PRIMARY KEY (Codice_Partita));


mysql> CREATE TABLE Partita (
    -> Indice INT NOT NULL AUTO_INCREMENT,
    -> Codice_Partita INT NOT NULL,
    -> Numero_Maglia INT NOT NULL,
    -> Canestri_2p_1T INT NULL,
    -> Canestri_1p_1T INT NULL,
    -> Canestri_2p_2T INT NULL,
    -> Canestri_1p_2T INT NULL,
    -> Canestri_2p_3T INT NULL,
    -> Canestri_1p_3T INT NULL,
    -> Canestri_2p_4T INT NULL,
    -> Canestri_1p_4T INT NULL,
    -> Canestri_2p_5T INT NULL,
    -> Canestri_1p_5T INT NULL,
    -> Canestri_2p_6T INT NULL,
    -> Canestri_1p_6T INT NULL,
    -> Canestri_2p_7T INT NULL,
    -> Canestri_1p_7T INT NULL,
    -> Canestri_2p_8T INT NULL,
    -> Canestri_1p_8T INT NULL,
    -> PRIMARY KEY (Indice));

Controlliamo se abbiamo fatto tutto bene:

mysql> DESCRIBE Campionato;
+-------------------+-------------+------+-----+---------+----------------+
| Field             | Type        | Null | Key | Default | Extra          |
+-------------------+-------------+------+-----+---------+----------------+
| Codice_Partita    | int(11)     | NO   | PRI | NULL    | auto_increment |
| Data_Partita      | date        | NO   |     | NULL    |                |
| Squadra_Casa      | varchar(25) | NO   |     | NULL    |                |
| Squadra_Ospite    | varchar(25) | NO   |     | NULL    |                |
| Tipologia         | varchar(15) | NO   |     | NULL    |                |
| Categoria         | varchar(15) | NO   |     | NULL    |                |
| Risultato_Finale  | varchar(10) | YES  |     | NULL    |                |
| Parziale_1T       | varchar(10) | YES  |     | NULL    |                |
| Parziale_2T       | varchar(10) | YES  |     | NULL    |                |
| Parziale_3T       | varchar(10) | YES  |     | NULL    |                |
| Parziale_4T       | varchar(10) | YES  |     | NULL    |                |
| Parziale_5T       | varchar(10) | YES  |     | NULL    |                |
| Parziale_6T       | varchar(10) | YES  |     | NULL    |                |
| Parziale_7T       | varchar(10) | YES  |     | NULL    |                |
| Parziale_8T       | varchar(10) | YES  |     | NULL    |                |
+-------------------+-------------+------+-----+---------+----------------+
15 rows in set (0,35 sec)


mysql> DESCRIBE Partita;
+----------------+---------+------+-----+---------+----------------+
| Field          | Type    | Null | Key | Default | Extra          |
+----------------+---------+------+-----+---------+----------------+
| Indice         | int(11) | NO   | PRI | NULL    | auto_increment |
| Codice_Partita | int(11) | NO   |     | NULL    |                |
| Numero_Maglia  | int(11) | NO   |     | NULL    |                |
| Canestri_2p_1T | int(11) | YES  |     | NULL    |                |
| Canestri_1p_1T | int(11) | YES  |     | NULL    |                |
| Canestri_2p_2T | int(11) | YES  |     | NULL    |                |
| Canestri_1p_2T | int(11) | YES  |     | NULL    |                |
| Canestri_2p_3T | int(11) | YES  |     | NULL    |                |
| Canestri_1p_3T | int(11) | YES  |     | NULL    |                |
| Canestri_2p_4T | int(11) | YES  |     | NULL    |                |
| Canestri_1p_4T | int(11) | YES  |     | NULL    |                |
| Canestri_2p_5T | int(11) | YES  |     | NULL    |                |
| Canestri_1p_5T | int(11) | YES  |     | NULL    |                |
| Canestri_2p_6T | int(11) | YES  |     | NULL    |                |
| Canestri_1p_6T | int(11) | YES  |     | NULL    |                |
| Canestri_2p_7T | int(11) | YES  |     | NULL    |                |
| Canestri_1p_7T | int(11) | YES  |     | NULL    |                |
| Canestri_2p_8T | int(11) | YES  |     | NULL    |                |
| Canestri_1p_8T | int(11) | YES  |     | NULL    |                |
+----------------+---------+------+-----+---------+----------------+
19 rows in set (0,01 sec)

Adesso se visualizziamo la lista delle Tabelle del nostro DB otteniamo:

mysql> SHOW TABLES;
+-------------------+
| Tables_in_basket  |
+-------------------+
| Campionato        |
| Giocatori         |
| Partita           |
+-------------------+
3 rows in set (0,00 sec)

Ora dobbiamo riempire le nostre Tabelle con le informazioni impostate. Vi sono vari modi per scrivere i dati in una Tabella:

1 - INSERT INTO Nome_Tabella VALUES (valore_1, valore_2, valore_3,... ,valore_n);
Inserisce una nuova linea con i dati impostati.
I valori stringa (di tipo VARCHAR) devono essere inseriti fra apici ( ' ) o virgolette ( " ); i valori numerici senza niente.

mysql> INSERT INTO Giocatori VALUES (20,'Rossi','Alessandro',2006);
Query OK, 1 row affected (0,03 sec)

Oppure, nel caso volessimo inserire più linee contemporaneamente:

mysql> INSERT INTO Giocatori VALUES
    -> (30,'Neri','Tommaso',2006),
    -> (21,'Bianchi','Antonio',2005);
Query OK, 2 rows affected (0,35 sec)
Records: 2  Duplicates: 0  Warnings: 0
Manuale Online: INSERT

2 - REPLACE INTO Nome_Tabella VALUES (valore_1, valore_2, valore_3,... ,valore_n);
Rimpiazza la linea in questione con i dati impostati o ne crea una nuova nel caso tale riga non esista.

mysql> REPLACE INTO Giocatori VALUES (23,"Gialli","Paolo",2006);
Query OK, 1 row affected (0,00 sec)
Manuale Online: REPLACE

3 - LOAD DATA LOCAL INFILE “/Percorso_Assoluto/Nome_File.txt" INTO TABLE Nome_Tabella;
In questo modo si caricano nella Tabella i dati memorizzati in un file .txt.
* I dati di una linea devono stare su una stessa riga separati da una tabulazione.
* Linee diverse devono essere divise da un ritorno a capo (Tasto INVIO)
* Lultima linea deve terminare anch'essa con un ritorno a capo (Tasto INVIO).
* I campi AUTO_INCREMENT possono essere omessi lasciando una spazio vuoto.

Aprite un editor di testo e inserite tutti i nomi dei ragazzi per popolare la Tabella Giocatori e salvate il file con un nome a vostra scelta con estensione .txt. Annotate il nome e la cartella dove lo registrate. Io ho scelto "/Users/gfrank/Desktop/Giocatori.txt".

File txt con i dati dei Giocatori

mysql> LOAD DATA LOCAL INFILE "/Users/gfrank/Desktop/Giocatori.txt" INTO TABLE Giocatori;
Query OK, 4 rows affected (0,04 sec)
Records: 4  Deleted: 0  Skipped: 0  Warnings: 0
Manuale Online: LOAD DATA INFILE

L'istruzione non sovrascrive la Tabella esistente, ma aggiunge i valori contenuti nel file .txt a quelli già presenti.

È arrivato il momento di verificare se abbiamo inserito i dati in modo corretto. Si usa il comando SELECT seguito da un " * " per indicare che vogliamo visualizzare tutte le colonne della Tabella, il cui nome è scritto di seguito. L'opzione di Default prevede che, se non specificato diversamente, la Tabella viene visualizzata riordinata secondo la colonna scelta come chiave primaria.

mysql> SELECT * FROM Giocatori;
+---------------+---------+------------+------+
| Numero_Maglia | Cognome | Nome       | Anno |
+---------------+---------+------------+------+
|             4 | Celesti | Nicolò     | 2005 |
|            10 | Marroni | Ivan       | 2005 |
|            20 | Rossi   | Alessandro | 2006 |
|            21 | Bianchi | Antonio    | 2005 |
|            23 | Gialli  | Paolo      | 2006 |
|            27 | Grigi   | Mattia     | 2006 |
|            30 | Neri    | Tommaso    | 2006 |
|            33 | Blu     | Emanuele   | 2007 |
+---------------+---------+------------+------+
8 rows in set (0,00 sec)
Manuale Online: SELECT

Supponiamo di avere sbagliato l'anno di nascita di Grigi Mattia, nella Tabella Giocatori, e che dobbiamo cambiarlo da 2006 a 2005. Possiamo usare indifferentemente due comandi: REPLACE INTO... oppure UPDATE...:

mysql> REPLACE INTO Giocatori VALUES (27, "Grigi","Mattia",2005);
Query OK, 2 rows affected (0,00 sec)

Oppure

mysql> UPDATE Giocatori SET Anno=2005 WHERE Numero_Maglia=27;
Query OK, 1 row affected (0,02 sec)
Rows matched: 1  Changed: 1  Warnings: 0
Manuale Online: UPDATE

In entrambi i casi la Tabella Giocatori sarà corretta in questo modo:

mysql> SELECT * FROM Giocatori;
+---------------+---------+------------+------+
| Numero_Maglia | Cognome | Nome       | Anno |
+---------------+---------+------------+------+
|             4 | Celesti | Nicolò     | 2005 |
|            10 | Marroni | Ivan       | 2005 |
|            20 | Rossi   | Alessandro | 2006 |
|            21 | Bianchi | Antonio    | 2005 |
|            23 | Gialli  | Paolo      | 2006 |
|            27 | Grigi   | Mattia     | 2005 |
|            30 | Neri    | Tommaso    | 2006 |
|            33 | Blu     | Emanuele   | 2007 |
+---------------+---------+------------+------+
8 rows in set (0,00 sec)

Nel caso in cui sia necessario eliminare un ragazzo dalla Tabella si può ricorrere al comando DELETE FROM...

mysql> DELETE FROM Giocatori WHERE Numero_Maglia=10;
Query OK, 1 row affected (0,00 sec)

Abbiamo eliminato il bambino con il numero maglia uguale a 10, ossia Marroni Ivan. Potevamo usare la clausola WHERE insieme al campo Nome="Ivan" o Cognome="Marroni", avremmo ottenuto lo stesso effetto. Ma se nell'elenco vi fosse stato un altro ragazzo con lo stesso nome o cognome sarebbe stato eliminato anche quello. Usando la chiave primaria come criterio di ricerca, eravamo certi che avremmo eliminato SOLO quel record e nessun altro.

mysql> SELECT * FROM Giocatori;
+---------------+---------+------------+------+
| Numero_Maglia | Cognome | Nome       | Anno |
+---------------+---------+------------+------+
|             4 | Celesti | Nicolò     | 2005 |
|            20 | Rossi   | Alessandro | 2006 |
|            21 | Bianchi | Antonio    | 2005 |
|            23 | Gialli  | Paolo      | 2006 |
|            27 | Grigi   | Mattia     | 2005 |
|            30 | Neri    | Tommaso    | 2006 |
|            33 | Blu     | Emanuele   | 2007 |
+---------------+---------+------------+------+
7 rows in set (0,00 sec)

Per poter continuare il lavoro è necessario caricare altri dati nella Tabella Giocatori e popolare le altre due: Campionato e Partita.

mysql> INSERT INTO Giocatori VALUES
    -> (7,'Avorio','Andrea',2005),
    -> (8,'Azzurro','Alberto',2007),
    -> (10,'Marroni','Ivan',2005),
    -> (11,'Beige','Andrea',2006),
    -> (13,'Bordeaux','Riccardo',2006),
    -> (14,'Antracite','Lorenzo',2005),
    -> (15,'Carbone','Lorenzo',2006),
    -> (17,'Arancioni','Romeo',2006),
    -> (18,'Catrame','Vittorio',2006),
    -> (19,'Antracite','Ferdinando',2005),
    -> (24,'Ciano','Federico',2005),
    -> (25,'Corallo','Luca',2005),
    -> (26,'Cremisi','Emiliano',2005),
    -> (35,'Amaranto','Mattia',2007),
    -> (36,'Ecru','Federico',2007),
    -> (37,'Fucsia','Francesco',2007),
    -> (40,'Granata','Roberto',2007),
    -> (42,'Ambra','Francesco',2007),
    -> (75,'Bronzo','Silvio',2006),
    -> (90,'Indaco','Matteo',2007);
Query OK, 20 rows affected (0,00 sec)
Records: 20  Duplicates: 0  Warnings: 0


mysql> INSERT INTO Campionato VALUES
    -> ('','2016-11-05','Ghezzano','Cascina','Campionato','Aquilotti',
    -> '10-14','0-7','9-1','0-1','9-0','3-5','6-7','0-0','0-0'),
    -> ('','2016-11-13','Cascina','Juve Pontedera','Campionato','Esordienti',
    -> '39-41','6-10','13-10','7-12','13-9','0-0','0-0','0-0','0-0'),
    -> ('','2016-11-20','Volterra','Cascina','Campionato','Esordienti',
    -> '43-34','10-2','7-16','14-3','12-13','0-0','0-0','0-0','0-0'),
    -> ('','2016-11-26','Cascina','Pall. Valdera','Campionato','Aquilotti',
    -> '16-8','4-8','26-0','15-2','9-8','10-4','10-0','0-0','0-0');
Query OK, 4 rows affected, 4 warnings (0,01 sec)
Records: 4  Duplicates: 0  Warnings: 4

Ora inseriamo i dati relativi alle singole partite:

mysql> INSERT INTO Partita VALUES
    -> ('',1,11,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0),
    -> ('',1,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',1,15,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',1,17,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',1,18,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0),
    -> ('',1,20,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',1,23,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0),
    -> ('',1,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',1,33,0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,0),
    -> ('',1,37,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0),
    -> ('',1,40,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',1,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
Query OK, 12 rows affected, 12 warnings (0,02 sec)
Records: 12  Duplicates: 0  Warnings: 12


mysql> INSERT INTO Partita VALUES
    -> ('',2,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',2,7,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',2,11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',2,14,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0),
    -> ('',2,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',2,17,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',2,18,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0),
    -> ('',2,19,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0),
    -> ('',2,20,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0),
    -> ('',2,21,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',2,24,0,0,5,1,0,0,4,0,0,0,0,0,0,0,0,0),
    -> ('',2,26,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0);
Query OK, 12 rows affected, 12 warnings (0,00 sec)
Records: 12  Duplicates: 0  Warnings: 12


mysql> INSERT INTO Partita VALUES
    -> ('',3,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',3,14,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0),
    -> ('',3,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',3,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',3,18,0,0,2,0,0,1,0,0,0,0,0,0,0,0,0,0),
    -> ('',3,19,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',3,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',3,23,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',3,24,0,0,3,2,0,0,5,2,0,0,0,0,0,0,0,0),
    -> ('',3,25,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',3,26,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0),
    -> ('',3,30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
Query OK, 12 rows affected, 12 warnings (0,00 sec)
Records: 12  Duplicates: 0  Warnings: 12


mysql> INSERT INTO Partita VALUES
    -> ('',4,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',4,11,0,0,0,0,4,0,0,0,1,0,0,0,0,0,0,0),
    -> ('',4,13,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0),
    -> ('',4,15,0,0,5,0,0,0,1,1,0,0,0,0,0,0,0,0),
    -> ('',4,17,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0),
    -> ('',4,18,0,0,5,2,0,0,2,0,0,0,0,0,0,0,0,0),
    -> ('',4,20,0,0,2,0,0,0,0,0,3,0,0,0,0,0,0,0),
    -> ('',4,30,1,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0),
    -> ('',4,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',4,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
    -> ('',4,37,0,0,0,0,3,1,0,0,0,0,1,1,0,0,0,0),
    -> ('',4,42,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0);
Query OK, 12 rows affected, 12 warnings (0,01 sec)
Records: 12  Duplicates: 0  Warnings: 12

Prima di proseguire nel lavoro e fare anche delle prove, è opportuno salvare le tre Tabelle con i relativi dati contenuti.
Per fare ciò, nel MAC con sistema operativo EL CAPITAN o seguente, è necessario disabilitare le impostazioni dell'opzione "secure_file_priv". Se è impostata a NULL impedisce all'utente l'operazione di salvataggio delle Tabelle MySQL. Per conoscere il valore impostato impartire il seguente comando:

mysql> SELECT @@secure_file_priv;
+--------------------+
| @@secure_file_priv |
+--------------------+
| NULL               |
+--------------------+
1 row in set (0,00 sec)

I valori possibili sono i seguenti:
- NULL : nessuna operazione di salvataggio è permessa.
- /Percorso/Assoluto/... : si possono salvare file SOLO nella cartella impostata dal percorso indicato.
- "" : Sicurezza disabilitata; si può salvare ovunque vogliamo.

Per modificarne il valore si procede in questo modo
- Arrestare il Server di MAMP
- Aprire un qualunque editor di testo e digitare le seguenti linee:

[mysqld_safe]
[mysqld]
secure_file_priv=""

Salvare il file con nome " .my.cnf " nella propria directory Home; quindi riavviare il Server e verificare che le impostazioni siano state rese effettive.

mysql> SELECT @@secure_file_priv;
+--------------------+
| @@secure_file_priv |
+--------------------+
|                    |
+--------------------+
1 row in set (0,00 sec)

Adesso che tutto è a posto si può procedere con il salvataggio delle tre Tabelle.
Si utilizza il comando SELECT ... INTO OUTFILE:

mysql> SELECT * FROM Giocatori INTO OUTFILE '/Users/gfrank/Downloads/Giocatori.txt';
Query OK, 27 rows affected (0,07 sec)


mysql> SELECT * FROM Campionato INTO OUTFILE '/Users/gfrank/Downloads/Campionato.txt';
Query OK, 4 rows affected (0,00 sec)


mysql> SELECT * FROM Partita INTO OUTFILE '/Users/gfrank/Downloads/Partita.txt';
Query OK, 48 rows affected (0,00 sec)
Manuale Online: SELECT ... INTO OUTFILE

Pagina 1 2 3 4 5 6 7 8