Visualizzazione post con etichetta MySQL. Mostra tutti i post
Visualizzazione post con etichetta MySQL. Mostra tutti i post

lunedì 16 giugno 2008

[PHP-MySQL] Connettersi a diversi DB su host diversi attarverso una sola funzione

Se avete a che fare con DBMS su host differenti e volete uno script che sia in grado di connettersi dinamicamente a ciascuno di essi, ci si può basare sull'indirizzo del server su cui risiede il DBMS. L'esempio seguente dovete immaginarlo come il costruttore della classe DBconnect che imposta i campi dbhost (host in cui gira MySQL), dbuser (utente con cui si si collega al DB), dbpassword (password utente) e database.
In quest'esempio si fa uso di preg_match e di espressioni regolari per riconoscere l'indirizzo del server.


function DBconnect() {

// esecuzione su una LAN privata
if(preg_match("/^10\./",$_SERVER['SERVER_ADDR'])) {

$this->dbhost = "10.10.234.89";
$this->dbuser = "lan1";
$this->dbpassword = "lan1";
$this->database = "lan1";

// esecuzione su un'altra LAN privata
} else if (preg_match("/^192\./",$_SERVER['SERVER_ADDR'])) {

$this->dbhost = "192.168.9.134";
$this->dbuser = "lan2";
$this->dbpassword = "lan2";
$this->database = "lan2";

} else { // esecuzione in locale

$this->dbhost = "localhost";
$this->dbuser = "locale";
$this->dbpassword = "locale";
$this->database = "locale";

}
}

giovedì 29 maggio 2008

[SQL]La query del giorno

Immaginiamo di avere a disposizione una tabella che contenga le vostre vendite annuali, dei campi che contengono per ciascuna vendita l'importo lordo e ivato e che tutte le date siano espresse nel formato unix timestamp (nel caso non sappiate cosa sia, fate riferimento a questo sito che ve lo spiega e vi fornisce un'applicazioncina web per fare la conversione di formato).

Si vuole produrre una query che dia come risultato dei record i cui campi della tabella sono:
  • anno di riferimento per le spese;
  • Totale vendite per quell'anno;
  • Totale fatturato lordo;
  • Totale fatturato ivato.
Ovviamente si potrebbe fare una semplice query del sito select * from vendite where [conditions...] e gestire tutto via PHP, ma costringerebbe ad impiegare varie variabili per il conteggio dei vari dati per il calcolo del fatturato lordo e di quello ivato, dato derivato.

Però volevo che facesse tutto MySQL di modo da semplificare al massimo la gestione del risultato con PHP. Quindi ecco la query finale:
select count(*) as totFatture,
@totLordo := (select truncate(sum(fatturatoLordo),2) from table
where [conditions...]
and data between UNIX_TIMESTAMP('2007/01/01') and
unix_timestamp('2007/12/31')) as totLordo,
@totIva := @totLordo + (select truncate(sum(fatturatoIvato),2) as totIva from
table where [conditions...]
and data between UNIX_TIMESTAMP('2007/01/01')
and unix_timestamp('2007/12/31')) as totIva,
@first := 2007 as anno
from table where [conditions...] and data
between UNIX_TIMESTAMP('2007/01/01') and unix_timestamp('2007/12/31')
group by anno
UNION
select count(*) as totFatture,
@totLordo := (select truncate(sum(fatturatoLordo),2) from table
where [conditions...] between
UNIX_TIMESTAMP('2008/01/01') and unix_timestamp('2008/12/31'))
as totLordo,
@totIva := @totLordo + (select truncate(sum(fatturatoIvato),2) from fatture
where [conditions...] and data
between UNIX_TIMESTAMP('2008/01/01') and
unix_timestamp('2008/12/31')) as totIva,
@second := 2008 as anno
from tablewhere [conditions...] and data between
UNIX_TIMESTAMP('2008/01/01') and unix_timestamp('2008/12/31')
group by anno

Se vi vengono in mente ottimizzazioni, non esitate a riferirle, per quei pochi dati di cui disponete :) A me è stato utile per imparare l'uso delle variabili in SQL ,della funzione unix_timestamp per il calcolo delle spese per anno e di truncate, che semplicemente tronca un numero alla i-esima cifra decimale specificata come secondo argomento, sebbene non arrotondi, ma semplicemente tronchi il numero (poco male alla fine).

