SQL – Errore “Cannot insert NULL value” su colonne NOT NULL 4.6 (152)

L’errore “Cannot insert NULL value” in SQL Server si verifica quando si tenta di inserire un valore NULL in una colonna che è stata definita come NOT NULL nella tabella. Questo errore impedisce l’inserimento di record con valori nulli in colonne dove è esplicitamente richiesto un valore. Ecco una guida dettagliata con soluzioni sequenziali per risolvere questo problema, accompagnata da una spiegazione di ciascun passo. 1. Verifica la definizione della colonna (NOT NULL) 🔍 Perché è importante? La causa principale…

SQL – Errore “String or binary data would be truncated” in SQL Server 4.3 (126)

L’errore “String or binary data would be truncated” in SQL Server si verifica quando si cerca di inserire una stringa o un dato binario in una colonna che ha una lunghezza definita inferiore alla lunghezza del dato che stai cercando di inserire. In altre parole, il dato che stai cercando di inserire è più lungo del campo in cui stai cercando di inserirlo. Ecco una guida dettagliata per risolvere il problema, con soluzioni esaurienti per ciascun passaggio. 1. Verifica la…

SQL – Problemi di sicurezza SQL Injection 4.6 (128)

Ecco una sequenza dettagliata di soluzioni per mitigare il rischio di SQL Injection in un’applicazione che utilizza SQL: 1. Utilizzare Query Parametrizzate (Prepared Statements) 🔍 Perché è importante? Le query SQL dinamiche concatenano direttamente gli input utente alla query, permettendo a un attaccante di inserire codice malevolo. 🔴 Esempio di codice vulnerabile (Python + SQLite) pythonCopia codiceusername = input("Inserisci il nome utente: ") query = "SELECT * FROM utenti WHERE username = '" + username + "'" cursor.execute(query) # ❌…

SQL – Errore di chiave duplicata su INSERT 4.9 (115)

L’errore di chiave duplicata in SQL si verifica quando si tenta di inserire un record in una tabella e il valore di una chiave primaria o di una chiave univoca è già presente. Questo può causare un errore simile a: Ecco una serie di soluzioni dettagliate e sequenziali per affrontare questo problema: 1. Verificare i Dati Prima di Inserire 2. Utilizzare INSERT IGNORE (MySQL Specifico) 3. Utilizzare ON DUPLICATE KEY UPDATE (MySQL Specifico) 4. Utilizzare UPSERT (PostgreSQL Specifico) 5. Controllare…

SQL – Errore: “Column ‘XYZ’ is invalid in the select list” in GROUP BY 4.4 (116)

L’errore “Column ‘XYZ’ is invalid in the select list because it is not contained in an aggregate function or the GROUP BY clause” si verifica quando una colonna è inclusa nella SELECT di una query con GROUP BY, ma non è né aggregata né inclusa nella clausola GROUP BY. Ecco una serie di soluzioni dettagliate e sequenziali per risolvere questo problema: 1. Aggiungere la Colonna alla Clausola GROUP BY 2. Utilizzare Funzioni Aggregate 3. Utilizzare la Funzione ANY_VALUE() (MySQL Specifico)…

SQL – Deadlock tra transazioni concorrenti 4.6 (102)

Un deadlock si verifica quando due o più transazioni competono per le risorse in modo tale da bloccare reciprocamente il progresso. Ecco alcune soluzioni dettagliate per prevenire e gestire i deadlock in SQL Server e altri database relazionali: 1. Utilizzare un Accesso Consistente ai Dati 2. Ridurre la Durata delle Transazioni 3. Usare il Locking Esplicito con le Istruzioni Appropriate 4. Implementare il Rilevamento e il Rilascio dei Deadlock 5. Utilizzare Strategie di Isolamento Adeguate 6. Introduzione di Backoff e…

Query lenta su tabelle grandi 4.3 (102)

Per risolvere il problema delle query lente su tabelle grandi, è possibile seguire una serie di soluzioni dettagliate e sequenziali. Ogni passaggio è mirato a migliorare le prestazioni complessive e ridurre i tempi di risposta. Ecco una guida dettagliata: 1. Ottimizzazione degli Indici 2. Analizzare e Ottimizzare la Query 3. Partizionamento delle Tabelle 4. Ottimizzazione delle Operazioni di I/O 5. Ottimizzazione delle Configurazioni del Database 6. Utilizzo di Tecniche di Normalizzazione e Denormalizzazione 7. Aggiornamenti Incrementali e Batch 8. Monitoraggio…

