Guide / tutorial per MySQL. Guida per imparare ad usare il database mysql per fare query semplici o complesse in sql. Configurare mysql al meglio.
Visualizzazione post con etichetta mysql+guide. Mostra tutti i post
Visualizzazione post con etichetta mysql+guide. Mostra tutti i post

venerdì 3 novembre 2017

Come fare query case sensitive con MySql

Oggi ho scoperto l'acqua calda, ovvero che le query su mysql sono case insensitive.
Praticamente, ho salvato nel mio database un bel codice alfanumerico, composto da numeri e cifre maiuscole e minuscole, e quando sono andato a controllare il tutto tramite query, ho scoperto che anche se inserivo il codice tutto in minuscolo, mysql restituiva lo stesso il risultato.

Vediamo dunque come fare query case sensitive in mysql, in modo tale da sfruttare appieno le potenzialità dei codici complessi, come ad esempio quelli usati nelle password e nelle codici d'accesso in generale.


Come fare query case sensitive con MySql


Per poter effettuare delle query mysql che riconoscano che il dato immesso sia una lettera maiuscola o minuscola (case sensitive), occorre utilizzare la seguente sintassi sql:

SELECT * FROM tabella WHERE BINARY nome like '%paroLa%' 

Utilizzando la sintassi mysql binary, andremo a specificare che vogliamo fare una ricerca nella tabella tenendo conto delle maiuscole e delle minuscole.
Nell'esempio citato infatti, verrà cercato esattamente il termine paroLa, con la elle maiuscola, tutti gli altri risultati verranno scartati.

Ecco due immagini che mostrano le mysql query case sensitive all'opera, con o senza binary:

mysql query case insensitive

mysql query case sensitive

Ma se invece volessimo che uno specifico campo mysql sia sempre case sensitive, in modo da non doverlo specificare in ogni query?
Semplice, basta settare BINARY come proprietà del campo.

binary mysql

E con le query case sensitive sul database mysql, direi che è proprio tutto... anche se sì, è vero, ci sarebbe anche il metodo COLLATE, che però non è argomento di questo post (cit.).

sabato 7 ottobre 2017

Ottenere i nomi colonne delle tabelle mysql

Prendiamo ad esempio che vogliate creare delle tabelle dinamicamente con il vostro prode mysql, magari partendo da una tabella con una struttura da utilizzare come base, come potreste mai fare?
Quello che vi serve di sicuro conoscere per questo esercizio, sono i nomi delle colonne di tabella, in modo da sapere come si chiamano i vari campi, e che attributi hanno.

In questo breve articolo vi spiegherò dunque quale sintassi sql utilizzare per poter ottenere la struttura di una tabella mysql, in modo tale da poterne fare quello che vi pare.


Come ottenere i nomi delle colonne delle tabelle Mysql


La sintassi mysql da utilizzare per ricavare la struttura di una tabella, è la seguente:

SHOW COLUMNS FROM tabella

Lanciando questa semplice query infatti, si otterranno a video le seguenti colonne:
  • Field: il nome del campo
  • Type: il tipo del campo (es. varchar)
  • Null: se il dato accetta i valori nulli
  • Key: il tipo di chiave utilizzata
  • Default: il valore di default
  • Extra: es l'attributo auto_increment

A questa sintassi è ovviamente possibile passare dei parametri, tramite il comando WHERE, in modo tale da ottenere ad esempio solo i campi (field) che si chiamano in un certo modo, o di un certo tipo (type).

Tornando all'esempio citato ad inizio post, se volessimo creare dinamicamente una tabella mysql, magari facendo scegliere all'utente solo determinati campi dalla lista, potremmo anche giocarcela inserendo un valore nei commenti dei campi.
Se ad esempio decidiamo di inserire nei campi da non mostrare, il commento nonmostrare, potremmo mostrare solo i nomi dei campi di una tabella mysql che non hanno quel commento.

Ad un osservatore attento a questo punto non sarà sfuggita una cosa: con la sintassi spiegata poco sopra la query non riporta i commenti (comments) ed altri parametri della struttura della tabella.
Per mostrare tutte le colonne di una tabella mysql, anche quelle nascoste, occorre aggiungere il comando FULL.
Ecco come verrebbe la query che mostra anche i commenti presenti nelle colonne della tabella mysql:

SHOW FULL COLUMNS FROM tabella

Ottenere i nomi colonne delle tabelle mysql

Bene, ora sapete come ottenere i nomi di tutte le colonne presenti in una tabella mysql, anche quelli normalmente nascosti.
Ciclando queste informazioni vi sarà possibile farci un po' quello che vi pare, anche ricreare una tabella mysql partendo da un'altra che fa da stampo, il tutto senza conoscerne a priori i nomi ed i tipi di campi utilizzati.

