Decodificarea comenzii SQL UPDATE

Aflați cum să utilizați comanda SQL UPDATE pentru a actualiza înregistrările dintr-un tabel de bază de date.

În calitate de dezvoltator, ar trebui să vă simțiți confortabil să lucrați cu baze de date relaționale. SQL (sau Structured Query Language) este un limbaj prietenos pentru începători, care este intuitiv de învățat și are o sintaxă simplă. SQL vă permite să creați obiecte de bază de date și să interogați tabele de baze de date relaționale.

Puteți rula interogări SQL pentru a crea, citi, actualiza și șterge înregistrări dintr-un tabel de bază de date. S-ar putea să fiți familiarizat că aceste operațiuni sunt numite în mod colectiv operațiuni CRUD.

Pentru a actualiza înregistrările stocate într-un tabel de bază de date, puteți rula comanda UPDATE în SQL.

În acest tutorial, veți învăța:

  • Sintaxa comenzii UPDATE
  • Cum să actualizați înregistrările pe baza unei anumite condiții sau a mai multor condiții înlănțuite folosind operatori logici
  • Avertisment comun de care trebuie să fiți conștient atunci când rulați comanda SQL UPDATE

Sintaxa comenzii SQL UPDATE

Sintaxa comenzii SQL UPDATE este:

UPDATE table_name
SET column = new_value
WHERE condition;

Interogarea de mai sus actualizează coloana pentru toate înregistrările în care condiția este adevărată.

Pentru a actualiza mai multe coloane (sau câmpuri), utilizați comanda SQL UPDATE astfel:

UPDATE table_name
SET column_1 = new_value_1, column_2 = new_value_2, ..., column_k = new_value_k
WHERE condition;

Amintiți-vă că într-o bază de date relațională:

  • Tabelul reprezintă o entitate.
  • Rândurile tabelului sunt înregistrările și reprezintă o instanță a entității.
  • Coloanele sunt numite și câmpuri sau atribute. În acest tutorial, vom folosi coloanele și câmpurile în mod interschimbabil.

Exemple de utilizare a comenzilor SQL UPDATE

Acum să luăm câteva exemple.

  Cele mai bune 30 de moduri Fallout 3 pentru un joc îmbunătățit

Cerințe preliminare

Înainte de a începe codarea:

  • Acest tutorial folosește SQLite. Deci, va trebui să aveți SQLite și Browser baza de date SQLite (recomandat) pentru a codifica. Rețineți că puteți utiliza și MySQL sau PostgreSQL.
  • Dacă doriți să replicați exemplul, aveți nevoie de Python și Pachetul Faker Python de asemenea.

Crearea unui tabel de bază de date cu înregistrări

Dacă doriți să codificați împreună cu acest tutorial, atunci puteți rula următorul fragment de cod pentru a crea și a vă conecta la o bază de date de clienți customer_db.db. Observați că folosim biblioteca Faker Python pentru a genera date sintetice pentru a le insera în tabelul clienți:

# main.py

import sqlite3
from faker import Faker
import random

# connect to the db
conn = sqlite3.connect('customer_db.db')
cur = conn.cur()

# create a database table
cur.execute('''CREATE TABLE customers (
                  customerID INTEGER PRIMARY KEY,
                  name TEXT,
                  city TEXT,
                  email TEXT,
                  num_orders INTEGER,
                  discount INTEGER DEFAULT 2)''')


# create a Faker object 
fake = Faker()
Faker.seed(42)

