Introduktion
Når først et stykke data kommer ind i en database, er det meget usandsynligt, at det forbliver statisk i hele sin tid brugt i en tabel. Data opdateres for at afspejle ændringer i systemer, de repræsenterer, for at forblive relevante og opdaterede. SQLite giver dig mulighed for at ændre værdierne i poster ved hjælp af UPDATE
SQL-kommando.
UPDATE
funktioner, der ligner INSERT
(ved at du angiver kolonner og deres ønskede værdier) og DELETE
(ved at du angiver de nødvendige kriterier for at målrette mod specifikke poster). Du er også i stand til at ændre data enten én efter én eller i bulk. I denne artikel vil vi dykke ned i, hvordan du bruger UPDATE
effektivt at administrere dine data, der allerede er gemt i tabeller.
Brug af UPDATE
for at ændre data
Den grundlæggende syntaks for UPDATE
kommandoen ser sådan ud:
UPDATE my_tableSET column1 = value1, column2 = value2,WHERE id = 1;
Den grundlæggende struktur involverer tre separate klausuler:
- angivelse af en tabel, der skal handles på
- angiver de kolonner, du ønsker at opdatere, samt deres nye værdier
- definering af kriterier, SQLite skal evaluere for at bestemme, hvilke poster der skal matche
Mens du kan tildele værdier direkte til kolonner, som vi gjorde ovenfor, kan du også bruge kolonnelistens syntaks, som det ofte ses i INSERT
kommandoer.
For eksempel kan vi ændre ovenstående eksempel til at se ud som følger:
UPDATE my_tableSET (column1, column2) = (value1, value2)WHERE id = 1;
Returnerende poster ændret af UPDATE
kommando
Som standard viser SQLite ikke antallet af rækker, der er påvirket af en UPDATE
udmelding. Men SQLite tilføjede RETURNING
klausul modelleret efter PostgreSQL i version 3.35.0
. Denne klausul får kommandoerne til at returnere alle eller dele af de poster, der blev ændret.
Du kan bruge stjernen *
symbol for at returnere alle kolonnerne i de ændrede rækker meget som en SELECT
erklæring:
UPDATE my_tableSET column1 = value1, column2 = value2,WHERE id = 1RETURNING *;
Derudover kan du også angive nøjagtige kolonner, som du er interesseret i at vise med/uden et alias ved hjælp af AS
:
UPDATE my_tableSET column1 = value1, column2 = value2WHERE id = 1RETURNING column1 AS 'first column';
Opdatering af poster baseret på værdier i en anden tabel
Opdatering af data baseret på nye eksterne data er en relativt strømlinet proces. Du skal blot angive tabellen, kolonnerne, nye værdier og målretningskriterierne.
Men med SQLite kan du også bruge UPDATE
at betinget opdatere tabelværdier baseret på information i en anden tabel i din database. Den grundlæggende syntaks vil se nogenlunde sådan ud:
UPDATE table1SET table1.column1 =( SELECT table2.column1 FROM table2 WHERE table1.column2 = table2.column2);
Her opdaterer vi direkte værdien af column1
i table1
at være returneringen af en SELECT
underforespørgsel på table2
, men kun i rækker hvor column2
af table1
matcher column2
af table2
. FROM
klausul angiver en forbindelse mellem de to tabeller og WHERE
specificerer betingelserne.
Lad os som et eksempel antage, at vi har to tabeller kaldet book
og author
.
CREATE TABLE author ( id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT, last_publication TEXT);CREATE TABLE book ( id INTEGER PRIMARY KEY, author_id INT REFERENCES author.id title TEXT, publication_year INTEGER);INSERT INTO author (first_name, last_name)VALUES ('Leo', 'Tolstoy'), ('James', 'Joyce'), ('Jean-Paul', 'Sarte'); INSERT INTO book (author_id, title, publication_year)VALUES (1, 'Anna Karenina', '1877'), (1, 'War and Peace', '1867'), (2, 'Ulysses', '1920'), (2, 'Dubliners', '1914'), (3, 'Nausea', '1938');
Disse to tabeller har en relation til book.author_id
med henvisning til author.id
. I øjeblikket er last_publication
for author
tabellen er NULL
. Vi kan udfylde den med forfatterens seneste udgivne bog i vores book
tabel ved hjælp af FROM
og WHERE
klausuler for at bringe de to tabeller sammen.
Her viser vi et eksempel på opdatering af last_publication
:
UPDATE author SET last_publication=( SELECT title FROM book WHERE author_id = author.id ORDER BY author_id, publication_year DESC);
Hvis du spørger author
tabel nu, vil den vise dig titlen på deres seneste publikation i databasen:
SELECT * FROM author;
+------------+------------+-----------+--------------------------+ id first_name last_name last_publication +-------------+------------+-----------+--------------------------+ 1 Leo Tolstoy Anna Karenina 2 James Joyce Ulysses 3 Jean-Paul Sarte Nausea +-------------+------------+-----------+--------------------------+
Konklusion
I denne vejledning tog vi et kig på de grundlæggende måder, hvorpå du kan ændre eksisterende data i en tabel ved hjælp af UPDATE
kommando. Udførelse af disse grundlæggende koncepter giver dig mulighed for at specificere de nøjagtige kriterier, der er nødvendige for at identificere de eksisterende rækker i en tabel, opdatere kolonnenavne med værdier og eventuelt returnere de rækker, der blev påvirket af RETURNING
. UPDATE
kommandoen er afgørende for at administrere dine data efter den første indsættelse i dine databaser.