Oppure, un'altra possibile applicazione che mi viene in mente che è possibile fare con questa "show columus", è quella di esportare dinamicamente il contenuto di una tabella in formato csv.
Se infatti la desiderata è quella di creare un csv che abbia in testata il nome di colonna di ogni campo che poi verrà esportato, ecco che questa sintassi fa proprio al caso nostro.

giovedì 5 ottobre 2017

Contare numero totale record in query con Limit in mysql

Una necessità che potrebbe insorgere quando si sviluppa un'applicazione che mostra a video solo un numero limitato di risultati (usando la paginazione), è quella ottenere lo stesso il numero totale di record nella query con limit.
Se infatti si usa la sintassi mysql limit e poi si contano i record estratti utilizzando la classica sintassi num_rows, il risultato ottenuto sarà legato al limite impostato nella query.

Ecco dunque che sql ci viene in contro con un'apposita sintassi che risolve questo annoso problema.


Come contare il numero totale di record in una query che usa Limit in mysql


La sintassi mysql da utilizzare per ottenere a video solo un numero limitato di risultati da una query, ma allo stesso tempo sapere anche quanti sono i record totali della query senza limit, è la seguente:

SELECT SQL_CALC_FOUND_ROWS * FROM tabella LIMIT n;
SELECT FOUND_ROWS();


Grazie infatti alla funzione SQL_CALC_FOUND_ROWS, si predispone la query al conteggio totale dei record nonostante la presenza del limit, ed i dati vengono poi pescati dalla funzione FOUND_ROWS().

Il risultato ottenuto sarà il totale dei record presenti nella tabella, pescati con la query originale, senza però tener presente del limit.

totale record in query con Limit in mysql

Questa sintassi SELECT FOUND_ROWS abbinata al FOUND_ROWS funziona perfettamente dalla console di sql, se però la lanciate dal phpmyadmin, vi restituirà come risultato 1, che è il numero delle righe interessate e non il conteggio richiesto.
Questo perchè probabilmente phpmyadmin considera le due query come scollegate, mentre la console mysql no.

lunedì 18 settembre 2017

Come fare il backup su MySql

Se hai un server con su più database mysql, una delle cose che sicuramente devi prevedere, è la possibilità di fare il backup di tutti i database e le tabelle mysql presenti sulla tua macchina.
Questo perchè, facciamo le corna, se si dovesse brasare il server che ospita il tuo database, byebye dati.

In questo breve articolo ti mostrerò la sintassi da utilizzare per fare backup mysql, completi o mirati.
Infatti, ci sono anche dei casi in cui basta solo una copia di uno specifico database, e non di tutto quanto, oppure addirittura anche solo il backup di una singola tabella mysql.

Vediamo quindi come fare tutto ciò.


Come fare il backup su MySql


Innanzitutto va precisata una cosa: il backup su mysql non si fa dentro il client sql, o da shell mysql, ma semplicemente da prompt dei comandi di dos (se si è su windows), o da shell linux.

Vediamo subito la sintassi da utilizzare per fare un backup completo di tutti i dabase mysql presenti su una macchina:

mysqldump --all-databases > nome-file.sql

Come dicevo poco sopra, questo comando è da lanciare dal promp di dos o da shell.

Come fare il backup su MySql

Alla sintassi sopra indicata, bisogna ricordarsi anche di passare le credenziali d'accesso come root mysql, ovvero con un utente che sia amministratore.
Ecco quindi una sintassi generale da usare per gli script automatici di backup, ai quali si passa già tutto affinchè possano girare in completa autonomia:

mysqldump -u username --password=password --all-databases > nome-file.sql

Vediamo invece come fare il backup di uno specifico database mysql.
Ecco la sintassi da utilizzare:

mysqldump --databases db1 db2 db3 db4 > nome-file.sql

Ovviamente, per fare quanto scritto sopra, va passato solo il nome di un database mysql.
Altrimenti, basta passare tutti i nomi dei db dei quali si vuole fare la copia, separati da uno spazio.

Infine, per fare un backup di una singola tabella mysql, ecco cosa bisogna scrivere:

mysqldump nome-database nome-tabella > nome-file.sql

Anche in questo caso, è possibile elencare i nomi di più tabelle separati da spazio, per poter fare la copia mirata di più tabelle di uno specifico database.

Come si può ben capire, il comando mysqldump mysql è davvero potente ed efficace, perchè oltre che fare la copia di interi database da una semplice riga di comando, si occupa anche di fare un backup consinstente dei dati, grazie a comandi come lock_tables, che di fatto impediscono che altri utenti possano scrivere nelle tabelle mentre si sta facendo la copia del database.

venerdì 8 settembre 2017

Leggi il post

Estrarre un valore casuale da tabella MySql

Su mysql oltre a poter ordinare i valori presenti in una tabella in ordine crescente o decrescente, è anche possibile ottenere un ordine random, in modo tale che i record presentati a video appaiano in maniera casuale.

