Декодирање СКЛ наредбе УПДАТЕ

Научите како да користите СКЛ УПДАТЕ команду за ажурирање записа у табели базе података.

Као програмер, требало би да будете удобни да радите са релационим базама података. СКЛ (или Струцтуред Куери Лангуаге) је језик прилагођен почетницима који је интуитиван за учење и има једноставну синтаксу. СКЛ вам омогућава да креирате објекте базе података и постављате упите за табеле релационе базе података.

Можете покренути СКЛ упите за креирање, читање, ажурирање и брисање записа у табели базе података. Можда вам је познато да се ове операције заједнички називају ЦРУД операције.

Да бисте ажурирали записе ускладиштене у табели базе података, можете покренути наредбу УПДАТЕ у СКЛ-у.

У овом водичу ћете научити:

  • Синтакса наредбе УПДАТЕ
  • Како ажурирати записе на основу специфичног услова или више услова повезаних заједно помоћу логичких оператора
  • Уобичајено упозорење које треба имати на уму када покрећете СКЛ УПДАТЕ команду

Синтакса СКЛ УПДАТЕ команде

Синтакса наредбе СКЛ УПДАТЕ је:

UPDATE table_name
SET column = new_value
WHERE condition;

Горњи упит ажурира колону за све записе у којима је услов тачан.

Да бисте ажурирали више колона (или поља), користите СКЛ УПДАТЕ команду на следећи начин:

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

Подсетите се да у релационој бази података:

  • Табела представља ентитет.
  • Редови табеле су записи и представљају инстанцу ентитета.
  • Колоне се такође називају поља или атрибути. У овом водичу користићемо колоне и поља наизменично.

Примери употребе команде СКЛ УПДАТЕ

Узмимо сада неколико примера.

Предуслови

Пре него што почнете да кодирате:

  • Овај водич користи СКЛите. Дакле, мораћете да имате СКЛите и Прегледач базе података СКЛите (препоручено) да кодирате заједно. Имајте на уму да можете користити и МиСКЛ или ПостгреСКЛ.
  • Ако желите да поновите пример, потребни су вам Питхон и Факер Питхон пакет такође.
  Поправи системску грешку Нок Плаиер-а

Креирање табеле базе података са записима

Ако желите да кодирате заједно са овим водичем, можете покренути следећи исечак кода да бисте креирали и повезали се са базом података клијената цустомер_дб.дб. Приметите да користимо Факер Питхон библиотеку да генеришемо синтетичке податке за уметање у табелу купаца:

# 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()

📑 Да би овај код радио без грешака, уверите се да имате Питхон 3.7 (или новију верзију) и Факер инсталиран у вашем развојном окружењу. Можете да инсталирате Факер Питхон пакет користећи пип:

pip install faker

Ако већ имате базу података на коју можете да се повежете и табелу базе података коју можете да тражите, можете је користити и по жељи.

Покретање нашег првог СКЛ упита

Табела купаца има следећа поља:

  • цустомерИД: ЦустомерИД је примарни кључ који нам помаже да јединствено идентификујемо запис у табели базе података.
  • име: Име купца
  • град: Град коме припадају.
  • емаил: Њихова адреса е-поште.
  • нум_ордерс: Број поруџбина које су дали.
  • попуст: Проценат попуста, цео број са подразумеваном вредношћу 2. Пошто поље попуста има подразумевану вредност, не морамо да убацујемо вредност за њега када попуњавамо табелу базе података.

📝 Можете покренути упите и погледати резултате користећи СКЛите клијент командне линије. Или можете да користите претраживач базе података СКЛите.

  Како направити снимак екрана на свом иПад-у

Представићу излазе из СКЛите ДБ претраживача јер их је лако интерпретирати.

Покрените следећи упит да бисте добили све записе у табели купаца:

SELECT * FROM customers;

У пракси, требало би да избегавате коришћење СЕЛЕЦТ * осим ако није неопходно. Али за овај пример, користићемо га јер имамо само 15 записа и нема много поља.

Ажурирање записа на основу једног услова

Сада када знамо како изгледа наша табела, хајде да покренемо неколико УПДАТЕ упита да ажурирамо записе на основу захтеваног услова.