for _ in range(15):
    name = fake.name()
    city = fake.city()
    d = fake.domain_name()
    email = f"{name[:2]}.{city[:2]}@{d}"
    num_orders = random.choice(range(200))
    db_cursor.execute('INSERT INTO customers (name, city, email, num_orders) 
    VALUES (?,?,?,?)', (name,city,email,num_orders))

# commit the transaction 
conn.commit()
cur.close()
conn.close()

📑 Pentru ca acest cod să funcționeze fără erori, asigurați-vă că aveți Python 3.7 (sau o versiune ulterioară) și Faker instalat în mediul dumneavoastră de dezvoltare. Puteți instala pachetul Faker Python folosind pip:

pip install faker

Dacă aveți deja o bază de date la care vă puteți conecta și un tabel de bază de date pe care îl puteți interoga, o puteți utiliza și după cum doriți.

Rularea primei noastre interogări SQL

Tabelul clienți are următoarele câmpuri:

  • customerID: customerID este cheia primară care ne ajută să identificăm în mod unic o înregistrare într-un tabel de bază de date.
  • nume: numele clientului
  • oraș: orașul căruia îi aparțin.
  • e-mail: adresa lor de e-mail.
  • num_orders: numărul de comenzi pe care le-au plasat.
  • discount: procentul de reducere, un număr întreg cu o valoare implicită de 2. Deoarece câmpul de reducere are o valoare implicită, nu este nevoie să inserăm o valoare pentru acesta atunci când populăm tabelul bazei de date.

📝 Puteți rula interogările și vizualiza rezultatele utilizând clientul de linie de comandă SQLite. Sau puteți utiliza browserul bazei de date SQLite.

  Cum să accesezi vechiul cont Myspace fără e-mail și parolă

Voi prezenta rezultatele din SQLite DB Browser deoarece sunt ușor de interpretat.

Rulați următoarea interogare pentru a obține toate înregistrările din tabelul clienți:

SELECT * FROM customers;

În practică, ar trebui să evitați să utilizați SELECT * decât dacă este necesar. Dar pentru acest exemplu, îl vom folosi deoarece avem doar 15 înregistrări și nu multe câmpuri.

Actualizarea înregistrărilor pe baza unei singure condiții

Acum că știm cum arată tabelul nostru, să rulăm câteva interogări UPDATE pentru a actualiza înregistrările în funcție de condiția necesară.

📋 Notă: După rularea instrucțiunilor UPDATE, vom rula clienții SELECT * FROM pentru a vedea înregistrările actualizate.

Actualizarea unui singur câmp

Mai întâi, să actualizăm câmpul oraș al înregistrării cu customerID=7:

UPDATE customers
SET city='Codeshire'
WHERE customerID=7;

Să selectăm toate coloanele și înregistrările din tabelul clienți:

SELECT * FROM customers;

Vedem că câmpul orașului Danielle Ford (customerID=7) a fost actualizat.

Actualizarea mai multor câmpuri

În exemplul anterior, am actualizat un singur câmp, și anume, orașul înregistrării care corespunde clientului ID 7. Dar putem actualiza și mai multe câmpuri folosind sintaxa pe care am învățat-o.

Aici actualizăm atât orașul, cât și câmpul de e-mail corespunzător ID-ului client 1:

UPDATE customers
SET city='East Carlisle',email="[email protected]"
WHERE customerID=1;

În continuare, rulăm:

SELECT * FROM customers;

Și iată rezultatul:

Actualizarea mai multor înregistrări

Deoarece am folosit customerID, care este cheia primară care identifică în mod unic o înregistrare client, interogările pe care le-am executat până acum au actualizat doar una dintre înregistrări.

Cu toate acestea, dacă condiția este adevărată pentru mai multe înregistrări din tabel, atunci rularea comenzii de actualizare SQL actualizează toate înregistrările corespunzătoare.

Luați această interogare de exemplu:

UPDATE customers 
SET discount=10
WHERE num_orders > 170;

Acum rulați această interogare:

SELECT * FROM customers;

Iată rezultatul:

Rularea comenzii de actualizare SQL de mai sus modifică trei înregistrări. Toate au un număr de comenzi mai mare de 170 și acum au o valoare de reducere de 10.

  Cum să controlezi ce aplicații pot accesa datele de sănătate ale iPhone-ului tău

Actualizarea înregistrărilor pe baza mai multor condiții

Până acum clauza WHERE avea o condiție simplă, dar este obișnuit ca criteriul de filtrare să aibă mai multe condiții înlănțuite de operatori logici.

Pentru a înțelege acest lucru, să setăm reducerea la 5 pe baza a două condiții:

  • oraș LIKE „New%”: această condiție verifică și include acele înregistrări în care câmpul orașului începe cu Nou și
  • num_orders > 100 filtre bazate pe numărul de comenzi pentru a include numai acele înregistrări pentru care numărul de comenzi este mai mare de 100.

Declarația UPDATE arată astfel:

UPDATE customers
SET DISCOUNT=5
WHERE city LIKE 'New%' AND num_orders>100;

Observați că acum avem două condiții în clauza WHERE — înlănțuite împreună de operatorul logic AND. Și numai acele înregistrări pentru care ambele condiții sunt valabile sunt actualizate.

Apoi rulați această interogare și observați rezultatul:

SELECT * FROM customers;

După cum se vede în rezultat, câmpul de reducere pentru acele înregistrări pentru care ambele condiții de mai sus sunt valabile sunt actualizate:

Avertisment comun atunci când utilizați comanda SQL UPDATE

În toate instrucțiunile UPDATE executate până acum am inclus clauza WHERE.

De exemplu, doriți să actualizați reducerea la 25 pentru un anumit client. Și în interogarea de actualizare ypur, uitați să includeți clauza WHERE cu customerID pentru a filtra:

UPDATE customers
SET DISCOUNT=25;

Acum rulați:

SELECT * FROM customers;

Veți vedea că toate înregistrările din tabel sunt actualizate. Acesta poate să nu fie comportamentul pe care l-ați dorit.

⚠ Așa că nu uitați să includeți clauza WHERE atunci când doriți să actualizați un subset de înregistrări pe baza unei condiții. Dacă doriți să actualizați un anumit câmp pentru toate înregistrările, puteți omite clauza WHERE.

În acest exemplu, să presupunem că se apropie oferta de Vinerea Neagră și că doriți să oferiți tuturor clienților tăi o reducere de 25%. Apoi, rularea interogării de mai sus va avea sens.

Concluzie

Iată un rezumat a ceea ce ați învățat:

  • Când doriți să actualizați înregistrările dintr-un tabel de bază de date, puteți utiliza comanda SQL UPDATE.
  • Instrucțiunea SQL UPDATE include de obicei clauza WHERE cu condiția care determină subsetul de înregistrări (rândurile tabelului) de actualizat.
  • Omiterea clauzei WHERE din instrucțiunea UPDATE actualizează toate înregistrările. Deci trebuie să aveți grijă să nu omiteți clauza WHERE dacă actualizarea tuturor rândurilor tabelului nu este comportamentul dorit.

Apoi, consultați această foaie de cheat SQL pentru referință rapidă.