paolo@bimodesign.com | +34 608 61 64 10

DB Relational (35 posts)

        

MySQL - schedule stored procedure + debug

This MySQL stored procedure checks and change the state of a record from 1 to 2 or 2 to 3 depending of some conditions. It will be schedule every minute and it calls a debug stored procedure. (read more...)

        

MySQL and Cron DB (Event Scheduler)

Beginnig of MySQL 5.1, it availables the event feature, that allow to schedule (like a Unix cron) task that you want to perform on your database. (read more...)

        

MySQL/PHP, manage multi languages

In order to manage a lot of different languages (as russian, arabic, chinese and all european languages) I decided to create an only table that will contain the translation of all the texts of my application. (read more...)

        

MySQL, how and when using the pivot table

The called pivot table is the SQL way to spinning data column in a row, and then read these data as it should be a typically table. Here (http://stackoverflow.com/a/9668036) you could find a perfect explanation of the steps to solve this issue.
In my post, I'll explain the particular case that I had to solve. (read more...)

        

MySQL, auto commit, set transaction and savepoint

Autocommit is "on" (=1) to default in MySQL, so every DML statement (Insert, Update, Delete) cannot be rollbacked. There two ways (more savepoint) to disable auto commit, only for InnoDB engine. because MyISAM doesn't support transaction. Implicit and explicit. Note: in case of DDL (like create table, indexes, alter table, etc) in any case isn't possible to rollback. (read more...)

        

MySQL - Usefull selects

This post resumes several of my sql statments that I have used during these years. In some cases I details more information about the use of them
The post is continuing update and it will be push on the top of mysql list, every time I'll add a new statment.
Note: Some old descriptions are in Italian language. (read more...)

        

MySQL, how to debug a trigger or procedure code

There are several ways to debug a MySQL code (triggers and procedures) and some of these are tools (free or not) that are so complete and efficient, as MySQL Debugger, dbForge or Toad Mysql, but if you need to develop a quick and simple debug, this is my suggestion. (read more...)

        

MySQL e l'InnoDB engine

In questo articolo illustro in maniera teorica, cos'e' l'InnoDB engine e come MySQL lo gestisce. Essendo appunti presi mentre studiavo per la certificazione MySQL DBA I, mi scuso in anticipo se incontrerete un misto di inglese ed italiano non proprio perfetto. :)
Gli argomenti saranno divisi in questi gruppi:

  • Data, Tablespace e log files
  • Transaction Model
  • Row Level locking
  • Isolation levels, Multi-versioning and concurrency
  • Foreign Key
  • Configuring InnoDB Buffers and Logs

Se correttamente impostati i parametri che vedremo in seguiro, l'InnoDB engine garantisce l'ACID compliance, ovvero Atomic, Consistency, Isolation, Durability e partendo da questa importante considerazione, iniziamo a scendere nei dettagli delle sue caratteristiche principali. (read more...)

        

MySQL e la replication

La replication identifica un meccanismo di trasferimento di dati tra due o piu' database, attraverso operazioni di lettura (dall'unico master) e di scrittura (su uno o piu' slave). E' un sistema asincrono perche' queste operazioni, master--slave, avvengono non in maniera simultanea, anche se i tempi sono brevissimi.
La replica sincrona e' identificabile invece con i cosidetti Cluster, di cui mi occupero' in un prossimo articolo.
L'obiettivo della replication e':
- disponibilita' del dato: in caso di problemi sul sever che ospita il Master possiamo rapidamente cambiare le connessioni sullo Slave
- backup anche frequenti sia con dump che da filesystem, senza caricare eccessivamente o fermare il servizio sul Master, perche' viene sfruttato lo Slave.
- bilanciamento del carico: avendo cura di effettuare le operazioni di scrittura esclusivamente sul Master, possiamo utilizzare anche lo Slave in lettura, dividendo cosi' il carico di lavoro sulle due macchine. (in realta', questo si realizza meglio usando i Cluster, dove, tra l'altro, e' possibile distribuire il carico, addirittura di singole select, su piu' instanze dello stesso db)
(read more...)

        

MySQL: Una alternativa al CONSTRAINT CHECK

Visto che, come indicato nel manuale The CHECK clause is parsed but ignored by all storage engines, non si puo' utilizzare il CONSTRAINT ...CHECK in MySQL. Nel caso in cui dobbiamo farne uso (in realta' sono pochi i casi in cui non si abbiano alternative al suo uso), possiamo utilizzare uno tra questi due metodi, dove il secondo e' pero' limitato alle versioni successive alla 5.5 (read more...)

        