mercoledì 28 maggio 2008

[MySQL Query Browser] The memory load of the system is extremly high

Per chi non lo conoscesse ancora, MySQL Query Browser è un tool visuale, disponibile per varie piattaforme, che permette con facilità di creare, eseguire ed ottimizzare queries SQL (qui uno screenshot).

Lo consiero un'ottima alternativa al promt dei comandi che, nonostante tutto, uso lo stesso congiuntamente a questo tool.
Purtroppo però stamattina mi è comparso un errore molto strano nell'esecuzione di una query banalissima che avrebbe dovuto ritornare senza tanti fronzoli (niente join o query innestate) meno di 50 records. L'errore è:

The memory load of the system is extremly high.
In order to keep the system responsive record set retrieval
has been stopped.

In pratica MySQL QB si rifiuta di eseguire la query come se non ci fosse memoria sufficiente per eseguirla (o qualcosa di simile immagino).

Facendo una breve ricerca viene fuori che è il bug 30108, verificato da quasi 3 mesi e che interessa anche l'ultima versione stabile, la quale ha almeno un centinaio di bug all'attivo non ancora risolti.

Ad ogni mod questo bug non è facilmente ripetibile poichè dopo pochi istanti la query che prima vi dava tale errore potrebbe funzionare, complicando quindi il lavoro del team di debugging.

Resta sempre un tool molto valido comunque sia e lo consiglio vivamente.

lunedì 26 maggio 2008

[SQL] MySQL tips

Connessione e dumping

  1. cambiare la password di un utente:
      
    update user set password=PASSWORD("pippo") where user="root";
    flush privileges;

  2. esportare solo le istruzioni DDL dal database:
      mysqldump db_name --no-data > script_file.sql
    Aggiungere --databases se si vuole creare anche
    il database al pari di altri oggetti.

  3. avviare MySQL senza far scattare i beep per gli errori:
      mysql -uroot --no-beep -p

Query

  1. Selezionare l'ultimo elemento della tabella:
     select field1,field2, ...
    from table [where=...]
    order by field1 DESC limit 1;

    -- oppure...
    select field from table
    where id=last_insert_id(); -- dove id è di tipo auto_increment

Date ed orari

  1. Selezionare l'ora corrente:
     select now();  -- 2008-05-26 12:46:08
    -- oppure...
    select current_timestamp;
  2. Selezionare solo la data corrente senza l'ora:
     select CAST(now() as date); -- 2008-05-26
    -- oppure...
    select current_date;
  3. Selezionare solo l'ora corrente senza la data:
     select CAST(now() as time); -- 12:47:34
    -- oppure...
    select current_time;
  4. Selezionare lo unix timestamp a partire da una data:
     select unix_timestamp('2007/03/26 16:21:56')
    -- è uguale a mktime(16,21,56,3,26,2007,-1) in PHP

martedì 13 maggio 2008

[Link] Raccolta di cheet sheet

Qui di seguito una raccolta di "bigini" online :)

Raccoglitori di cheet sheet e altro materiale

Ecco una lista di ottimi siti web che raccolgono liste di memorandum in formato PDF in merito a svariati argomenti:

sabato 12 gennaio 2008

Win-get: uso e creazione di un repository

Introduzione

Win-get è un packet manager a linea di comando per windows che sfrutta le funzionalità di wget,un porting per Windows del programma omonimo per Linux.

wget

