rss
twitter
  •  

5 Funzioni utili per gestire le stringhe in MySQL

| Posted in MySQL |

0

Condividi

logo mysql 5 Funzioni utili per gestire le stringhe in MySQL

La gestione delle stringhe è sempre una delle attività di maggior impatto e interesse in tutti i linguaggi. Anche il database non è esente da questo ed è per tale motivo che vi propongo in dettaglio alcune tra le più importanti funzioni per gestire e manipolare stringhe in MySQL.

Upper() e Lower()

Si tratta di semplici funzioni che restituiscono una stringa tutta in minuscolo (lower) o in maiuscolo (upper) a seconda delle esigenze. Potete utilizzarle tranquillamente in una select passando alla funzione un parametro :

I triggers in MYSQL : Introduzione ed esempi

| Posted in MySQL |

0

Logo-mysql

I triggers sono uno di quegli argomenti di cui si sente spesso parlare, ma difficilmente si approfondisce come si deve. In questo post, che non vuol essere un tutorial MySql sui triggers, volevo solo affrontare il tema in modo più completo e dettagliato per non far restare tale parola avvolta solo da un alone di mistero.

Tanto per citare, invece, un tutorial coi fiocchi sull’argomento :

However, as applications grow more and more complicated, the further we can abstract the layers of an application to handle what they should, the greater our internal development usability becomes

Questo non significa che occorre utilizzare e sfruttare un trigger solo in applicazioni con una enorme mole di dati, ma, va da se, i vantaggi sono tanto più evidenti quanto più grande è il database di progetto su cui applichiamo i triggers. Sempre che convenga..

In sostanza, i trigger sono semplici oggetti associati a tabelle che vengono attivati nel momento in cui un determinato evento si verifica relativamente a quella tabella. Essi consentono di applicare un controllo sull’integrità dei dati inseriti cioè di verificare se questi ultimi sono corretti e se vanno, eventualmente, modificati.

Relativamente a MySQL, si parla di trigger dalla versione MySQL 5.0.2

La definizione di un trigger deve essere stabilita dopo aver deciso a quale evento deve essere associato (inserimento di righe, modifiche o cancellazioni) e se deve essere eseguito prima o dopo tale evento.

Ecco i possibili tipi di trigger:

  • BEFORE INSERT
  • BEFORE UPDATE
  • BEFORE DELETE
  • AFTER INSERT
  • AFTER UPDATE
  • AFTER DELETE

Vediamo, in dettaglio, la sintassi di base di un trigger tenendo presente che, anche se un trigger è associato ad una tabella, facendo parte di un database,il suo nome deve essere univoco all’interno del db stesso.

CREATE TRIGGER nome_del_trigger
{ BEFORE | AFTER }
{ INSERT | UPDATE | DELETE }
ON nome_della_tabella
FOR EACH ROW
codice_SQL_da_applicare_con_il_trigger

La prima linea indica il nome del trigger che stiamo creando. Tale nome, così come per le tabelle o database, deve essere lungo al massimo 64 caratteri.

La seconda linea determina il tempo di esecuzione del trigger. Come detto, infatti, esso può agire prima dell’esecuzione vera e propria della query oppure dopo. In seguito capiremo cosa questo comporta.

La terza linea introduce il tipo di query SQL che genererà l’esecuzione del trigger. Attenzione perchè sono ammesse solo query esecutive (INSERT, UPDATE,DELETE) e non SELECT. Altra cosa importante da sottolineare è che la INSERT non rappresenta soltanto le query classica, ma tutte le query che prevedono l’inserimento dati come LOAD DATA o REPLACE in caso di un record nuovo.

La quarta linea specifica la tabella su cui attivare il trigger. È possibile avere un solo trigger attivo per lo stesso tipo di query sulla stessa tabella.

La quinta linea illustra l’individualità del trigger che si applica ad ogni riga singolarmente e non a tutta la tabella nel suo insieme. Per fare un esempio, una DELETE di massa sulla tabella, attiva e avvia tanti trigger quante sono le righe interessate.

La sesta linea infine rappresenta il codice SQL da eseguire all’attivazione dell’evento. Il codice SQL che possiamo utilizzare, normalmente, effettua una serie di controlli di flusso.

Prima di vedere un esempio su come utilizzare i trigger bisogna specificare una cosa. Poiché le istruzioni all’interno dello statement devono terminare con il famoso punto e virgola, esso non può essere sfruttato per indicare la terminazione di un trigger.