MySQL - Prepare in una Procedure

In questo articolo illustro come sia possibile eseguire delle select che presentano dei parametri, attraverso delle Stored Procedure in MySql. Le select sono archivate nella base dati, ma potrebbero essere chiaramente presenti su file o in altre variabili.
Prima di leggere l'articolo, occorre aver gia' familiarizzato con le Stored Procedure in MySql e per questo vi consiglio una ottima lettura presente a questo link (e a quelli presenti nella pagina) Tutorial Storage Procedure (read more...)

        

MySQL - Gestione NULL nelle partition

Occorre fare particolare attenzione quando si creano partizioni su campi che si prevede possano contenere valore nulli. Prendendo spunto da questo link della documentazione ufficiale, nel quale potete trovare i relativi esempi, riporto lo schema relativo ai 4 tipi di partizioni consentiti in MySQL
(read more...)

        

MySQL e la cardinalita'

La cardinalita' misura quante unique rows ci sono in un index
E' valutata su valori statistici interi, e quindi non necessariamente esatti, sopratutto nel caso di piccole tabelle.
Un valore di cardinalita' alto, indica migliori performance in lettura, perche' ha meno records da leggere, e quindi piu' possibilita' che MySQL usi l'indice quando esegue JOINS (read more...)

        

MySQL e l'EXPLAIN PLAN

MySQL offre diversi strumenti per mostrare come una query verra' eseguita e come puo' essere ottimizzata. Utilizzando queste informazioni possiamo modificare la query, definire un nuovo indice, o modificare lo schema per migliorare le prestazioni.
L'istruzione EXPLAIN PLAN, che ricordo e' uno strumento che fornisce dati approssivamativi, restituisce le informazioni su tutti gli step che verranno eseguiti, ma senza eseguire la select stessa, con alcune eccezioni. Nel caso infatti di subquery, MySQL ha bisogno di appoggiare i dati su una o piu' tabelle temporanee prima di analizzare la query completa e questo, come potete immaginare, nel caso di query complesse e che agiscono su grosse mole di dati, comporta un considerevole uso di risorse al momento di eseguire un Explain Plan. (read more...)

        

MySQL - Lista comandi utili

In questo articolo illustro una lista di comandi MySql utili, da eseguire da linea di comando di Unix, che avro' cura di aggiornare, quando avro' esigenza di usarne di nuovi
Per una lista più completa, potete fare riferimento anche a questo link oltre che chiaramente al sito web di MySQL. (read more...)

        

MySQL - Subpartition

Con questo terzo articolo la panoramica sul partizionamento in MySQL e' quasi completa, considerando altre modalita' di partizionamento, come quello per colonna, presente dalla versione 5.5 di MySQL che per il momento non trattero' nei dettagli, perche' credo sufficiente la conoscenza dei concetti di base delle metodologie per partizionare i dati qui, ed in precedenza, illustrate. (read more...)

        

MySQL e la ricerca FullText

In questo articolo illustero' come MySql rende piu' semplice la gestione di un motore di ricerca, utilizzando gli indici FULLTEXT e le ricerche booleane ordinate per range di importanza. Per rendere la lettura piu' snella e chiara, l'articolo e' suddiviso in punti principali, i quali comprendono tutte le caratteristiche di questa metodologia, lasciando alla vostra curiosita' lo studio dell'algoritmo per il calcolo del range, per il quale indico solo il link alla documentazione ufficiale. (read more...)

        