Presenta una lista di programmi via Web (quelli accessibili anche dall'applicazione) e se ci si registra si ha il vantaggio di poter cliccare su dei "+" a fianco dei nomi dell'applicazione e associare l'applicazione stessa al nostro account. In questa maniera sfrutando l'opzione "restore" di win-get,è possibile installare tutti i programmi associati al nostro profilo (specificando le credenziali di autenticazione o nel file di configurazione o come opzioni da linea di comando).
Esiste anche un ' estensione per Firefox (non ancora provata quindi non vi so dire nulla in termini di utilità e compatibilità tra le varie versioni) che permette di segnalare un'applicazione. Fate attenzione che il server non è configurato per le estensioni firefox quindi vi verrà chiesto di scaricarla. Dovrete poi installare tale estensione con "Apri con" e scegliendo Firefox o da linea di comando "firefox estensione.xpi".

Trovate un'altra recensione di questo software su newstechnology.

Funzionamento tecnico

Questo è un pogetto open source,quindi sono disponibili i sorgenti per poterci creare il nostro repository, ma NON l'interfaccia amministrativa e "perlustrativa" del sito ufficiale (in attesa di chiarimenti).

Win-get farà delle query come questa ad uno script PHP (notate i parametri inviati via GET) e si otterrà un file XML descrittivo che verrà poi gestito da Win-get e presentato nel prompt dei comandi.

xml

Come illustra questa query e quella nella foto,sembra che questo progetto sia un repository di collegamenti alle applicazioni da scaricare e che sul server Sourceforge non abbiano messo alcun software (molto probabilmente perchè non si può nemmeno fare). Quindi se guadate al file XML ritornato dalla precedente query,l'indirizzo del file zip verrà dato in pasto a wget presumo.

Creazione di un proprio repository

Ho intenzione di creare un repository su Aruba sfruttando i files forniti,ma permettendo anche di scaricare direttamente dal server Aruba i software,dal momento che godo di spazio illimitato :-D (ma non banda illimitata presumo!). Chi è su Aruba sa che si hanno a disposizione solitamente 5 database predefiniti per un hosting da 30 sacchi l'anno (mi pare,a me hanno regalato il sottodominio quindi non ricordo :-D). Quindi l'istruzione CREATE DATABASE `w154283_winget` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci; non sarà possibile. Possiamo:

  • rinominare uno dei database predefiniti,azione possibile dal pannello di controllo selezionado "Operazioni";
  • semplicemente modificare USE w154283_winget; con il nome del nostro database e cancellare o commentare la creazione del database.

Prendiamo quindi il dump del database e imbocchiamolo a PHPMyAdmin presente su Aruba. Il database è composto da 5 tabelle:

  • applications: contiene i dati generali di un'applicazione e il link dove risiede;
  • dependencies: le dipendenze per una determinata applicazione;
  • errors: gli errori in riferimento alle applicazioni;
  • mirrors: eventuali mirrors per una certa applicazione;
  • requests: identica ad applications,mi è ancora sconosciuto il significato della sua ridondante esistenza;

Fatto questo basta caricare i file winget.php e db.php sul proprio server. L'indirizzo del proprio repository sarà quello rappresentato dalla locazione del file winget.php.

A questo punto manca tutta l'interfaccia amministrativa che il sito ufficiale presenta. Ho chiesto a Ryan se è possibile avere tali files,dal momento che su CVS di sourceforge presenta solo i 3 files menzionati.

Nel caso non fosse possibile ne costruirò una mia non appena avrò tempo :)

lunedì 7 gennaio 2008

Appuntamento con OilProject: DBMS a confronto

Preambolo

Stasera volevo vedermi un film,per cui ho iniziato a prenderne uno a caso dalla mia raccolta: "Un ponte per Terabithia". Beh a metà film ho smesso. Trattasi di ragazzini dalla fervida immaginazione,fervida a tal punto da arrivare a crearsi un mondo tutto loro.
Deciso a non arrendermi ho optato per "Fascisti su Marte",del buon Guzzanti. Sebbene possa sembrare carino per i primi 5 minuti,dopo diventa anch'esso schifosamente noioso. Dunque mi son detto che non era serata per i film e ho deciso di apporfondire un po' le mie conoscenze con qualche lettura che avevo a disposizione.

DBMS a confronto

Si intitola così la presentazione (disponibile in PDF o ODP,ma c'è anche l'MP3 che presenta i suoi lavori) di Nello Coppeto (aka NeCoSi),autore del sito web Geekplace e mebro della oilprojectcommunity di OilProject.
Il suo lavoro mette a confronto da un punto di vista generale e scarsamente tecnico i tre principali DBMS in circolazione:

- MySQL;
- Oracle;
- PostgreSQL;


Oracle