Questo tipo di ordinamento può servire sia per avere un elenco di valori random, ma anche ad esempio, per poter estrarre un valore casuale da una tabella.
Vediamo dunque subito come compiere questa semplice operazione col sql.


Come estrarre un valore casuale da una tabella sql con MySql


La sintassi sql da utilizzare per ordinare in maniera random una tabella mysql è la seguente:

SELECT nome-campo FROM nome-tabella ORDER BY RAND() LIMIT 1

La funzione utilizzate per ordinare i risultati sql a caso, è per l'appunto la RAND(), abbinata alla ORDER BY.
Nell'esempio specifico però, ho estratto un campo in maniera casuale, limitando anche i risultati ad uno solo con la LIMIT 1.
Quindi questo esempio estrae un valore casuale da una tabella mysql.

Se invece è tua intenzione avere tutti i dati presenti in una tabella, senza però mettere alcun filtro, ordinati in maniera casuale; quello che devi fare è semplicemente usare la sintassi indicata sopra, senza però mettere il limit.

Ovviamente anche per ordinare casualmente su mysql occorre un po' di criterio.
Se ad esempio hai una tabella con milioni di record e pretendi di ordinarli in maniera random e mostrarli tutti a video, la query potrebbe richiedere bel un po' di tempo.

giovedì 7 settembre 2017

Limitare risultati tabella MySql

Se utilizzi il database mysql e vuoi fare delle query limitandone però in numero i risultati estratti, devi utilizzare una specifica sintassi sql.
In questo breve articolo ti spiegherò come limitare i risultati di una tabella su mysql, in modo tale da poter filtrare in numero i record da estrarre.

Questo genere di operazioni può essere molto utile per non impastare il database con richieste sql troppo pesanti, o anche per poter creare script che gestiscono la paginazione dei risultati.

Vediamo subito come fare (cit.).


Come limitare i risultati di una tabella su MySql


Ecco la sintassi sql da utilizzare per estrarre solo un numero limitato di record da una tabella di un database mysql:

SELECT campo FROM tabella LIMIT numero

Grazie alla funzione LIMIT infatti, è possibile dire al mysql di estrarre solo tot risultati.
Se si passa un solo numero a questa funzione, verranno estratti tutti i primi n record.

Se invece si passano due numeri alla limit, verranno estratti i record successivi dalla posizione indicata dal primo numero, alla posizione indicata dal secondo numero.

Se ad esempio si vuole pescare tutti i record dalla posizione 11 alla posizione 13, bisogna usare la seguente sintassi:

SELECT campo FROM tabella LIMIT 10,3

Mettendo infatti limit 10,3, si va a dire di pescare i dati dalla posizione 11, per tre posizioni consecutive, quindi fino alla 13.

Limitare risultati tabella MySql

Bene, ora conosci che conosci i limit di mysql, non ti resta che superarli :p

lunedì 4 settembre 2017

Leggi il post

Come creare un file csv con mysql

Lo sapevi che tramite mysql è anche possibile creare dei file fisici?
Esatto, ad esempio puoi estrarre i risultati di una tabella e salvarli in un file csv, o anche in un altro formato volendo.

Nello specifico dunque, vediamo un esempio di come creare file csv da mysql, tramite uno script sql che salva il risultato di una query in un file fisico presente una specifica cartella del server.
Ecco come fare.


Come creare un file csv da mysql


Per poter generare e salvare un file di tipo csv da mysql, basta utilizzare la seguente sintassi:

SELECT campi INTO OUTFILE 'C:/cartella/nome-file.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM nome-tabella


Questa query infatti, si occupa di pescare i dati da una determinata tabella mysql, e di salvarli dentro un percorso specifico.
Da notare che volendo si può anche specificare tramite sql il delimitatore da usare (in questo esempio la virgola), il carattere per chiudere i risultati (in questo caso le virgolette), ed il delimitatore di riga (\n).

Attenzione però, tutto questo potrebbe non funzionare, e potreste ricevere l'errore:
"The MySQL server is running with the --secure-file-priv option so it cannot execute this statement".
In questo caso per risolvere potete agire in due modi: o salvate il file dentro il percorso indicato nella variabile secure_file_priv del my.ini, oppure la disattivate (sempre da my.ini, il file di configurazione di mysql) e poi riavviate.

