SQLite INSERISCI, AGGIORNA, ELIMINA Interrogazione con esempio
Le clausole di modifica dei dati in SQLite sono istruzioni INSERT, UPDATE e DELETE. Viene utilizzato per inserire nuove righe, aggiornare valori esistenti o eliminare righe dal database.
Si noti che, per tutti gli esempi seguenti, è necessario eseguire sqlite3.exe e aprire una connessione al database di esempio come segue:
Passo 1) In questa fase,
- Aprire Risorse del computer e andare alla seguente directory “C:\sqlite" e
- Quindi apri “sqlite3.exe"
Passo 2) Apri la banca dati”TutorialSampleDB.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, dovresti indicare in quale tabella devi 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 scrivervi.
- 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.
- Ciascuna clausola INSERT inserisce solo una riga. Se vuoi inserire più righe, dovresti scrivere più clausole INSERT, una per ogni riga.
SQLite Inserisci esempio
Nell'esempio seguente, inseriremo 2 righe nella tabella degli studenti, una per ogni studente:
INSERT INTO Students(StudentId, StudentName, DepartmentId, DateOfBirth) VALUES(11, 'Ahmad', 4, '1997-10-12'); INSERT INTO Students VALUES(12, 'Aly', 4, '1996-10-12');
Questo dovrebbe funzionare correttamente e non c'è alcun output per questo:
Verranno inseriti 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 “IDStudente, NomeStudente, IDDipartimento, DataDiNascita“.Tuttavia, nella seconda affermazione, non l'abbiamo fatto.
I quattro valori”12, 'Aly', 4, '1996-10-12'” verrà inserito 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 quanto segue domanda:
SELECT * FROM Students;
Dovresti quindi vedere i due studenti restituiti da quella query come segue:
SQLite Aggiornanento
SQLite La query UPDATE viene utilizzata 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. Di seguito è riportata la sintassi della clausola UPDATE:
Come segue:
- Dopo la "clausola di aggiornamento", dovresti scrivere il nome della tabella da aggiornare.
- Devi scrivere la "clausola SET" che viene utilizzata per scrivere il nome della colonna da aggiornare e il valore da aggiornare.
- È possibile 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 restituisce true. Se non hai specificato una clausola WHERE, tutte le righe verranno aggiornate.
SQLite Esempio di aggiornamento
Nella seguente istruzione UPDATE, aggiorneremo il DepartmentId per lo studente con StudentId = 6 in modo che sia 3:
UPDATE Students SET DepartmentId = 3 WHERE 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 a 3.
Ora verifichiamo che lo studente con ID 6 sia aggiornato, eseguendo il seguente comando:
SELECT * FROM Students WHERE StudentId = 6;
Ora dovresti vedere che il valore dell'ID dipartimento è 3 come segue:
SQLite Elimina
SQLite La query 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:
- Devi scrivere un nome di tabella dopo la clausola DELETE FROM, dalla quale vuoi eliminare i record. (Nota: che l' Clausola DELETE viene utilizzato per eliminare alcuni record da una tabella o eliminare tutti i record e non eliminerà la tabella stessa. comunque, il Clausola DROP viene utilizzato per eliminare l'intera tabella con tutti i record al suo interno.)
- Se scrivi la clausola DELETE in questo modo “DELETE FROM guru”, questo cancellerà tutti i record dalla tabella “guru”.
- Puoi specificare una condizione WHERE con un'espressione se desideri eliminare alcune righe specifiche. Verranno eliminate solo le righe per le quali l'espressione restituisce true. Ad esempio, “DELETE FROM guru WHERE id > 5” – questo eliminerà solo i record che hanno id maggiore di 5.
Esempio
Nella seguente istruzione elimineremo due studenti con StudentId 11 e 12:
DELETE FROM Students WHERE StudentId = 11 OR StudentId = 12;
L'espressione "IDStudente = 11 OPPURE IDStudente = 12” sarà vero solo per gli studenti con Id 11 e 12. Quindi la clausola DELETE verrà applicata su entrambi e cancellerà solo loro.
Questo comando dovrebbe essere eseguito correttamente e non dovresti ottenere alcun output come il seguente:
È possibile verificare che i due studenti siano stati eliminati selezionando tutti i record dalla tabella Studenti come segue:
SELECT * FROM Students;
Non dovresti vedere i due studenti con ID 11 e 12 come segue:
SQLite Clausola di conflitto
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 tenta 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 del database
Il termine transazione del database è un elenco di SQLite operazioni (inserimento o aggiornamento o eliminazione). La transazione del database deve essere eseguita come un'unità, ovvero tutte le operazioni devono essere eseguite correttamente o nessuna. Tutte le operazioni saranno annullate se una di esse non è stata eseguita correttamente.
Esempio di transazione di database
L'operazione per trasferire denaro da un conto bancario a un altro comporterà un paio di attività. Questa operazione di transazione prevede il prelievo di denaro dal primo conto e il deposito su un altro conto. Questa transazione deve essere completamente completata o completamente annullata e non fallire a metà.
Ecco l'elenco delle cinque risoluzioni che puoi scegliere nella clausola CONFLICT:
- RITORNO – questo ripristinerà la transazione in cui è corrente SQLite dichiarazione che presenta il conflitto (annullerà l'intera transazione). Ad esempio, se stai tentando di aggiornare 10 righe e la quinta riga ha un valore in conflitto con un vincolo, nessuna riga verrà aggiornata e le 10 righe rimarranno le stesse. Verrà generato un errore.
- ABORTO – questo interromperà (annullerà) la corrente SQLite solo l'istruzione che presenta conflitto e la transazione non verrà annullata. Ad esempio, se stai tentando di aggiornare 10 righe e la quinta riga ha un valore in conflitto con un vincolo, solo il quinto valore non verrà aggiornato ma verranno aggiornate le altre 9 righe. Verrà generato un errore.
- FALLIRE - interrompe la corrente SQLite affermazione che presenta conflitto. Tuttavia, la transazione non continuerà ma verranno applicate le modifiche apportate alle righe precedenti a quella in conflitto. Ad esempio, se stai tentando di aggiornare 10 righe e la quinta riga ha un valore in conflitto con un vincolo, verranno aggiornate solo le 4 righe e l'altra no. Verrà generato un errore.
- IGNORARE – questo salterà la riga che contiene la violazione del vincolo e continuerà a elaborare le altre righe successive dell' SQLite dichiarazione. Ad esempio, se stai tentando di aggiornare 10 righe e la quinta riga ha un valore in conflitto con un vincolo, verranno aggiornate solo le 4 righe e l'altra no. Non procederà oltre per aggiornare le altre righe e si fermerà alla riga con il valore di conflitto. Non verrà generato alcun errore.
- SOSTITUIRE – dipende dal tipo di vincolo che presenta la violazione:
- Quando si verifica una violazione del vincolo UNIQUE o PRIMARY KEY. Il 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, allora SQLite annullerà l'istruzione (l'istruzione verrà annullata)
- SE si verifica la violazione del vincolo CHECK, la clausola verrà interrotta.
Nota: Le 5 risoluzioni di cui sopra sono opzioni su come vuoi risolvere il conflitto. Potrebbe non essere necessariamente ciò che è applicabile per risolvere un conflitto lo è anche per risolvere altri tipi di conflitti.
Come dichiarare la clausola CONFLICT
Puoi dichiarare la clausola ON CONFLICT quando definisci un vincolo per una definizione di colonna all'interno della clausola CREATE TABLE. Utilizzando la seguente sintassi:
Puoi scegliere una delle cinque soluzioni per risolvere il conflitto come spiegato in precedenza.
SUL CONFLITTO IGNORA Esempio
Passo 1) Creare un nuovo oggetto della tabella come segue:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE, [SubjectName] NVARCHAR NOT NULL );
Si noti che abbiamo definito un vincolo PRIMARY KEY sulla colonna ObjectId. Il vincolo di chiave primaria non consentirà l'inserimento di due valori duplicati nella colonna ObjectId in modo che tutti i valori in quella colonna siano univoci. Inoltre, tieni presente che scegliamo una risoluzione del conflitto come "IGNORARE".
Il comando dovrebbe essere eseguito correttamente e non dovresti ricevere alcun errore:
Passo 2) Ora inseriamo alcuni valori nei nuovi oggetti della tabella, ma con un valore che viola il vincolo della chiave primaria:
INSERT INTO Subjects VALUES(1, 'Algebra'); INSERT INTO Subjects VALUES(2, 'Database Course'); INSERT INTO Subjects VALUES(2, 'Data Structures'); INSERT INTO Subjects VALUES(4, 'Algorithms');
In queste istruzioni INSERT, abbiamo provato a inserire due corsi con lo stesso ID oggetto della chiave primaria 2, che rappresenta una violazione del vincolo della chiave primaria.
I comandi dovrebbero funzionare correttamente e non dovresti ricevere errori. Come segue:
Passo 3) Selezionare tutti gli argomenti dalla tabella come segue:
SELECT * FROM Subjects;
Questo ti darà l'elenco degli argomenti:
Da notare che sono stati inseriti solo tre soggetti”Algebra, corso sui database e Algorithms" 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.
Passo 4) ELIMINA gli argomenti della tabella per crearla nuovamente con una clausola ON CONFLICT diversa per l'esempio seguente eseguendo il seguente comando:
DROP TABLE Subjects;
Il comando drop cancella l'intera tabella. Gli oggetti della tabella ora non esistono.
SOSTITUZIONE CONFLITTO Esempio
Passo 1) Creare un nuovo oggetto della tabella come segue:
CREATE TABLE [Subjects] ( [SubjectId] INTEGER NOT NULL PRIMARY KEY ON CONFLICT REPLACE, [SubjectName] NVARCHAR NOT NULL );
Si noti che abbiamo definito un vincolo PRIMARY KEY sulla colonna ObjectId. Il vincolo di chiave primaria non consentirà l'inserimento di due valori duplicati nella colonna ObjectId in modo che tutti i valori in quella colonna siano univoci.
Inoltre, tieni presente che scegliamo un'opzione di risoluzione dei conflitti che sia "SOSTITUIRE“. Il comando dovrebbe essere eseguito correttamente e non dovresti ricevere alcun errore:
Passo 2) Ora inseriamo alcuni valori nella nuova tabella Objects, ma con un valore che violi il vincolo di chiave primaria:
INSERT INTO Subjects VALUES(1, 'Algebra'); INSERT INTO Subjects VALUES(2, 'Database Course'); INSERT INTO Subjects VALUES(2, 'Data Structures'); INSERT INTO Subjects VALUES(4, 'Algorithms');
In queste istruzioni INSERT, abbiamo provato a inserire due corsi con lo stesso ID oggetto della chiave primaria 2, che rappresenta una violazione del vincolo della chiave primaria.
I comandi dovrebbero funzionare correttamente e non dovresti ricevere errori. Come segue:
Passo 3) Selezionare tutti gli argomenti dalla tabella come segue:
SELECT * FROM Subjects;
Questo ti darà l'elenco degli argomenti:
Da notare che sono stati inseriti solo tre soggetti”Algebra, strutture dati e Algorithms” mentre noi abbiamo provato ad inserire 4 righe.
La riga che ha il valore che viola il vincolo della chiave primaria, che è "Strutture dati" ha sostituito il valore "Corso di database" come segue:
- Le prime due istruzioni di inserimento vengono eseguite correttamente senza problemi. Verranno inserite due materie Algebra e Corso Database con ID 1, 2.
- Quando SQLite tenta di eseguire la terza istruzione di inserimento con OggettoId 2 e OggettoNome "Strutture dati", scopre che esiste già un oggetto con ObjectId = 2. Che è una violazione del vincolo di chiave primaria definito nella colonna ObjectId.
- SQLite sceglierà una risoluzione SOSTITUISCI per questo conflitto. Sostituisce il valore già esistente nella tabella degli oggetti con il nuovo valore dell'istruzione insert. Così il "Corso di database"NomeSoggetto verrà sostituito con"Strutture dati"NomeOggetto.
Sommario
Le clausole INSERT, UPDATE e DELETE vengono utilizzate per modificare i dati nel file SQLite banca dati. La clausola CONFLICT è una clausola potente per risolvere qualsiasi conflitto tra i dati e i dati da modificare.