Nasce dal '77 e prosegue la sua evoluzione fino ad arrivare alla versione 10g del 2003,ora surclassata dalla 11g come mi fa notare un lettore. Esistono ben 5 versioni di Oracle che con mia grande sorpresa costano migliaia di dollari: si va dai 18 mila ai 275 mila dollari per licenze della versione enterprise edition a tempo indeterminato con supporto e aggiornamenti,senza contare che gli optional sono anch'essi a pagamento.
La versione liberamente scaricabile è la Express Edition,che nell'aprile del 2006 viene premiato da non ricordo chi come miglir database. Viene delineato un tratto monopolista di Oracle,che fa addirittura proposte d'acquisto di MySQL e JBoss.
Essendo software chiuso e basando la sua sicurezza su ciò che non si conosce (la più bassa forma per intenderci) ha avuto un record di inefficienza nella bug correction: quasi 2 anni per una patch!!

MySQL

Sviluppato a partire dal '95,viene usato nell'architettura LAMP e da Wikipedia,chi non lo conosce? Quel che non sapevo è che avesse due licenze:

  • GPL;
  • commerciale: se acquisto questa licenza e se modifico e distribuisco il software posso scegliere anche questa licenza e venderlo,annullando la viralità della GPL;

Scitto in C/C++,ha estensioni per altri DBMS come PostgreSQL. Questo non so a che livello si estenda. Supporterà le stored procedure e le funzioni trigger di PG?
Vanta numeri per 30 mila download al giorno su 5 milioni di installazioni globali.

PostgreSQL

La prima versione risale all'89 e questo DBMS open source arriva ad oggi alla versione 8. Ha una licenza BSD,quindi molto flessibile.
PostgreSQL ho avuto modo di studiarlo e approfondirlo un pochino quest'anno nel corso di basi di dati (mentre per Nello è toccato Oracle). Potete vedere i miei appunti su PotsgreSQL a questa pagina.

Conclusioni

Ho trovato la sua esposizione interessante,tant'è che ve ne sto parlando e vi invito a dargli una buona lettura (e ascolto) soprattutto se siete indecisi su quale DBMS scegliere per i vostri tornaconti e volete farvi una panoramica,anche perchè alla fine dei fatti potete scaricare liberamente dalla rete una versione di qualsiasi di questi tre DBMS.
Potete trovare i lavori di Nello su Oilproject oppure da me nella sezione riservata alle letture libere.

domenica 16 dicembre 2007

PHP Guestbook per i nostri siti

Listuccia:


Io comunque continuo a domandarmi come mai sia così schifosamente difficile trovare le demo di applicazioni web. Non posso mica basarmi su una lapidaria descrizione,devo pur farmi un'idea vedendolo in azione! Per questo,questo e quest'artro motivo credo che sceglierò phpBook per il mio sito. Appena è pronto ve lo dico così potrete insultarmi... (cor cazzo! :-D).
EDIT: phpBook non si scarica direttamente dal loro sito,ma te lo inviano via mail (???!). Ergo: optp per qualche progetto di Sourceforge,che grazie alla sua funzione di filtraggio nella ricerca ho ridotto la scelta a due progetti,MGB e phpnix.

martedì 4 dicembre 2007

Data in italiano in MySQL

Per ottenere la data in italiano in MySQL è sufficiente lavorare sulla formattazione dei campi della data stessa. A tal scopo si utilizza DATE_FORMAT (data,"formato") per estrarre i campi e ordinarli secondo quanto specificato in formato. Per riferirsi ad anno,mese,giorni e orario si utilizzano dei caratteri escaped con il carattere %.
Ad esempio per formattare secondo le usanze italiane la data inglese odierna (2007-12-04 17:03:08) ottenuta tramite la funzione now() per esempio possiamo fare così:

select date_format(NOW(),"%d-%m-%Y %T");

In questo caso %d sta per giorno,%m per mese e %Y per anno,mentre %T rappresenta l'orario in hh:mm:ss. Vedere la fonte per ulteriori e più approfondite informazioni.

Fonte: il forum di HTML.it

lunedì 3 dicembre 2007

Tag cloud in PHP/MySQL

Rendo noto che sono una pippa in cucina,non so perchè ma non ho l'elasticità mentale di improvvisare le dosi e le ricette,mi serve "l'algoritmo" esatto (leggi ricetta) per fare qualcosa. Così ho deciso di collaborare con la mia ragazza (molto più esperta di me in cucina per fortuna mia :D) alla stesura di un ricettario.
Mi piacerebbe poterlo fare in AJAX ma non ho ancora molta competenza tecnica per realizzarlo così al momento,magari una seconda versione in un futuro potrà esser fatta così. Pensavo altresì di taggare le ricette e di creare delle tag cloud come siamo abituati a vederle nei blog. Riporto qui per mia utilità una serie di link per creare una tag cloud con PHP e MySQL:

