>
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".
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