MySQL: Consigli sull'utilizzo degli indici

In questo articolo descrivero', in linee generali, come MySql gestisce gli indici, indicando come e quando crearli per sfruttarli al meglio. (read more...)

        

Installazione Oracle 11 su RedHat

In questo articolo vi illustro come ho risolto alcuni dei problemi riscontrati durante l'installazione della base dati Oracle 11 su server Linux RedHat. Non è da considerarsi una guida completa, ma una lista di indicazioni che posso tornare utili, nel caso la configurazione del vostro server, presenti le stessi contrattempi. (read more...)

        

MySQL - Partitioning (II parte)

Nella seconda trattero' nel dettaglio i vari tipi di partizionamento, illustrando le caratteristiche principali e i vantaggi nell'uso di uno rispetto all'altro.

La lettura di questa sezione, prescinde dall'aver letto la parte I di questo articolo, che trovate nella sezione MySql. (read more...)

        

MySQL - Partitioning (I parte)

Dalla versione 5.1, Mysql prevede, oltre a numerose novita', anche quella del partizionamento di indici e tabelle. Supporta cinque metodi di partizionamento orizzontale dei dati: range, hash, key, list e composite (sub-partizionamento).

Il partizionamento dei dati di indici e tabelle permette di ottenere tempi inferiori di risposta alle query, in quanto vengono analizzati soltanto i dati relativi alle partizioni pertinenti anziché le tabelle e gli indici nella loro totalità. Il partizionamento, inoltre, rende più semplici e veloci le operazioni di archiviazione e altre attività di manutenzione.

Di seguito vi illustro come implementare tale funzionalita', facendo riferimento alla documentazione ufficiale visualizzabile qui:

http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

e al forum di discussione

http://forums.mysql.com/list.php?106 (read more...)

        

MySQL - Tipi dati e loro caratteristiche (storage, range, ...)

In questo articolo, farò una breve panoramica sui tipi di dati presenti in MySql e su alcune loro caratteristiche, come lo storage, il range, etc...
Approfondisco in particolare alcuni tipi di dato, riferiti a questi gruppi NUMERIC, STRING e TEMPORAL, rimandando l'approfondimento completo di tutti gli altri, al manuale on-line (read more...)

        

Comandi utili Oracle per creare ed importare un DB

In questo articolo illustro alcuni comandi Oracle utili, per effettuare una creazione ed un import di dati su un database Oracle, per la versione 10 (dovrebbero comunque essere valide anche per le altre versioni). Le istruzioni sono state eseguito in ambiente DOS. (read more...)

        

MySQL - Select annidata

Un esempio per visualizzare una struttura ad albero, con padri e figli annidati, su piu' livelli. (read more...)

        

MySql - Rename tabelle e campi to lower

Vi illustro due istruzioni per rinominare tutte le tabelle di uno schema e nomi dei campi da maiuscolo a minuscolo. Ho avuto la necessita' di eseguire questo cambio, dopo la migrazione da Oracle a MySql. (read more...)

        

Convertire formato data da Oracle a MySql

Per la migrazione da Oracle a MySql, le date, che sono in formato differente, occorre convertirle prima di eseguire l'insert nella relativa tabella.
Ho creato questa semplice funzione to_timestamp, che esiste gia' in Oracle, ma non in MySq (read more...)

        

MySQL e UTC date

Per convertire una data ad un qualsiasi fuso orario, MySql mette a disposizione la funzione CONVERT_TZ (Link al manuale ufficiale )

Pero', prima di utilizzarla c'e' bisogno di alcuni accorgimenti... (read more...)

        

MySQL - Confronto di schemi e tabelle di due db