Un'ultima considerazione va fatta su un altro possibile errore, il "File nome-file already exists".
Questo errore significa semplicemente che il file che state provando a salvare con la funzione OUTFILE MYSQL esiste già.
Purtroppo questo limite non sembra essere superabile, se non agendo d'astuzia.
In mysql infatti non si possono sovrascrivere i file già esistenti (ma come pro c'è il fatto che è possibile creare nuovi file senza bisogno che questi esistano già), quindi l'unica soluzione è, o creare uno script che prima cancella il file e poi lo ricrea, oppure salvare il file con nomi diversi, magari mettendoci data ed ora nel nome.

venerdì 1 settembre 2017

Leggi il post

Come unire due campi in mysql

Quando estrai i risultati di una query su mysql, a volte può capitare la necessità di voler avere due campi uniti in uno, o anche tre o di più.
Volendo puoi compiere questa operazione da codice, da una pagina web in php magari, però è indubbio che se lo fai tramite sql è decisamente più rapido ed efficace.

Vediamo dunque come concatenare più campi sql, in modo tale da creare un nuovo campo unico risultato, un campo con un nuovo nome.


Come unire due o più campi in mysql


Per poter unire colonne su mysql ti basta utilizzare una sintassi del genere:

SELECT CONCAT(campo1,' ',campo2) AS campo3 FROM tabella

Avrai così creato un nuovo campo risultato, che è l'unione di due campi, separati da spazio.

Ovviamente con questa sintassi sql è possibile unire anche un numero superiore di campi.
Inoltre, volendo potresti voler concatenare una colonna di una tabella con una stringa predefinita, oppure con il risultato di una funzione.

Ecco un altro esempio pratico:

SELECT nome,CONCAT(nome,' | data: ',now()) AS nomecondata FROM `test`

In questo caso abbiamo unito al campo nome della tabella test, la scritta data seguita dalla data ed ora del momento esatto in cui la query viene eseguita.
Tutto molto semplice no?

Sapere come concatenare colonne mysql può sempre tornare utile, soprattutto quando si generano dei risultati che magari poi vanno esportati in formato csv... per esempio :)
Buone query!

mercoledì 30 agosto 2017

Come ordinare risultati tabella MySql

Dopo aver appreso come fare le prime query sql utilizzando il database mysql, una delle altre nozioni base che è necessario apprendere è come fare per ordinare i risultati ottenuti dalle query.
La sintassi da usare per compiere questa importantissima operazione è molto semplice, dato che è una parola inglese molto simile all'italiano.

Vediamo dunque come ordinare i risurlati di una query sql su mysql, in modo da poter ottenere a video degli elenchi perfettamente ordinati, da poter utilizzare nelle nostre pagine web o app.


Come ordinare i risultati di una tabella MySql


Il comando sql da utilizzare per ordinare i dati ottenuti dalle query in un database mysql, è il seguente:

SELECT * FROM tabella ORDER BY campo

Il comando di cui sto parlando è ovviamente ORDER BY, il quale consente di poter ordinare i risultati in ordine crescente o decresente, su uno o più campi.

La parola da utilizzare per ordinare in maniera decrescente è DESC, mentre per ordinare in ordine crescente si utilizza ASC.

Come ordinare risultati tabella MySql

Di default comunque, se si dice di ordinare per un determinato campo, ma non si specifica alcun verso d'ordinamento, quello di default è il crescente, quindi non serve quasi mai in teoria specificare l'ordinamento sql ASC.

Il separatore da usare per ordinare su più campi sql è la virgola, ed ovviamente, ogni verso di ordinamento su ogni specifico campo va indicato subito dopo uno spazio vuoto accanto al campo da ordinare.

Come si può ben vedere anche dallo screenshot allegato, questa sintassi mysql per ordinare risultati sql è semplice ed intuitiva, oltre che di rapida esecuzione.
Ovviamente però, se ci si trova davanti a tabelle con milioni di record, ordinare su più campi potrebbe anche significare alzare notevolmente i tempi di elaborazione... il tutto poi dipende anche da quanto bene è stato progettato il db sql ;)

martedì 29 agosto 2017

Leggi il post

Come creare job eventi in mysql

Come per sql server, anche su mysql è possibile creare degli eventi.
Un evento o un job mysql è un'azione programmabile sul proprio database, in modo tale che giri in automatico in un determinato momento, una volta sola o in maniera ricorrente.

Vediamo subito come creare jobs mysql, in modo da poter schedulare delle operazioni automatiche su tabelle e dati.


Come creare job eventi in mysql


Per poter utilizzare i jobs mysql, occorre prima attivarli a livello globale.
Ecco la sintassi sql da utilizzare per attivare gli eventi mysql:

SET GLOBAL event_scheduler="ON"

Una volta attivata questa opzione globale di sistema (che ovviamente si disattiva mettendo OFF), gli eventi sono disponibili e pronti all'uso, occorre solo crearli.

La sintassi sql da utilizzare per creare un evento schedulato su mysql è la seguente:

CREATE DEFINER=`user-che-fa-girare-evento`@`server` EVENT `nome-evento` ON SCHEDULE AT data-e-ora-evento' ON COMPLETION NOT PRESERVE ENABLE DO sintassi-sql-da-eseguire

Questa sintassi praticamente crea un evento con un determinato nome, che gira in una determinata ora un determinato giorno, con un determinato utente su un determinato server.
Al completamento dell'evento, il job viene cancellato (not preserve), mentre con enable si indica invece che l'evento è attivo e pronto a girare (mettere disable per disattivare).
Infine dopo DO, vanno tutte le istruzioni sql da eseguire.