Problemi comuni in SQL con relative soluzioni 4.5 (103)

Ecco 15 problemi comuni in SQL con relative soluzioni dettagliate: (Per approfondire su ogni singolo caso cliccare sul titolo o sul link finale) Queste soluzioni aiutano a risolvere i problemi più frequenti nell’uso di SQL. – / 5 Grazie per aver votato!

Sql Server e MySql: creare un Linked Server 4.8 (214)

Come creare Linked Server tra SQL Server e MySQL? Vediamo come connettere un istanza Sql Server con un server MySQL e consentire l’esecuzione di query tramite three dot notation e/o con la funzione OPENQUERY. La guida nasce dalla necessità di accedere ad un database del mio sito da un istanza SQL Server ed eseguire query in tempo reale e poter utilizzare i dati presenti sul server MySQL all’interno di JOIN, MERGE e altri comandi similari. Ciò non esclude la possibilità di ottenere risultati simili…

SQL: DataBase, tabelle e query 0 (0)

Lezione 1 – SQL: DataBase, tabelle e query Pre-requisiti necessari Cos’è un database? Brevissimo ripassoSignificato e uso di SQLParole del linguaggio: SELECT … FROMParole del linguaggio: ORDER BY … WHERE Pre-requisiti necessari conoscere il concetto teorico di Database conoscere le potenzialità pratiche di un DB Cos’è un database? Brevissimo ripasso Molto brevemente affrontiamo il concetto di database (DB), che comunque avremo modo di vedere a fondo con gli esempi che affronteremo lungo il percorso.Un database è un insieme di informazioni organizzate, generalmente…

SQL: Relazioni tra tabelle 0 (0)

Lezione 2 – SQL: Relazioni tra tabelle ARGOMENTI –Che cos’è una relazione?-Relazioni tra tabelle diverse-Parole del linguaggio: INNER JOIN … ON-Tipi di relazione: Uno-A-Molti-Tipi di relazione: Uno-A-Uno-Tipi di relazione: Molti-A-Molti–Funzione della tabella : osservazione finale Che cos’è una relazione? Una relazione, è un legame logico che permette di aggregare informazioni. In un DB una tabella è una relazione, vale a dire una “legge” che mette insieme opportunamente le informazioni che individua, a formare righe (record) e colonne (campi) della tabella stessa.Spesso è…

SQL: Query di comando 5 (1)

Lezione 4 – SQL: Query di comando Query di selezione e query di comandoQuery di creazioneQuery di accodamentoQuery di eliminazioneQuery di modifica Differenza tra query di selezione e query di comando: Query di selezione e query di comando Una query è un’interrogazione, vale a dire una richiesta di reperire dati in un DB, aggregati tra loro per mezzo di criteri che possono essere stabiliti. Tutto quanto visto finora è stato realizzato mediante interventi di questo tipo, che, cioè, mostrano i dati con…

Outer join ( left outer join, right outer join, full outer join) 0 (0)

