Articoli, news e pillole sul mondo LAMP e l'opensource. Pillole di C#
Archivio di March 2006
Query di INSERT in MySQL Server (SQL)
31 Mar
Prima di partire per un giro nella “tranquilla”
Parigi scrivo breve articolo per spiegare diverse modalità con cui scrivere query di INSERT in mysql e in generale con il linguaggio SQL.
Per inserire i dati in mysql abbiamo sostanzialmente tre possibili differenti sintassi in
INSERT.
Di seguito vi allego la sintassi come da manuale:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},…),(…),…
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
Or:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name
SET col_name={expr | DEFAULT}, …
[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
Or:
INSERT [LOW_PRIORITY | DELAYED] [IGNORE]
[INTO] tbl_name [(col_name,...)]
SELECT …
Semplificando quanto fornito dal manuale di mysql vediamo insieme il funzionamento
di INSERT con degli esempi pratici che andrete ad eseguire sul nostro progettino:
Prendiamo per esempio una tabella con campi:
IDfornitore (PK) auto incrementale
fornitore varchar (200)
INSERT INTO fornitore VALUES (”, ‘Eforhum.it’);
Attenzione: in mysql 5 usare la seguente sintassi:
INSERT INTO fornitore VALUES (NULL, ‘Eforhum.it’);
Questo perchè mysql 5 non accetta più valori per la chiave primaria autoincrement numerica passati come ” dove si intende valore presente ma blank, vuole assolutamente NULL, ovvero valore NON presente.
Sostanzialmente utilizzando questa sintassi possiamo dire che la query “passa†alla
tabella “fornitore†i valori da inserire in ordine di campo.
Il vantaggi di usare questa sintassi di INSERT sono:
VANTAGGI:
1. Velocità di esecuzione
2. SQL molto scarno e rapido da scrivere
SVANTAGGI:
1. Bisogna conoscere molto bene i campi della tabella e l’ordine in cui sono messi
2. In caso di modifiche al DB bisogna sistemare subito le query
3. Lettura della query abbastanza difficile
INSERT INTO fornitore (IDfornitore, fornitore) VALUES (”, ‘Eforhum.it’);
Come possiamo notare che l’unica cosa che cambia è la definizione dell’ordine dei
campi in cui mysql inserirà i valori.
VANTAGGI:
1. Buona velocità di esecuzione delle query
2. In caso di modifiche al DB (anche se è fondamentale aggiornare le query) non si
rischia di incorrere in inserimenti errati. Stesso discorso vale per l’ordine dei campi
che se cambia non inficia sulla validità della query.
SVANTAGGI:
1. Non di facile lettura
INSERT INTO fornitore SET fornitore = ‘eforhum.it’;
Con questa sintassi possiamo notare che vengono associati campo = valore
VANTAGGI:
1. Se viene cambiato il DB o l’ordine dei campi le query non portano ad errori di
inserimento (a meno che non si siano eliminate delle colonne)
2. Facilità di lettura SQL di INSERT
SVANTAGGI:
1. SQL forse un pà ridondante
Approfondite le varie sintassi possiamo facilmente dedurre che la soluzione migliore è
di utilizzare l’SQL di INSERT che prevete il setting di campi = valore, questo sia per
facilità di lettura che per leggibilità dell’SQL.
Infatti se immaginiamo una tabella di 30/40 campi le prime due opzioni non
garantiscono una facile lettura per l’individuazione di eventuali errori.
Ciao a tutti, Maxgrante
info[AT]massimo-caselli[DOT]com
Ubuntu: Attivazione repository universe
27 Mar
Buongiorno a tutti,
pubblico articolo scritto a suo tempo per Openskills sull’attivazione dei repository universe con Ubuntu.
Per poter sfruttare appieno il fantastico sistema di update e installazione pacchetti che è apt-get su Ubuntu bisogna attivare i repository “universe” che risultano essere di default commentati.
Di seguito un esempio del file dei repository /etc/apt/sources.list e descrizione delle righe da decommentare:
deb cdrom:[Ubuntu 5.04 _Hoary Hedgehog_ - Preview i386 Binary-1 (20050310)]/ hoary main restricted
deb http://it.archive.ubuntu.com/ubuntu hoary main restricted
deb-src http://it.archive.ubuntu.com/ubuntu hoary main restricted
## Uncomment the following two lines to fetch major bug fix updates produced
## after the final release of the distribution.
# deb http://it.archive.ubuntu.com/ubuntu hoary-updates main restricted
# deb-src http://it.archive.ubuntu.com/ubuntu hoary-updates main restricted
## Uncomment the following two lines to add software from the ‘universe’
## repository.
## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## universe WILL NOT receive any review or updates from the Ubuntu security
## team.
#deb http://it.archive.ubuntu.com/ubuntu hoary universe
#deb-src http://it.archive.ubuntu.com/ubuntu hoary universe
#deb http://security.ubuntu.com/ubuntu hoary-security main restricted
#deb-src http://security.ubuntu.com/ubuntu hoary-security main restricted
#deb http://security.ubuntu.com/ubuntu hoary-security universe
#deb-src http://security.ubuntu.com/ubuntu hoary-security universe
Bisogna scommentare quindi tutte le righe al di sotto della nota scritta dal team di Ubuntu.
Come possiamo notare Ubuntu per motivi di copyright non supporta direttamente i pacchetti presenti nel repository universe, ad ogni modo l’aggiornamento degli stessi è comunque sempre ampiamente garantito dalla comunità .
Nota: per installazione di tipo server, soprattutto per servizi pubblici è consigliabile utilizzare solo i repository ufficiali.
Ora con il vostro fido apt-get potete installare una grande quantità di pacchetti.
Articolo originale scritto sempre da me su:
http://openskills.info/infobox.php?ID=1255
Ciao. Maxgrante
info[AT]massimo-caselli[dot]com
Concetto di Chiave Primaria
19 Mar
Scrivo un breve articolo per utenti non esperti per chiarire il concetto di chiave primaria.
Una relazione, prendiamo ad esempio 1:n, si realizza quando la chiave primaria della tabella1 è riportata come chiave esterna nella tabella2.
Per ogni unica chiave primaria possono corrispondere infiniti riferimenti ad essa nella tabella2, come chiave esterna.
Approfondiamo quindi il concetto di chiave primaria:
Lo scopo di una chiave primaria è quello di individuare con la massima rapidità possibile un dato record all’interno di una tabella in modo univoco.
Ad esempio per trovare il record numero 484892 all’interno di una tabella da milioni di record.
Tale operazione avviene di fatto ogni volta che bisogna andare a recuperare i dati presenti in un’altra tabella, attività che su un database relazionale viene utilizzata molto frequentemente.
Una chiave primaria sulla maggior parte dei DBMS puà essere impostata come numerico, numerico auto incrementale, testuale, su più campi di vari formati etc…
Il fatto importante è che la chiave primaria di una tabella rispetti le seguenti affermazioni:
La chiave primaria DEVE essere univoca all’interno della tabella, infatti non è possibile che due record abbiano la stessa chiave primaria.
La chiave primaria deve avere come requisito (non obbligatorio ma di buon senso) la compattezza:
1.Essendo fondamentale per mantenere un indice primario, con lo scopo di velocizzare la ricerca.
Maggiore è la compattezza del campo che descrive la chiave primaria della tabella e più efficace sarà la gestione di questo indice.
Se ne evince chiaramente che una chiave primaria intera (numerica) è tendenzialmente meglio ottimizzata rispetto ad un campo stringa a lunghezza variabile.
2.Essendo il contenuto della chiave primaria utilizzato in qualità di chiave esterna in altre tabelle è chiaro che se la chiave primaria non è compatta cià comporta uno spreco di spazio occupato dal database.
La chiave primaria nei principali DBMS viene utilizzata di solito come dato numerico e con la proprietà di essere automaticamente incrementato dal database all’inserimento di ogni nuovo record.
In questo modo lo sviluppatore e l’utente non devono preoccuparsi di gestire la chiave primaria e quindi di dover preoccuparsi che essa non sia già presente.
Rischio di duplicati
Un facile esempio in cui una chiave primaria numerica autoincrementale puà comportare la creazione di duplicati è data per esempio dall’anagrafica di una società .
Infatti se l’amministrazione non è attenta a verificare che una data azienda è già presente a database il rischio è di ritrovarsi 8 Telecom, 5 Enel etc…
Questa situazione è molto pericolosa sia perchè comporta uno spreco di dati e ridondanza di informazioni e sia perchè rende poco consistenti e validi i dati nel caso ad esempio di reportistiche e statistiche, questo perchè la stessa società verrebbe (giustamente) trattata dal database come differenti aziende.
Saluti, Maxgrante
info[AT]massimo-caselli[DOT]com
Seminario gratuito: Linux Administrator, presente e futuro
10 Mar
Ciao a tutti,
Coresis nella persona di Alessandro Franceschi organizza seminario gratuito in data [CORREZIONE] 25 Marzo 2006 presso la sede di Eforhum di Milano.
Per maggiori informazioni e iscrizioni:
http://www.coresis.com/training/eventi-seminariolad.php
Ciao a tutti, Maxgrante
info[AT]massimo-caselli[DOT]com
Esportazione da PHP in formato Excel
6 Mar
Ciao a tutti,
oggi vediamo come creare facilmente un foglio excel / calc di Openoffice mediante l’utilizzo di php.
Per farlo senza alcuna difficolta sfruttiamo la capacità di Excel di leggere file HTML.
In sostanza tutto quello che dobbiamo fare è creare una semplice tabella HTML di 2 righe e quante colonne ci servono, la prima indica il contenuto del campo, la seconda riga la usiamo per farla ciclare con i dati estratti da php.
Una volta ottenuta in HTML la tabella con i dati desiderati basta semplicemente anteporre al nostro script le seguenti righe PHP:
< ?php
$nomefile=$_GET['nomefile']".xls";
header ("Content-Type: application/vnd.ms-excel");
header ("Content-Disposition: inline; filename=$nomefile");
?>
In sostanza basta passare per comodità al nostro script il nome del file, ad esempio:
http://www.miosito.com/export-excel.php?nomefile=esportazione
A questo punto automaticamente ci verrà proposto dal browser di salvare un file di nome esportazione.xls con i dati contenuti all’interno della tabella HTML precedentemente visualizzata.
Strano ma vero… è tutto qui…
Ciao. Maxgrante
info[AT]massimo-caselli[DOT]com