martedì 13 novembre 2007

Installazione architettura LAMP su Ubuntu Gutsy Desktop

Se non avete scelto fin da subito Ubuntu Server Edition,sul vostro sistema vi troverete sforniti delle componenti dell'architettura LAMP (Apache,MySQL e PHP).

Io in principio volevo destinare il mio computer fisso di casa a prove sporadiche e ad un utilizzo meramente multimediale con Ubuntu,però per curiosità e bisogno,ho cambiato idea e deciso di provare ad installare tutto quel che mi serviva.
  1. scegliere i pacchetti idonei da synaptic: basta cliccare su "Cerca" e digitare "apache","php" e "mysql". Scegliere sia il client sia il server di mysql. Eventualmente scaricare il pacchetto pear per avere le estensioni a PHP. In fase di installazione è possibile configurare graficamente Apache per PHP.
  2. verrà richiesta la password di root per mysql.
  3. verificare l'effettiva installazione del server digitando "localhost" dal browser. Dovrebbe comparire il contenuto della directory /var/www/ e mostrare la firma del server (Apache/2.2.4 (Ubuntu) PHP/5.2.3-1ubuntu6 Server at localhost Port 80). Se compare PHP nella firma (come nell'esempio riportato) il modulo è correttamente installato e il server è in grado di passare il codice PHP all'omonimo preprocessore.
  4. per sostituire il nostro contenuto della directory dei documenti di Apache (sotto Windows "htdocs"),rimuovere prima la directory di default ($ sudo rm -rf /var/www/*) e spostare o copiare i files che vogliamo inserire nella driectory pubblica ($ sudo mv Desktop/backup_generale/htdocs/* /var/www/).
    Siccome li abbiamo spostati con sudo,tutti i files acquisiranno i diritti di root (chmod 700),permettiamo invece la lettura anche agli altri utenti dopo esserci spostati nella directory pubblica del server da terminale (/var/www$ chmod -R 755 *).
    Se volete fare un link sul desktop alla vostra directory contenente il materiale pubblico digitare: ln -s /var/www/ ~/Desktop
  5. da ultimo testiamo la connessione a MySQL inserendo nella directory pubblica di Apache il seguente stralcio di codice fra tag PHP che qui ho omesso perch Blogger non me lo consente:

    $mysql_id = mysql_connect('localhost', 'root', 'root') or die("Connessione non riuscita: " . mysql_error());
    mysql_select_db("mysql") or die("Selezione del database non riuscita");

    $query = "SELECT User FROM user";
    $result = mysql_query($query) or die(mysql_error());

    echo "Tabelle nel database mysql
    ";
    while($row = mysql_fetch_array($result,MYSQL_ASSOC)){
    echo $row['User'];
    echo "
    ";
    }
    Se vi compare la seguente immagine (in cui ho erroneamente scritto "Tabelle nel database MySQL" ma nel codice ci riferiamo agli utenti nella tabella Users) è tutto a posto :)

Come si può vedere,l'installazione di LAMP è molto più rapida rispetto a Windows grazie soprattutto a repository e alla nuova versione di PHP.

venerdì 5 ottobre 2007

SQL:tutorial e documentazioni

Riassumendo Mashable,un buon punto di partenza sicuramente sono le documentazioni ufficiali offerte dai DBMS. Vediamone una breve lista:
Lo standard si sa,è variegatamente implementato nei vari DBMS e qui potete vederne alcune differenze.
Dopo di che è il caso di cercarsi tutorial o leggerse libri al riguardo:
Come seconda cosa andiamo ad indicare editor disponibili: per primo cito quello che non è proprio un editor ma un formattatore di istruzioni SQL,incapsulabili anche in un altro linguaggio quale PHP o Java. Possiamo usare anche PHPMyAdmin (o PGAdmin per PostgreSQL,cmq software analoghi) per imparare il linguaggio: se non ci accontentiamo di usare la grafica bella e pronta ma immettiamo le query testualmente,otterremo gli stessi risultati ma essendo consapevoli di quello che avviene sotto le quinte.
Un altro editor è WWW SQL Designer,che agisce via browser dopo aver settato connessioni al database.

venerdì 28 settembre 2007

MySQL: serie di blog e notizie

Volevo segnalare una serie di blog,siti e quant'altro utili per SQL e MySQL:

martedì 25 settembre 2007

MySQL Vs PostgreSQL: sequenze a confronto

Come sempre in questo periodo (fino a domani,giorno di consegna),sono impegnato nel progetto di basi di dati (che poi pubblicherò),il quale coinvolge PHP e PostgreSQL. Devo dire che PostgreSQL è un buon DBMS,ho approfondito le procedure SQL e i trigger tramite funzioni PLPGSQL.
Una nota dolente è stata la scoperta della gestione delle sequenze: mentre per MySQL possiamo definire così una sequenza (per esempio):

id int auto_increment primary key
In PostgreSQL ci sono due modi (uno rapido e uno più elaborato). Modo rapido:

/* il seguente codice crea implicitamente una sequenza,creiamo il campo id nella tabella omettendo alcuni passaggi */
id serial primary key
E un modo più elaborato (vedi funzioni per le sequenze):

CREATE SEQUENCE tablename_id_seq INCREMENT 1 MINVALUE 1 MAXVALUE 2147483647;
-- creiamo il campo id nella tabella omettendo alcuni passaggi
id int DEFAULT nextval('tablename_id_seq') primary key
E fin qua ci siamo. Ammettiamo che facciamo una serie di INSERT specificando gli ID:

INSERT INTO table (ID,BLA,BLA) VALUES(1,'dato','dato');
In questo caso, dopo tali INSERT, se facciamo un inserimento SENZA specificare l'ID, MySQL sarà abbastanza scaltro da prelevare l'ultimo ID nella tabella e incrementarlo di uno mentre invece PostgreSQL richiamerà la sequenza creata (o quella implicita se usiamo serial),siccome non l'abbiamo mai usata, produrrà 1 come risultato,con la possibilità molto facile di causare un errore di duplicazione delle chiavi (1 è magari già presente nella tabella).
Per questo concludo dicendo che in PostgreSQL è bene non specificare gli ID ma lasciare che sia la sequenza a farlo per noi,mentre in MySQL non ci sono problemi di sorta.

lunedì 3 settembre 2007

Scoprire via Web da che paese arriva una connessione

Una soluzione gratuita l'ho trovata in WebHosting: dal link indicato è possibile scaricare la versione più recente del database contenente le informazioni necessarie circa IP e paesi. Per importarlo in MySQL mi è toccato sgobbare un po': sembra che il DBMS in questione non capisca i dati se racchiusi fra virgolette (esempio "pippo","pluto",ecc). Quindi ecco i passaggi per importare il database in MySQL:

  • aprire con un editor di testo il file csv e rimuovere tutte le virgolette dal file (basta usare "Trova e sostituisci" disponibile in qualsiasi editor);
  • dopo aver salvato il file creare la tabella seguente in MySQL:

    create table iplocation (
    IP_FROM DOUBLE primary key ,
    IP_TO DOUBLE ,
    COUNTRY_CODE2 CHAR(2),
    COUNTRY_CODE3 CHAR(3),
    COUNTRY_NAME VARCHAR(50)
    );
  • importare il file csv tramite la seguente query:

    LOAD DATA LOCAL INFILE 'C:\ip-to-country.csv' INTO TABLE iplocation
    FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n';

Un esempio di codice in PHP lo trovate qui.

martedì 28 agosto 2007

Triggers Management in MySQL

I triggers sono stati un'innovazione in MySQL a partire dall'ultima versione. Fra i tools più famosi di gestione del DBMS via Web prende posto ovviamente phpMyAdmin. Quest'ultimo però non supporta i triggers (li mostra in sola lettura nella tabella information schema),forse complice il fatto che la maggior parte dei siti odierni (compresi Aruba e Altervista per citare alcuni hosting provider italiani) montano ancora una vecchia versione di MySQL.
Ad ogni modo per le vostre prove in locale e per quegli hosting provider che offrono l'ultima versione di MySQL (e di PHP),esiste un semplicissimo tool in PHP5 di Binzy Wu,che sfrutta l'object orientation ed è in grado di mostrare i triggers presenti in un database,modificarli o cancellarli.