📋 Напомена: Након покретања наредби УПДАТЕ, покренућемо СЕЛЕЦТ * ФРОМ купаца да бисмо видели ажуриране записе.

Ажурирање једног поља

Прво, хајде да ажурирамо поље града у запису са цустомерИД=7:

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

Хајде да изаберемо све колоне и записе из табеле купаца:

SELECT * FROM customers;

Видимо да је градско поље Даниелле Форд (цустомерИД=7) ажурирано.

Ажурирање више поља

У претходном примеру смо ажурирали само једно поље, наиме, град записа који одговара ИД-у купца 7. Али такође можемо да ажурирамо више поља користећи синтаксу коју смо научили.

Овде ажурирамо и град и поље е-поште које одговара ИД-у купца 1:

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

Затим покрећемо:

SELECT * FROM customers;

А ево и излаза:

Ажурирање више записа

Пошто смо користили цустомерИД који је примарни кључ који јединствено идентификује запис о клијенту, упити које смо до сада покренули ажурирали су само један од записа.

Међутим, ако је услов тачан за више од једног записа у табели, извршавање наредбе СКЛ ажурирање ажурира све одговарајуће записе.

Узмимо за пример овај упит:

UPDATE customers 
SET discount=10
WHERE num_orders > 170;

Сада покрените овај упит:

SELECT * FROM customers;

Ево излаза:

Покретање горње наредбе за ажурирање СКЛ-а мења три записа. Сви имају нум_ордерс већи од 170 и сада имају вредност попуста од 10.

  Најбоља проширења за тамни режим за Цхроме

Ажурирање записа на основу више услова

До сада је клаузула ВХЕРЕ имала једноставан услов, али је уобичајено да критеријум филтрирања има више услова повезаних заједно помоћу логичких оператора.

Да бисмо ово разумели, поставимо попуст на 5 на основу два услова:

  • град КАО ‘Нови%’: овај услов проверава и укључује оне записе где поље града почиње са Новим, и
  • нум_ордерс > 100 филтера на основу броја поруџбина да би се укључили само они записи за које је број налога већи од 100.

Изјава УПДАТЕ изгледа овако:

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

Приметите да сада имамо два услова у клаузули ВХЕРЕ — повезана заједно логичким АНД оператором. Ажурирају се само они записи за које оба услова важе.

Затим покрените овај упит и посматрајте излаз:

SELECT * FROM customers;

Као што се види на излазу, поље попуста за оне записе за које важе оба горња услова се ажурира:

Уобичајено упозорење када користите наредбу СКЛ УПДАТЕ

У све до сада извршене наредбе УПДАТЕ укључили смо клаузулу ВХЕРЕ.

На пример, желите да ажурирате попуст на 25 за одређеног купца. А у упиту за ажурирање ипур-а, заборавили сте да укључите клаузулу ВХЕРЕ са ИД-ом купца за филтрирање:

UPDATE customers
SET DISCOUNT=25;

Сада покрените:

SELECT * FROM customers;

Видећете да су сви записи у табели ажурирани. Ово можда није понашање које бисте желели.

⚠ Не заборавите да укључите клаузулу ВХЕРЕ када желите да ажурирате подскуп записа на основу услова. Ако желите да ажурирате одређено поље за све записе, можете изоставити клаузулу ВХЕРЕ.

У овом примеру, рецимо да вам предстоји распродаја за Црни петак и желите да понудите свим својим клијентима попуст од 25%. Тада ће покретање горњег упита имати смисла.

Закључак

Ево резимеа онога што сте научили:

  • Када желите да ажурирате записе у табели базе података, можете користити СКЛ УПДАТЕ команду.
  • СКЛ УПДАТЕ израз обично укључује клаузулу ВХЕРЕ са условом који одређује подскуп записа (редова табеле) за ажурирање.
  • Изостављањем клаузуле ВХЕРЕ у изјави УПДАТЕ ажурирају се сви записи. Зато морате пазити да не изоставите клаузулу ВХЕРЕ ако ажурирање свих редова табеле није жељено понашање.

Затим погледајте овај СКЛ варалицу за брзу референцу.