Le clausole di modifica dei dati in SQLite sono le istruzioni INSERT, UPDATE e DELETE. Viene utilizzato per inserire nuove righe, aggiornare i valori esistenti o eliminare righe dal database.
In questo tutorial imparerai-
- INSERIRE
- Aggiornare
- Elimina
- Clausola di conflitto
Si noti che, per tutti i seguenti esempi, è necessario eseguire sqlite3.exe e aprire una connessione al database di esempio mentre scorre:
Passaggio 1) In questo passaggio,
- Apri Risorse del computer e vai alla seguente directory " C: \ sqlite " e
- Quindi apri " sqlite3.exe ":
Passaggio 2) Apri il database " TutorialsSampleDB.db " con il seguente comando:
.open TutorialsSampleDB.db
Ora sei pronto per eseguire qualsiasi tipo di query sul database.
SQLite INSERT
SQLite INSERT viene utilizzato per inserire record in una tabella specificata del database. devi usare la clausola "INSERT". La sintassi della clausola INSERT è la seguente:
- Dopo la clausola INSERT, è necessario indicare in quale tabella è necessario inserire i valori.
- Dopo il nome della tabella scrivi l'elenco delle colonne in cui vuoi inserire i valori.
- Puoi ignorare il nome delle colonne e non scrivere su di esse.
- Se non scrivi il nome delle colonne, i valori verranno inseriti in tutte le colonne trovate nella tabella con lo stesso ordine, le colonne sono definite nella tabella.
- Dopo la clausola VALUES, dovresti elencare i valori da inserire.
- Ogni clausola INSERT inserisce solo una riga. Se vuoi inserire più righe, dovresti scrivere più clausole INSERT, una per ogni riga.
Esempio di inserimento SQLite
Nell'esempio seguente, inseriremo 2 righe nella tabella degli studenti, una per ogni studente:
INSERT INTO Students (StudentId, StudentName, DepartmentId, DateOfBirth)VALORI (11, "Ahmad", 4, "1997-10-12");INSERT INTO Students VALUES (12, 'Aly', 4, '1996-10-12');
Questo dovrebbe funzionare correttamente e non c'è output per questo:
Questo inserirà due studenti:
- Il primo studente con StudentId = 11, StudentName = Ahmad, DepartmentId = 4 e DateOfBirth = 1997-10-12.
- Il secondo studente con StudentId = 12, StudentName = Aly, DepartmentId = 4 e DateOfBirth = 1996-10-12 '.
Nella prima istruzione, abbiamo elencato i nomi delle colonne " StudentId, StudentName, DepartmentId, DateOfBirth ". Tuttavia , nella seconda istruzione, non l'abbiamo fatto.
I quattro valori " 12, 'Aly', 4, '1996-10-12' " verranno inseriti in tutte e quattro le colonne della tabella Studenti nello stesso ordine in cui sono definite le colonne.
Ora, verifichiamo che i due studenti siano stati inseriti nella tabella Studenti eseguendo la seguente query:
SELEZIONA * DA Studenti;
Quindi dovresti vedere i due studenti restituiti da quella query come segue:
Aggiornamento SQLite
SQLite UPDATE Query viene utilizzato per modificare i record esistenti in una tabella. È possibile utilizzare la clausola WHERE con la query UPDATE per aggiornare le righe selezionate. La clausola UPDATE aggiorna una tabella modificando un valore per una colonna specifica. Quanto segue è la sintassi della clausola UPDATE:
Come segue:
- Dopo la "clausola di aggiornamento", dovresti scrivere il nome della tabella da aggiornare.
- È necessario scrivere "clausola SET" che viene utilizzata per scrivere il nome della colonna da aggiornare e il valore da aggiornare.
- Puoi aggiornare più di una colonna. Puoi usare una virgola tra ogni riga.
- È possibile specificare una clausola WHERE per specificare solo alcune righe. Vengono aggiornate solo le righe che l'espressione valuta come true. Se non hai specificato una clausola WHERE, tutte le righe verranno aggiornate.
Esempio di aggiornamento SQLite
Nella seguente istruzione UPDATE, aggiorneremo il DepartmentId per lo studente con StudentId = 6 in modo che sia 3:
AGGIORNA StudentiSET DepartmentId = 3WHERE StudentId = 6;
Questo dovrebbe funzionare correttamente e non dovresti ottenere alcun output:
Nella clausola UPDATE, abbiamo specificato che vogliamo aggiornare la tabella Studenti.
- Nella clausola WHERE, abbiamo filtrato tutti gli studenti per selezionare solo la riga per StudentId = 6.
- La clausola SET aggiornerà il valore dell'ID Dipartimento per gli studenti selezionati in modo che sia 3.
Ora, verifichiamo che lo studente con ID 6 sia aggiornato, eseguendo il seguente comando:
SELEZIONA * DA Studenti DOVE StudentId = 6;
Ora dovresti vedere che il valore dell'ID reparto ora è 3 come segue:
SQLite Elimina
La query SQLite DELETE viene utilizzata per rimuovere i record esistenti da una tabella specificata. È possibile utilizzare la clausola WHERE con le query DELETE per eliminare le righe selezionate.
La clausola DELETE ha la seguente sintassi:
- È necessario scrivere un nome di tabella dopo la clausola DELETE FROM, da cui si desidera eliminare i record. ( Nota: la clausola DELETE viene utilizzata per eliminare alcuni record da una tabella o eliminare tutti i record e non eliminerà la tabella stessa. Tuttavia, la clausola DROP viene utilizzata per eliminare l'intera tabella con tutti i record su di essa. )
- Se scrivi la clausola DELETE come questa "DELETE FROM guru", questo cancellerà tutti i record dalla tabella "guru".
- È possibile specificare una condizione WHERE con un'espressione se si desidera eliminare alcune righe specifiche. Verranno eliminate solo le righe per le quali l'espressione restituisce true. Ad esempio, "DELETE FROM guru WHERE id> 5": eliminerà solo i record con ID maggiore di 5.
Esempio
Nella seguente dichiarazione, elimineremo due studenti con StudentId 11 e 12:
ELIMINA DA Studenti DOVE StudentId = 11 OR StudentId = 12;
L'espressione " StudentId = 11 OR StudentId = 12 " sarà vera solo per gli studenti con ID 11 e 12. Quindi la clausola DELETE verrà applicata a entrambi e cancellerà solo loro.
Questo comando dovrebbe essere eseguito correttamente e non dovresti ottenere alcun output come segue:
Puoi verificare che i due studenti siano stati eliminati, selezionando tutti i record dalla tabella Studenti come segue:
SELEZIONA * DA Studenti;
Non dovresti vedere i due studenti con ID 11 e 12 come segue:
Clausola di conflitto SQLite
Supponiamo di avere una colonna che ha uno dei seguenti vincoli di colonna: UNIQUE, NOT NULL, CHECK o PRIMARY KEY. E poi hai provato a inserire o aggiornare un valore su quella colonna con un valore che è in conflitto con questo vincolo.
Ad esempio, se una colonna ha un vincolo UNIQUE e si è tentato di inserire un valore già esistente (un valore duplicato), che è in conflitto con il vincolo UNIQUE. Quindi la clausola CONFLICT ti consente di scegliere cosa fare in questi casi per risolvere questo conflitto.
Prima di continuare a spiegare come la clausola CONFLICT risolve il conflitto. Dovresti capire cos'è una transazione di database.
Transazione database:
Il termine transazione database è un elenco di operazioni SQLite (inserimento, aggiornamento o eliminazione). La transazione del database deve essere eseguita come un'unità, tutte le operazioni eseguite correttamente o per niente. Tutte le operazioni verranno annullate se una di esse non viene eseguita.
Esempio per una transazione di database:
La transazione per il trasferimento di denaro da un conto bancario a un altro comporterà un paio di attività. Questa operazione di transazione include il prelievo di denaro dal primo conto e il suo deposito su un altro conto. Questa transazione deve essere completata o annullata completamente e non deve fallire a metà.
Ecco l'elenco delle cinque risoluzioni che puoi scegliere nella clausola CONFLICT:
- ROLLBACK : eseguirà il rollback della transazione in cui è presente l'istruzione SQLite corrente che presenta il conflitto (annullerà l'intera transazione). Ad esempio, se stai tentando di aggiornare 10 righe e la quinta riga ha un valore che è in conflitto con un vincolo, nessuna riga verrà aggiornata, le 10 righe rimarranno le stesse. Verrà generato un errore.
- ABORT - questo interromperà (annullerà) solo l'istruzione SQLite corrente che ha il conflitto e la transazione non verrà annullata. Ad esempio, se stai tentando di aggiornare 10 righe e la quinta riga ha un valore che è in conflitto con un vincolo, solo il quinto valore non verrà aggiornato ma le altre 9 righe verranno aggiornate. Verrà generato un errore.
- FAIL: interrompe l'istruzione SQLite corrente che presenta il conflitto. Tuttavia, la transazione non continuerà ma verranno salvate le modifiche precedenti apportate alle righe precedenti alla riga che presenta il conflitto. Ad esempio, se stai tentando di aggiornare 10 righe e la quinta riga ha un valore che è in conflitto con un vincolo, verranno aggiornate solo le 4 righe e l'altra no. Verrà generato un errore.
- IGNORA : salterà la riga che contiene la violazione del vincolo e continuerà a elaborare le altre righe successive dell'istruzione SQLite. Ad esempio, se stai tentando di aggiornare 10 righe e la quinta riga ha un valore che è in conflitto con un vincolo, verranno aggiornate solo le 4 righe e l'altra no. Non procederà ulteriormente ad aggiornare altre righe e si fermerà alla riga che ha il valore di conflitto. Non verrà generato alcun errore.
- SOSTITUISCI - dipende dal tipo di vincolo che presenta la violazione:
- Quando si verifica una violazione del vincolo per il vincolo UNIQUE o PRIMARY KEY. REPLACE sostituirà la riga che causa la violazione con la nuova riga inserita o aggiornata.
- Quando si verifica una violazione del vincolo NOT NULL, la clausola REPLACE sostituirà il valore NULL con il valore predefinito di quella colonna. Se la colonna non ha un valore predefinito, SQLite interromperà l'istruzione (l'istruzione verrà annullata)
- SE si verifica la violazione del vincolo CHECK, la clausola verrà interrotta.
Nota: le 5 risoluzioni precedenti sono opzioni su come risolvere il conflitto. Potrebbe non essere necessariamente ciò che è applicabile per risolvere un conflitto è applicabile per risolvere altri tipi di conflitti.
Come dichiarare la clausola CONFLICT
È possibile dichiarare la clausola ON CONFLICT quando si definisce un vincolo per una definizione di colonna all'interno della clausola CREATE TABLE. Utilizzando la seguente sintassi:
È possibile scegliere una delle cinque risoluzioni per risolvere il conflitto come spiegato in precedenza.
IN CONFLITTO IGNORA Esempio
Passaggio 1) Crea un nuovo oggetto della tabella come segue:
CREATE TABLE [Soggetti] ([SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE,[SubjectName] NVARCHAR NOT NULL);
Si noti che abbiamo definito un vincolo PRIMARY KEY nella colonna SubjectId. Il vincolo di chiave primaria non consentirà l'inserimento di due valori duplicati nella colonna SubjectId in modo che tutti i valori in quella colonna debbano essere univoci. Inoltre, nota che scegliamo una risoluzione dei conflitti come " IGNORA ".
Il comando dovrebbe essere eseguito correttamente e non dovresti ricevere alcun errore:
Passaggio 2) Ora, inseriamo alcuni valori nei nuovi soggetti della tabella, ma con un valore che viola il vincolo della chiave primaria:
INSERT INTO Subject VALUES (1, 'Algebra');INSERT INTO Subject VALUES (2, 'Database Course');INSERT INTO Subject VALUES (2, 'Data Structures');INSERT INTO Subject VALUES (4, 'Algorithms');
In queste istruzioni INSERT, abbiamo provato a inserire due corsi con lo stesso ID soggetto chiave primaria 2, che è una violazione del vincolo di chiave primaria.
I comandi dovrebbero funzionare correttamente e non dovresti ricevere alcun errore. Come segue:
Passaggio 3) Seleziona tutti i soggetti dalla tabella come segue:
SELEZIONA * DA Soggetti;
Questo ti darà l'elenco dei soggetti:
Si noti che sono stati inseriti solo tre argomenti " Algebra, corso database e algoritmi " invece di 4 righe.
La riga con il valore che viola il vincolo di chiave primaria, ovvero "Strutture dati", è stata ignorata e non inserita. Tuttavia, SQLite continua a eseguire altre istruzioni dopo quella riga.
Passaggio 4) ELIMINA gli oggetti della tabella per crearla di nuovo con una clausola ON CONFLICT diversa per il seguente esempio eseguendo il comando seguente:
DROP TABLE Soggetti;
Il comando drop elimina l'intera tabella. I soggetti della tabella ora non esistono.
IN CONFLITTO SOSTITUISCI Esempio
Passaggio 1) Crea un nuovo oggetto della tabella come segue:
CREATE TABLE [Soggetti] ([SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE,[SubjectName] NVARCHAR NOT NULL);
Si noti che abbiamo definito un vincolo PRIMARY KEY nella colonna SubjectId. Il vincolo di chiave primaria non consentirà l'inserimento di due valori duplicati nella colonna SubjectId in modo che tutti i valori in quella colonna debbano essere univoci.
Inoltre, nota che scegliamo un'opzione di risoluzione dei conflitti come " SOSTITUISCI ". Il comando dovrebbe essere eseguito correttamente e non dovresti ricevere alcun errore:
Passaggio 2) Ora, inseriamo alcuni valori nella nuova tabella Soggetti, ma con un valore che viola il vincolo della chiave primaria:
INSERT INTO Subject VALUES (1, 'Algebra');INSERT INTO Subject VALUES (2, 'Database Course');INSERT INTO Subject VALUES (2, 'Data Structures');INSERT INTO Subject VALUES (4, 'Algorithms');
In queste istruzioni INSERT, abbiamo provato a inserire due corsi con lo stesso ID soggetto chiave primaria 2, che è una violazione del vincolo di chiave primaria.
I comandi dovrebbero funzionare correttamente e non dovresti ricevere alcun errore. Come segue:
Passaggio 3) Seleziona tutti i soggetti dalla tabella come segue:
SELEZIONA * DA Soggetti;
Questo ti darà l'elenco dei soggetti:
Si noti che solo tre soggetti sono stati inseriti " Algebra, strutture dati e algoritmi " mentre si è tentato di inserire 4 righe.
La riga con il valore che viola il vincolo di chiave primaria, che è " Strutture dati ", ha sostituito il valore " Corso database " come segue:
- Le prime due istruzioni di inserimento funzionano correttamente senza problemi. Verranno inseriti due argomenti Algebra e Database Course con id 1, 2.
- Quando SQLite tenta di eseguire la terza istruzione di inserimento con SubjectId 2 e SubjectName " Data Structures ", scopre che esiste già un soggetto con SubjectId = 2. Che è una violazione del vincolo di chiave primaria definito nella colonna SubjectId.
- SQLite sceglierà una risoluzione REPLACE per questo conflitto. Sostituisce il valore già esistente nella tabella degli argomenti con il nuovo valore dell'istruzione di inserimento. Quindi, il SubjectName " Database Course " verrà sostituito con SubjectName " Data Structures ".
Sommario:
Le clausole INSERT, UPDATE e DELETE vengono utilizzate per modificare i dati nel database SQLite. La clausola CONFLICT è una clausola potente per risolvere qualsiasi conflitto tra i dati e i dati da modificare.