Se invece si vuole creare una ricorrenza mysql, ovvero un evento che gira ogni ora, ogni giorno, ogni settimana, ogni mese, ecc... ecco la sintassi da utilizzare:

CREATE EVENT `ogni 5 minuti` ON SCHEDULE EVERY 5 MINUTE STARTS '2017-07-31 14:00:00.000000' ENDS '2017-08-01 00:00:00.000000' ON COMPLETION NOT PRESERVE ENABLE DO sql-da-eseguire

In questo esempio infatti, faccio girare ogni 5 minuti il job, che compie qualche operazione sql e poi termina.
Le parole chiave da memorizzare per creare script mysql automatici sono ON SCHEDULE EVERY, e poi STARTS (per dire quando il job deve partire) ed ENDS (facoltativo, indica la data-ora termine del job).
Ovviamente poi, è possibile cambiare la frequenza tramite sintassi sql, sostituendo il comando MINUTE con HOUR, DAY, YEAR, ecc...

Bene, è tutto.
Adesso siete in grado di far compiere a mysql ogni sorta di operazione automatica tramite script sql schedulati.
Ad esempio quanto spiegato in questo tutorial potrebbe anche essere utilizzato per pianificare un backup automatico database mysql... niente male, vero?

mercoledì 23 agosto 2017

Che ore sono su mysql

Stai lavorando su un database mysql ed hai dimenticato l'orologio a casa?
E magari non riesci a leggere l'ora del pc perchè hai una risoluzione troppo piccola...
Scherzi a parte, questo breve post serve solo per scoprire come ricavare l'ora corrente con mysql.

Tramite una semplice sintassi sql infatti, è possibile ottenere l'ora esatta... a patto che il server su cui risiede il database abbia l'orologio impostato correttamente, si intende.


Che ore sono su mysql


Per poter ricavare solo l'ora, tralasciando dunque la data, con mysql basta utilizzare questa sintassi:

SELECT CURTIME()

Questa funzione infatti, restituisce l'ora del server mysql, che in teoria equivale anche alla tua ora.
Ovviamente l'orario è riferito a quando si esegue la query, si intende.

Che ore sono su mysql

Se invece ti interessa ricavare data e ora in mysql, usa questa funzione:

SELECT NOW()

Infine, se vuoi sapere solo la data corrente, senza l'ora, i minuti ed i secondi di mezzo, ecco come fare:

SELECT CURDATE()

E con l'ora esatta in mysql è tutto.
Posto e chiudo (cit.)

mercoledì 28 giugno 2017

Mysql: assegnare permessi a singola tabella

In un precedente post avevo spiegato come dare i privilegi di sola lettura ad un utente mysql con phpmyadmin (leggi qui se vuoi saperne di più), ora invece vediamo come assegnare i permessi ad una singola tabella mysql.

Per compiere questa operazione però, non utilizzerò l'interfaccia grafica di phpmyadmin, ma agirò direttamente in sql, tramite una query.

Vediamo subito come fare.


Come assegnare i permessi ad una singola tabella Mysql


Per poter assegnare ad un utente i permessi su una specifica tabella di un database mysql, occorre ovviamente prima aver creato l'utente.

Se non sai come creare un utente mysql, puoi farlo tramite phpmyadmin seguendo questa guida.

Adesso che hai generato l'account mysql a cui vuoi dare i permessi di scrittura, lettura, o quello che vuoi far fare sulla singola tabella, possiamo entrare un po' più nello specifico di questa guida.
Innanzitutto un piccolo passo indietro però.
In fase di creazione dell'utente è importante non associare alcun privilegio, non bisogna infatti selezionare alcun db o dare permessi di alcun tipo.

Per poter dare il permesso di lettura solo ad una tabella con mysql, usa la seguente sintassi sql:

GRANT SELECT ON nome-database.nome-tabella TO nome-utente@localhost;

Se stai utilizzando phpmyadmin puoi semplicemente cliccare sul database in questione, poi cliccare sulla tab SQL, incollare la sintassi sopra indicata, modificare inserendo i giusti nomi, e cliccare su Esegui.

Questa era la sintassi per la sola lettura di una specifica tabella.
Puoi ovviamente assegnare più permessi contemporaneamente, inserendoli separati da virgola, così:

GRANT SELECT, INSERT, UPDATE, DELETE ON nome-database.nome-tabella TO nome-utente@localhost;

Semplice no?
Grazie a questa facile sintassi potrai agire sui privilegi delle singole tabelle mysql, in modo che l'utente collegato veda solo (ad esempio) una specifica tabella di uno specifico database.

Mysql: assegnare permessi a singola tabella

Ed anche per questo tutorial è tutto... buone query :)

martedì 6 giugno 2017

Come collegarsi a mysql da sql server

Ti piacerebbe poter fare query da sql server a mysql in modo da poter unire i risultati presenti su tabelle diverse, database diversi, server diversi, ed addirittura ambienti sql diversi?
Se la risposta a questa domanda è si, sei capitato nel post giusto.