A tale scopo, viene definito // come terminazione quindi, prima della dichiarazione dei trigger bisogna definire il delimitatore con il seguente codice:

DELIMITER //

Ed ora, per completare il discorso, vediamo un esempio. Tra le tante modalità di applicazione, una delle più sfruttate è data dal controllo della correttezza dei valori inseriti nel database.

Pensiamo, ad esempio, al caso in cui abbiamo un campo i cui valori possono oscillare tra un massimo e un minimo (0-100). Il controllo potrebbe certamente esser fatto a posteriori tramite una query di UPDATE che aggiorni i vari record che presentano eventuali errori, ma anche sfruttando un trigger che agisca prima di una insert o di un update :

DELIMITER //

CREATE TRIGGER prodotti_insert_controllo
BEFORE INSERT ON prodotti
FOR EACH ROW
BEGIN
IF NEW.prezzo < 0 THEN
SET NEW.prezzo = 0;
END IF;
IF NEW.prezzo > 1000 THEN
SET NEW.prezzo = 1000;
END IF;
END; //

CREATE TRIGGER prodotti_update_controllo
BEFORE UPDATE ON prodotti
FOR EACH ROW
BEGIN
IF NEW.prezzo < 0 THEN
SET NEW.prezzo = 0;
IF NEW.prezzo > 1000 THEN
SET NEW.prezzo = 1000;
END; //

DELIMITER;

Come vedete, invece di preoccuparci a posteriori di intervenire sui valori fuori range, meglio prevenire con un trigger dedicato. Pensate, infatti, a dover controllare la correttezza di oltre 10000 records piuttosto che a prevenire ed avere una correttezza già garantita.

Conclusioni

Utilizzare i triggers per risolvere problemi all’interno di un database è davvero molto comodo, ma aggiungendo un carico di lavoro, dobbiamo capirne vantaggi reali prima di utilizzarli.

Infatti, a volte possiamo anche farne a meno optando per soluzioni diverse (jobs per schedulare azioni ricorsive, stored procedure per gestire operazioni ecc). Inoltre è fondamentale avere a mente il numero di righe che saranno coinvolte dall’azione del trigger,poichè fin tanto che si lavora con tabelle con poche centinaia di righe potrebbero esser utili senza sconvolgere le prestazioni del sistema, ma su database con milioni di righe, urge analisi approfondita prima di creare triggers!

Find e Replace in file di testo da linea di comando

| Posted in Database, MySQL |

0

Condividi

find-replace

Tutto è nato quando un mio collega mi ha chiesto aiuto. Aveva un file bello corposo (un export di un database intero) da aprire e modificare.

MySQL Format date : formattare le date MySQL in modo facile

| Posted in MySQL, ServiziWeb |

0

Condividi

mysqlformatdate thumb MySQL Format date : formattare le date MySQL in modo facile

Siccome,nel lavorare con le date, l’operazione statisticamente più comune è quella di estrarre alcuni valori dal database e presentarli in modo che siano facilmente interpretabili, MySQL mette a disposizione la funzione DATE_FORMAT() per risolvere il problema in maniera semplice ed elegante evitando inutili acrobazie (magari tramite PHP).

Come cambiare la password di admin su Wordpress via query SQL

| Posted in MySQL, Wordpress |

1

Condividi

Se avete perso o dimenticato la password di administrator sul vostro Wordpress, eccovi un trucchetto veloce tramite sql per risolvere il problema se neuroni e sinapsi non vi autano.

Si tratta di un semplice update da lanciare con una query SQL o tramite linea di comando o, meglio, sfruttando un Database Manager Web come phpMyAdmin.

Ecco la query :

UPDATE wp_users SET user_pass = MD5( 'new-password' ) WHERE user_login = 'admin-username';

Come intuite, si tratta semplicemente di sostituire a new-password e admin-username i valori corretti.

8 consigli e trucchi sql per ottimizzare e rendere performante un Database

| Posted in Database, MySQL, Senza categoria |

3

Condividi

Nella maggior parte di siti e blog, costruiti o meno su un CMS, i contenuti sono memorizzati in un database. Tutte le richieste-utente, pertanto, coinvolgono un DB che dovrà essere il più performante possibile al fine di velocizzare i tempi di risposta e fornire le informazioni richieste nel modo più veloce possibile.