Outer join Una outer join non richiede che ci sia corrispondenza esatta tra le righe di due tabelle. La tabella risultante da una outer join trattiene tutti quei record che non hanno alcuna corrispondenza tra le tabelle. Le outer join si suddividono in left outer join, right outer join, e full outer join, in base a quale sia la tabella di cui intendiamo trattenere i valori in caso di mancata corrispondenza della regola di confronto da (sinistra, destra, o entrambi). (In questo caso left (sinistra) e right (destra) si…

Cross join 0 (0)

Una cross join, cartesian join o product fornisce le basi (le infrastrutture informatiche) attraverso cui tutti i tipi di inner join operano. Il risultato di una cross join è il prodotto cartesiano di tutte le righe delle tabelle che concorrono alla query di join. È come dire che stiamo facendo una inner join senza impostare la regola di confronto o in cui la regola di confronto ritorna sempre vero. Date le due tabelle di partenza A e B, la cross join si scrive A × B. Esempio…

Natural join 0 (0)

Una natural join offre ulteriori specializzazioni di equi-join. Solitamente la join confronta colonne di tabelle diverse che hanno lo stesso nome. La natural join fa proprio questo. Nell’esempio che segue viene riportata la notazione natural join equivalente alla prima inner-join definita: SELECT * FROM Impiegati NATURAL JOIN Dipartimenti ID_dipartimento Impiegati.Cognome Dipartimenti.Nome_dipartimento 34 Monti Risorse umane 33 Bianchi Tecnico 34 Santoro Risorse umane 33 Mancini Tecnico 31 Rossi Vendite – / 5 Grazie per aver votato!

Equi-join 0 (0)

Equi-join La equi-join, altrimenti conosciuta come equijoin, ha un particolare tipo di comparatore, detto theta join, che utilizza come metodo di verifica, solamente l’uguaglianza matematica come regola di confronto. Usare altri operatori di confronto (come ad esempio <) squalifica la join come equi-join. La query riportata di seguito utilizza una equi-join: SELECT * FROM Impiegati INNER JOIN Dipartimenti ON Impiegati.ID_dipartimento = Dipartimenti.ID_dipartimento SQL fornisce una scorciatoia per definire le equi-joins, attraverso la keyword USING SELECT * FROM Impiegati INNER JOIN Dipartimenti USING (ID_dipartimento) La keyword USING è…

Inner join 0 (0)

Una inner join crea una nuova tabella combinando i valori delle due tabelle di partenza (A and B) basandosi su una certa regola di confronto. La query compara ogni riga della tabella A con ciascuna riga della tabella B cercando di soddisfare la regola di confronto definita. Quando la regola di join viene soddisfatta, i valori di tutte le colonne delle tabelle A e B vengono combinate in un’unica riga nella costruzione della tabella risultante. La inner join è la…

Join (SQL) 0 (0)

Il JOIN è una clausola del linguaggio SQL che serve a combinare le tuple di due o più relazioni di una base di dati. Lo standard ANSI definisce alcune specifiche per il linguaggio SQL sul tipo di JOIN da effettuare: INNER, FULL, LEFT e RIGHT, alle quali diversi DBMS aggiungono CROSS. In alcuni casi è possibile che una tabella possa essere combinata con se stessa, in questo caso si parlerà di self-join. Tabelle di esempio Tutti gli esempi che verranno riportati di seguito faranno uso delle seguenti due tabelle Cognome ID_dipartimento Rossi 31 Bianchi 33 Mancini 33 Santoro 34 Monti…

Viste 0 (0)

Le viste sono tabelle virtuali contenenti dati provenienti da altre tabelle della base di dati. Le viste hanno due principali funzioni: definire una porzione della base di dati accessibili da un particolare gruppo di utenti. Questa caratteristica contribuisce a realizzare la privatezza dei dati, una delle qualità offerte da un DBMS; estendere il potere espressivo di SQL permettendo un annidamento delle interrogazioni più sofisticato rispetto a quello già discusso oppure la realizzazione di attributi calcolati che non dipendono totalmente dai dati presenti nella…

Vincoli di integrità e Trigger 0 (0)

In SQL è possibile specificare dei vincoli di integrità sui dati, sia quelli propri del modello relazionale che quelli che specificano le regole aziendali. Vincoli di dominio. Essi vengono implicitamente specificati quando un attributo viene associato al corrispondente dominio: i valori dell’attributo devono appartenere al relativo dominio. Obligatorietà degli attributi. In SQL, per default, un attributo (non facente parte della chiave primaria) è opzionale, cioè può assumere valori nulli. Per rendere obbligatorio un attributo, cioè per fare in modo che…

Aggiornamento della base di dati 0 (0)

SQL permette di aggiornare lo stato della base di dati mediante inserimenti, modifiche e cancellazioni di righe di tabelle.InserimentoE’ possibile inserire una o più righe in una tabella con il comando insert. Consideriamo il seguente schema di relazione: dipendente(cf, nome, cognome, stipendio) Il seguente comando inserisce un nuovo dipendente: insert into dipendente(cf, nome, cognome, stipendio) values ('ALSBRT69', 'Alessio', 'Bertallot', '1000') Il seguente comando inserisce come dipendenti tutti gli attori presenti nella tabella attore: insert into dipendente(cf, nome, cognome) select cf, nome,…

Interrogazioni di base 0 (0)

Interrogazioni di base Consideriamo la seguente tabella teatro: nome città email CSS Udine css@gmail.com Litta Milano litta@gmail.com Piccolo Milano piccolo@gmail.com Eliseo Roma eliseo@gmail.com L’interrogazione più semplice che si possa scrivere è la seguente: select * from teatro Il risultato è l’intera tabella teatro. La prima riga dell’interrogazione è detta clausola select e serve per selezionare le colonne della tabella che ci interessano. L’operatore * permette di selezionare tutte le colonne. La seconda riga dell’interrogazione è detta clausola from e serve per indicare quali tabelle usare. La…

Interrogazioni nidificate 0 (0)

Interrogazioni nidificate Una interrogazione nidificata è una interrogazione che contiene un’altra interrogazione. SQL non pone limiti al livello di annidamento ma solitamente più di due annidamenti rendono incomprensibile una query ad un umano (una macchina, invece, non ha problemi di comprensione in questo caso). E’ possibile nidificare una interrogazione nella clausola where (vedremo un’altra forma di annidamento parlando delle viste). In particolare una espressione può essere confrontata mediante gli usuali operatori di confronto con una interrogazione. L’operatore di confronto è seguito dalla parola chiave any oppure all.…

SQL- Query di eliminazione 0 (0)

Creare ed eseguire una query di eliminazione Se si vuole eliminare rapidamente una grande quantità di dati o eliminare regolarmente un set di dati in un database desktop di Access, una query di eliminazione o di aggiornamento può essere utile perché le query rendono possibile specificare criteri per trovare ed eliminare rapidamente i dati. L’uso di una query può essere anche un uso più riusato perché è possibile riutilizzare una query salvata. Nota: Prima di eliminare dati o eseguire una query…

SQL: Query di accodamento 0 (0)

Una query di accodamento si usa quando è necessario aggiungere nuovi record a una tabella esistente usando dati da altre origini. Se è necessario modificare i dati in un set di record esistente, ad esempio aggiornare il valore di un campo, è possibile usare una query di aggiornamento Come si fa una query di accodamento? Il processo di creazione di una query di accodamento è costituito dai passaggi di base seguenti: Creare una query di selezione. Convertire la query di selezione in una query di accodamento. Scegliere i campi di destinazione per ogni colonna nella query di accodamento. Eseguire la query per accodare i record.…

Query di creazione tabella 0 (0)

Query di creazione tabella Questo tipo di query consente la creazione di una nuova tabella in base a tutti o parte di essi contenuti in una o più tabelle. Una query di questo tipo, risulta abbastanza utile, nell’operazione di backup dei dati, di esportazione degli stessi in altri Data Base Access, o ancora nella creazione di uno storico cronologico. Le operazioni da compiere per creare una query di questo genere sono semplicissime: Creare una query selezionando le tabelle o le…

SQL: Query di raggruppamento 0 (0)

Lezione 3 – SQL: Query di raggruppamento Che cosa significa “raggruppare”?Funzioni delle query di raggruppamentoParole del linguaggio: GROUP BY …Un passo avanti: le query a campi incrociati Che cosa significa “raggruppare”? Capita con una notevole frequenza di dover effettuare calcoli o statistiche su dati memorizzati, che abbiano qualche caratteristica in comune.SQL mette a disposizione, a questo scopo, un potente strumento: le query di raggruppamento.Raggruppare significa “mettere insieme” tutti i dati, accomunati da qualche caratteristica, su cui vanno fatti alcuni tipi di…

Differenza tra query di selezione e query di comando 0 (0)

Query di selezione: realizza l’aggregazione di dati presi da una o più tabelle, selezionati sulla base di criteri determinati. Il risultato di questa operazione è un RecordSet. Query di comando: permette di variare i dati in modo irreversibile: dopo l’intervento di modifica non è più possibile annullare l’operazione. Query di comando 1) Query di creazione tabella Questo tipo di query crea una nuova tabella con dati provenienti da una tabella esistente o da una query.Un esempio pratico può essere quello di avere dei dati di una tabella con tutti gli iscritti di una gara sportiva…