Grazie al breve tutorial che stai per leggere infatti, potrai collegare mysql a sql server, in modo da poter estrarre i dati presenti in una tabella mysql, direttamente dall'ambiente sql server (es. management studio).


Come collegarsi a Mysql da Sql Server


Per poter collegare un database mysql a sql server, in modo da poter lanciare query su mysql dall'ambiente microsoft, occorre utilizzare uno strumento chiamato Linked Server.

Prima però di poter passare dunque a configurare Microsoft SQL Server Management Studio, bisogna fare un'operazione preliminare molto importante.
Bisogna infatti creare un ODBC, ovvero una fonta dati che consente di collegarsi a mysql dalla macchina windows dove risiede il database sql server.
Se non sai come compiere questa semplice operazione, leggi questa mia specifica guida.

Dopo aver configurato l'odbc, apri Sql Server Management Studio.
Adesso, apri la voce Oggetti server (Server Objects) e poi espandi la sezione Server collegati (linked servers).
Tasto destro del mouse e fai Nuovo server collegato (New linked server).

Come collegarsi a Mysql da Sql Server

Nella finestra che si aprirà, dovrai compilare i seguenti campi:
  • Server collegato: il nome del server collegato, può essere un nome non esatto, è il nome che verrà dato al linked server
  • Provider: impostare il provider dell'origine dei dati, in questo caso Microsoft OLE DB Provider for ODBC Drivers
  • Origine dati: il nome esatto dell'origine dati che hai definito prima quando hai creato l'odbc

Origine dati

Adesso, clicca nella tab Sicurezza e configura il modo in cui vuoi collegarti al database.
In basso nella pagina, seleziona la voce "Verranno effettuate con il contesto di sicurezza seguente" ed inserisci la user e password che hai settato nell'odbc.

Sicurezza

Infine clicca su OK per salvare il tutto.

Se tutto sarà andato a buon fine, la finestra si chiuderà, e tu troverai il tuo nuovo linked server nell'elenco di sinistra.

In caso di problemi invece, se vedi che ci mette tanto a salvare quando crei il linked server ed alla fine ti restituisce l'errore "Login timeout expired", prova a controllare le impostazioni del firewall.
Magari ti blocca proprio la porta che il tuo sql server vuole usare per compiere questa operazione.

Se poi vuoi testare la connessione appena creata, clicca sul tasto destro del mouse sul nome dell'oggetto appena generato e poi su Test connessione.
Se tutto sarà andato a buon fine, riceverai a video il seguente messaggio: "La connessione di prova al server collegato è riuscita".

Test connessione riuscito

Infine, per poter fare una query da sql server a mysql, utilizza la seguente sintassi:

SELECT * FROM OPENQUERY([NOME-SERVER-COLLEGATO], 'SELECT * FROM DATABASE.TABELLA')

Bene, è tutto.
Adesso sai come collegare mysql a sql server, e potrai così aggiornare i dati, cancellare tabelle, o anche solo leggere una tabella mysql da sql server.

giovedì 18 maggio 2017

Come creare un trigger in mysql

Un trigger è una sorta di script che gira in automatico al seguito di qualche azione, che in questo caso specifico riguarda i database e le tabelle mysql.

Grazie ai triggers quindi, è possibile eseguire del codice sql dopo o prima l'inserimento, la modifica o la cancellazione di un campo/riga di una tabella mysql.
Vediamo subito come aggiungere trigger e come modificarli.


Come creare un trigger in mysql


Quando si vuole creare un trigger mysql, la prima cosa che bisogna chiedersi è: prima o dopo?
Infatti, si avrà a che fare con queste due sintassi sql:
  • BEFORE: da utilizzare se si vuole che l'azione automatica venga eseguita prima (es. prima di cancellare un record, copialo in un'altra tabella)
  • AFTER: da usare se si vuole che l'automatismo giri dopo una determinata azione (es. dopo aver modificato un campo, salva i dati in un'altra tabella di log)