Ci sono, senza dubbio, alcune accortezze e alcune modalità specifiche da mettere in pratica per realizzare quanto detto. Inoltre, sono diversi gli errori che si commettono sia nella progettazione del database e sia nelle varie interrogazioni fatte al db stesso tramite query.

In questo articolo volevo evidenziare alcune possibili strade da percorrere per realizzare un database performante con cui interagire in modo ottimale.

Progettazione

Si tratta del primo passo a tutti gli effetti : la progettazione e realizzazione del database. Questo caso non coinvolge applicazioni e siti che si appoggiano ad una piattaforma (come Wordpress, ad esempio) dove tutto il db è già costruito e strutturato.

Ma per tutti gli altri casi in cui occorre progettare da zero la struttura dati, vi sono regole ben precise da seguire e, soprattutto errori evidenti e deleteri da non commettere.

A tal riguardo, vi consiglio di leggere questo articolo che riguarda proprio come approcciare il design di un database.

Conoscere in dettaglio la Query

Per ottimizzare una specifica query, è fondamentale sapere in dettaglio cosa ci restituirà quella query al fine di discernere il superfluo dall’utile.

Utilizzando lo statement EXPLAIN otterrete molte utili informazioni sulla query eseguita. Ecco un esempio di codice sql :

EXPLAIN SELECT * FROM ref_table,other_table WHERE  ref_table.key_column=other_table.column;

Per maggiori info su come utilizzare Explain, leggete la guida ufficiale mysql al riguardo.

Query e Cache