Esistono vari modi di effettuare il confronto tra due schemi, e molti di questi fanno riferimento a dei prodotti software, come ad esempio il Toad, SQLyog o DbForge.
QUi vi voglio invece illustrare due metodi, che sono carenti della parte grafica, ma che possono essere utilizzati a prescindere dal software e dall'ambiente sul quale si lavora (ad esempio, Toad non e' previsto per sistemi Ubuntu) (read more...)

        

MySQL - Usare regexp all'interno delle query

Mysql permette di usare le espressioni regolari, tipiche del linguaggio PHP, all'interno delle query.
Vediamo come (read more...)

        

Una stored procedure Mysql di esempio

Nel seguente articolo vi illustro la sintassi di una procedura per il caricamento dei dati in una tabella.
La procedura, che occorre chiamare nel seguente modo

CALL LOAD_DATA_PRUEBA (100000, 34118, 18794, 6, '2010-01-01');

Di seguito i dettagli di come costruire una semplice procedura in MySql (read more...)

        

Differenze tra Oracle e MySql (parte II)

In questo articolo vi descrivo le differenze tra Oracle e MySql, per quel che riguarda la gestione delle date, delle conversioni e di altre funzioni.

Il capitolo introduttivo, lo trovate qui

Ricordo inoltre che nella guida ufficiale di Oracle, che ricordo ha recentemente acquisito Sun Solaris e quindi anche MySql, trovate tutti i riferimenti (read more...)

        

Differenze tra Oracle e MySql (parte I)

MySQL e' il piu' diffuso tra i DBMS relazionali Open Source, Oracle e' invece il piu' diffuso tra gli RDBMS commerciali. Non e' cosi' improbabile quindi che capiti di passare dall'uno all'altro. Quello che segue e' un resoconto, non completo, delle differenze principali tra i due database.

Sto preparando un altro articolo sulle differenze nella gestione delle date e delle stringhe.

Ritengo di fondamente importanza indicare la versione di entrambi, con il quale e' stato preparato questo prospetto. La versione di Oracle versione 10g R2 (10.2.1.0) e e la 5.0 di MySQL (5.0.24), dove in quest'ultimo caso e' preferibile utilizzare l'Engine InnoDB per avere un comportamente simile ad Oracle.

Non verranno trattate le differenze sull’architettura, l’installazione, il tuning, le prestazione, le replicación e i programmi di supporto in quanto le mie attuali conoscenze non mi permettono di appronfondirle in questo articolo.

Una valida guida, da cui ho preso spunto per questo mio articolo, la trovate in questo link (in italiano)

http://www.xenialab.it/meo/web/white/oracle/oramy.htm

Mentre nella guida ufficiale di Oracle, che ricordo ha recentemente acquisito Sun Solaris e quindi anche MySql, trovate tutti i riferimenti

http://download.oracle.com/docs/cd/E12151_01/doc.150/e12155/oracle_mysql_compared.htm (read more...)

        

Struttura di una procedura Pl/sql

In questo post di introduzione al linguaggio Pl/Sql di Oracle, vi illustro la struttura di una procedura, dalla quale prendere spunto per sviluppare i vostri applicativi.

E' di esempio e quindi potrebbero mancare o essere superflui alcuni passaggi. (read more...)

        

Creare una relazione tra tabelle

Spesso e' necessario creare relazioni tra insiemi tra loro differenti e questo si traduce tecnicamente in creare delle FOREIGN KEY tra due o piu' tabelle.

Tralascio la spiegazione di una relazione semplice, come ad esempio quella tra una tabella di anagrafica e la sua tipologia, illustrando invece il caso in cui e' necessario inserire una terza tabella per mettere in relazione due entita'/anagrafiche. (read more...)

        

MySQL Ricerca full-text

Cos'e' e perche' si usa la ricerca Full-Text. Vi illustro nei dettagli i vantaggi e come si usa. (read more...)