Adesso invece vediamo a quali comandi è possibile associare il trigger:
  • INSERT: scatena il trigger prima o dopo l'inserimento di un record in una tabella mysql
  • UPDATE: scatena il trigger prima/dopo l'aggiornamento di un dato
  • DELETE: scatena il trigger prima/dopo la cancellazione (es. si può far bloccare la cancellazione di un record tramite un trigger che controlla una determinata condizione

Ogni trigger che viene creato su un determinato database mysql, deve avere un nome univoco, in più va creato all'interno del comando DELIMITER.

Chiariti questi concetti base, ecco un esempio di codice sql da utilizzare per creare un trigger su mysql:

DELIMITER $$;
CREATE TRIGGER nome_trigger
AFTER INSERT ON tabella1
FOR EACH ROW
BEGIN
INSERT INTO tabella2 (idtab1,campo) VALUES (NEW.idtab1,NEW.campotab1);
END $$;
DELIMITER;


Anche se questo script potrebbe generare a video qualche errore/alert, di fatto il trigger viene creato, e tramite phpmyadmin può essere visto nell'alberatura della tabella.

Come creare un trigger in mysql

Oppure lanciando il comando sql per vedere tutti i trigger esistenti:
SHOW TRIGGERS

Nell'esempio sopra indicato, ho creato un trigger che dopo l'inserimento nella tabella1, inserisce i nuovi record nella tabella2.
Il prefisso NEW serve per indicare i nuovi record inseriti/modificati, mentre il prefisso OLD viene utilizzato per pescare i record dopo una determinata azione.
Se ad esempio inserisco una nuova riga in una tabella, uso NEW.campo per pescare il nuovo record inserito, invece se si tratta di un aggiornamento, posso utilizzare OLD.campo per ottenere il valore del record prima della modifica.

Come poi dicevo poco sopra, se si sta usando phpmyadmin, se è presente qualche trigger nel database selezionato, selezionando una tabella apparirà la voce triggers, e cliccando su Nuovo / New o sul nome di un trigger già esistente, sarà possibile inserire o modificare un trigger.

Nuovo trigger phpmyadmin

Sapere come utilizzare i triggers su mysql può tornare utile per creare degli automatismi che fanno da ulteriore blocco lato database sulle tabelle, in modo da garantire maggiormente l'integrità dei dati.

martedì 24 gennaio 2017

Come aprire un database MySQL con un client per Windows

Mysql è un relational database management system (RDBMS) gratuito open source molto famoso tra gli sviluppatori web.
Una tabella presente su un db mysql è possibile leggerla tramite un'interfaccia web come il famoso phpmyadmin, tuttavia, se volete avere un software installato sul vostro pc, che vi consenta di fare query, cancellare tabelle, modificare dati, ecc... ecco per voi un buon client mysql per windows.


Come aprire un database MySQL con un client per Windows


Per poter modificare un db mysql locale o presente su qualche server online, potete scaricare questo windows client mysql gratuito: MySQL Workbench.

Scaricate MySQL Workbench dal seguente sito internet, seguendo la procedura d'installazione:
https://dev.mysql.com/downloads/workbench/

Potrete scegliere tra la versione windows x86, 32bit o 64bit, con un comodo file MSI Installer (auto installante).

Se dovesse chiedervi se siete utenti registrati, per poter scaricare MySQL Workbench, ignorate pure la cosa e procedete con il download in forma anonima.

Una volta lanciato il setup, procedete i vari step, scegliendo la versione che preferite (es. client only).
Se poi dovesse chiedervi di installare una versione di python differente da quella che avete installato (a me ad esempio chiedeva la 3.4), non preoccupatevi, la potete trovare ed installare facilmente a questo link:
https://www.python.org/downloads/windows/

Come aprire un database MySQL con un client per Windows

Una volta terminata l'installazione, lanciate MySQL Workbench.

Il client vi riconoscerà subito eventuali db mysql installati in locale, come ad esempio quelli messi tramite wamp.
Ad ogni modo, per aggiungere una nuova connessione mysql, cliccare sull'icona del +.

Mysql connections

Nella schermata che si aprirà, inserire i seguenti campi:
  • Connection name: date un nome a questa connessione
  • Connection method: es. standard tcp/ip
  • Hostname: l'indirizzo ip della macchina mysql a cui collegarsi
  • Port: la porta utilizzata per la connessione (potete lasciare la 3306)
  • Username: l'utente con cui collegarsi al database
  • Password: password d'accesso, salvabile con apposita spunta per non doverla reinserire ogni volta
  • Default schema: il database di default a cui collegarsi quando si lancia questa connessione
Più eventuali opzioni ssl e advanced.
Quando avete finito di configurare la connessione a mysql, cliccate su Test connection.
Se riceverete un esito positivo dal test della connessione, cliccate su OK per salvare i dati inseriti.

Configura mysql client

Test connection

Adesso troverete la connessione appena creata come box grigio vicino alle altre, cliccare sul nome della connessione desiderata per collegarsi al mysql dal client windows.

Nel client mysql appena lanciato, troverete varie opzioni utili, come il server status (per capire se ci sono problemi sulla connesione al database), client connections (chi è connesso), users and privileges, e tanti altri.

Una volta collegati ad un database mysql, potrete vederne le tabelle (tables), le viste (views), le stored procedures e le funzioni (functions).
Potrete dunque eseguire query tramite interfaccia visuale (tasto destro sulla tabella desiderata, poi Select rows), oppure scrivere codice sql a mano, aprendo quanti tab sql vi pare.

MySQL Workbench client

Insomma MySQL Workbench è un client mysql per windows completo di tutto: drop, delete, update, select, ecc... che nulla ha da invidiare a client sql server a pagamento ben noti.
Buone query!

martedì 10 maggio 2016

Password persa mysql: come recuperarla

Hai perso la password di root di mysql ed ora non sai più come fare?
Password mysql persa? Nessun problema, è possibile resettare la password di mysql in modo da poter continuare ad usare il proprio database sql senza dover perdere per forza tutti i dati.
In questo post ti spiegherò come recuperare la di root password persa per un'installazione tipica di mysql, o come recuperare la password persa in un'installazione tramite easyphp.


Come recuperare la password di mysql


Se usi phpmyadmin e hai perso la password di accesso ed ora sei tagliato fuori dal database del tuo sito internet (che sia wordpress, joomla, php puro, ecc...), c'è un modo abbastanza semplice per resettare la password di root di mysql.

Ecco pochi semplici passaggi da seguire (per windows e linux):
  1. Prima di tutto, se attivo, stoppa il servizio di mysql.
    Puoi farlo tramite prompt dei comandi, entrando nella cartella dove è presente l'eseguibile e digitando il comando: mysqld stop (su linux dovrebbe essere: /etc/rc.d/mysqld stop), oppure su windows bloccandolo dai processi o dai servizi
  2. Ora che il servizio mysql è stoppato, apri una finestra di dos e digita il seguente comando per rilanciarlo nella modalità che ci consentirà di aggiornare la password di root:
    mysqld --skip-grant-tables &
  3. Avvia la console di mysql come root posizionandoti nel giusto db con questo comando:
    mysql -u root mysql
    Se usi windows ti servirà aprire un altro prompt di dos per eseguire questo comando
  4. Reimposta la password di mysql con questo comando:
    UPDATE user SET password=PASSWORD("TUA-NUOVA-PASSWORD-DI-ROOT") WHERE User='root';
    Dove ovviamente al posto di TUA-NUOVA-PASSWORD-DI-ROOT... chettelodicoaffare (cit.)
    Attenzione: se da mysql 5.7 in su, il campo password è stato rinominato in authentication_string, quindi la nuova sintassi è:
    UPDATE user SET authentication_string=PASSWORD("TUA-NUOVA-PASSWORD-DI-ROOT") WHERE User='root';
  5. Aggiorna i privilegi dei database con il comando FLUSH PRIVILEGES;
    Ed infine digita exit; per uscire dalla console mysql.
  6. Riavvia mysql con il comando mysqld restart (su linux: /etc/rc.d/mysqld restart) o tramite interfaccia grafica sotto windows

Così facendondo hai reimpostato la password di root di mysql e puoi dunque tornare ad accedere al tuo database dal quale eri rimasto tagliato fuori :p
Se invece ha installato mysql per windows tramite easyphp, leggi qui sotto...


Come recuperare la password mysql con easyphp per windows


La procedura per reimpostare la password di mysql con easyphp è identica a quella di sopra, quindi non la riscriverò completamente.
Quello che cambia è che il processo di mysql non si chiama mysqld ma eds-dbserver.exe.

Quindi, stoppare il processo eds-dbserver.exe dai processi attivi (punto 1 della procedura spiegata sopra).

Come recuperare password mysql

Poi (punto 2), apri una finestra di dos e digita il comando:
eds-dbserver.exe --skip-grant-tables

Segui i punti 3, 4 e 5 scritti sopra.
Con l'unica differenza che cambierà il percorso dei binari di mysql
Nel mio caso il percorso dei binari di mysql è:
cd C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-binaries\dbserver\mysql5710x160301111830\bin

Infine riavvia il servizio di mysql.
Se tramite interfaccia web di easyphp non te lo lascia fare, stronca il processo dai processi attivi di windows, o prova ad uscire dalla finestra dos dove avevi lanciato il servizio eds-dbserver.exe.

Va da se che a seconda delle versioni di easyphp potrebbero cambiare sia il percorso dei binari di mysql, sia il nome del processo. Ma con un minimo di ingegno sono sicuro che saprai trovare il giusto percorso e l'eventuale nuovo nome :)


PS
se usi phpmyadmin settato in maniera che si autentichi senza password (come di default è per easyphp), dopo aver cambiato la password potresti non poter più riuscire ad accedere, ricevendo il seguente messaggio:
"Messaggio di MySQL: Documentazione
#1045 - Access denied for user 'root'@'localhost' (using password: NO)
hpMyAdmin ha provato a connettersi al server MySQL, e il server ha rifiutato la connessione. Si dovrebbe controllare il nome dell'host, l'username e la password nel file di configurazione ed assicurarsi che corrispondano alle informazioni fornite dall'amministratore del server MySQL.
"

Quello che devi fare è dunque andare a modificare il file di configurazione di phpmyadmin, che dovrebbe chiamarsi config.inc.php.
Che potrai trovare ad esempio in un percorso di questo tipo:
C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-modules\phpmyadmin4531x160301111830

Cerca le seguenti righe:
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';

E modificale di conseguenza :)