Come sapete, ogni richiesta effettuata al db per ottenere dati si risolve in una richiesta di risorse al server che lo ospita. Questo significa che un sistema di cache queries, laddove possibile, porta effettivamente vantaggi in termini di prestazione. Vediamo tre possibili scelte :

  • AdoDB : sta per Active Data Objects DataBase ed è una libreria che fornisce un’unica API per interfacciarsi ad uno dei DBMS supportati (MySQL, PostgreSQL, Interbase, Firebird, Informix, Oracle, MS SQL, Foxpro, Access, ADO, Sybase, FrontBase, DB2, SAP DB, SQLite, Netezza, LDAP. AdoDB fornisce, tra le altre cose, anche un potente caching system.
  • Memcached : Memcached annovera un sistema di caching utilizzato laddove si interagisce con database molto carichi di dati per alleggerirne il compito
  • CSQL Cache : è una infrastruttura open-source di data caching. Da quello che si legge al riguardo, sembra davvero molto affidabile.

Select Mirate

Si tratta, in pratica, di un errore comune, ma facilmente risolvibile. Una select del tipo :

SELECT * FROM wp_posts;

effettuata su una tabella wordpress (quella dei post, si capisce) ha senso solo se davvero vi occorrono tutti i dati di quella tabella. Ma se così non fosse, occorre filtrare a monte evitando di sprecare risorse inutili :

SELECT title, excerpt, author FROM wp_posts;

Questa potrebbe essere la select corretta qualora vi occorressero titolo,excerpt e autore dei post.

Usare LIMIT

Spesso, quello di cui abbiamo bisogno sono solo un numero limitato di records prelevati dal nostro database. Mi vengono in mente tutte quelle situazioni su Wordpress in cui, ad esempio, vogliamo solo mostrare ad esempio 10 post per pagina e simili. In tal caso, quindi, non ha senso estrarre tutti i record, ma utilizzando il parametro LIMIT possiamo selezionare solo il numero di records desiderato :

SELECT title, excerpt, author FROM wp_posts LIMIT 10;

Usare JOIN al posto delle sottoqueries

Troppo spesso si nota un abuso,da parte di alcuni programmatori, di subqueries. Potendo, l’ideale sarebbe non andarsi a complicare la vita con questo metodo, ma ricorrere al JOIN con cui ottenere, in modo più pulito, gli stessi identici risultati :

SELECT a.id,
    (SELECT MAX(created)
    FROM posts
    WHERE author_id = a.id)
AS latest_post FROM authors a

Questa select, sfruttado il JOIN, diventerebbe :

SELECT a.id, MAX(p.created) AS latest_post
FROM authors a
INNER JOIN  posts p
ON (a.id = p.author_id)
GROUP BY a.id

Usare UNION al posto di OR

Lo statement UNION consente di combinare il result sets di 2 o più select queries. A differenza dell’OR, permette esecuzioni nettamente più veloci.

SELECT * FROM a, b WHERE a.p = b.q or a.x = b.y;

diventa semplicemente :

SELECT * FROM a, b WHERE a.p = b.q
UNION
SELECT * FROM a, b WHERE a.x =  b.y

Usare Indici

Gli indici di un database sono simili a quelli di una libreria perché consentono di trovare le informazioni richieste in modo più rapido e, quindi, più performante.
Un indice può esser creato per una singola colonna o su più colonne in una tabella. Eccovi un esempio banale in cui si crea l’indice idModello sulla colonna Modello della Tabella Prodotto.

CREATE INDEX idModello ON Prodotto (Modello);

Fonte : Catswhocode

AeroSQL : ottimo manager MySQL Web Based

| Posted in MySQL, Software |

0

Condividi

AeroSQL è un’applicazione opensource per la gestione di database MySQL. Consente di controllare e gestire simultaneamente database su diversi servers  il tutto grazie ad una singola interfaccia stile desktop molto intuitiva e semplice.

I vari record possono essere consultati o editati in un a griglia classica. Possibile lanciare ed eseguire anche in batch le queries sql per risparmiare tempo.

Il tool è costruito in PHP e richiede l’installazione delle librerie ExtJS per la funzionalità stile desktop.

Eccovi un video-presentazione molto interessante sullo strumento :

Client MySQL : 4 ottime alternative a phpMyAdmin per gestire il vostro database

| Posted in MySQL, Software |

4

E’ indiscutibile il fatto che phpMyAdmin sia il client MySQL più utilizzato e famoso nel mondo dagli sviluppatori per tutta una serie di motivi. Su tutti, di sicuro, il fatto che sia un client davvero user-friendly e, quindi, a portata di tutti.
Ma non è il solo. Ed ecco, allora, 4 ottime e altrettanto valide alternative da non sottovalutare e da considerare qualora vogliate provare un nuovo client.
La breve descrizione che accompagna ogni client vi dovrebbe indirizzare nella scelta.
Tool Navicat MySQL Client Client MySQL : 4 ottime alternative a phpMyAdmin per gestire il vostro database
Strumento che permette di amministrare e sviluppare database MySQL in modo davvero molto simile al phpMyAdmin. Interfaccia snella e pratica. Tra le principali caratteristiche del programma:
  • supporto connessioni multiple;
  • utilizzo connessioni SSL;
  • gestione privilegi utente;
  • backup e restore dei DB;
  • trasferimento dati;
  • supporto Unicode;
  • importazione ed esportazione dei dati;
  • sincronizzazione dati e strutture.
sequel pro Client MySQL : 4 ottime alternative a phpMyAdmin per gestire il vostro database
Per utenti Mac, credo sia la migliore applicazione per gestire database MySQL. Funziona sia in locale che in rete, permette di impostare anche tunnel ssh con cui collegarsi. È molto stabile e, in con una interfaccia grafica molto accattivante consente di gestire la struttura delle tabelle e del database. Inoltre, l’editor delle query consente l’auto completamento in modo da non perdere tempo e rischiare banali errori.

SQL Wave

sqlwave Client MySQL : 4 ottime alternative a phpMyAdmin per gestire il vostro database
SQLWave è un tool molto potente del GUI di MySQL che serve ad automatizzare e facilitare il processo di sviluppo della base di dati.
Alcune caratteristiche fondamentali:
  • completamente MySQL 5.x-6.x compliant;
  • interfaccia intuitiva del GUI;
  • recupero molto veloce dei dati;
  • gestione di proprietà avanzate della tabella;
  • supporta i multilingua;
  • importazione ed esportazione dei dati;
dbdesigner4 Client MySQL : 4 ottime alternative a phpMyAdmin per gestire il vostro database
DBDesigner 4 è un sistema di disegno visivo della base di dati che integra il disegno di base di dati, la modellistica, la creazione e la manutenzione in un singolo, ambiente senza giunte.
Mette a disposizione sia funzionalità professionali, sia un’interfaccia di utente semplice e comoda che consente una gestione davvero pratica. DBDesigner è un progetto assolutamente Open Source disponibile per piattaforme Microsoft Windows 2k/XP, Linux KDE / Gnome.