Tin tức và phân tích của tất cả các thiết bị di động

Giải mã lệnh SQL UPDATE

Tìm hiểu cách sử dụng lệnh SQL UPDATE để cập nhật các bản ghi trong bảng cơ sở dữ liệu.

Là nhà phát triển, bạn sẽ cảm thấy thoải mái khi làm việc với cơ sở dữ liệu quan hệ. SQL (Ngôn ngữ truy vấn có cấu trúc) là ngôn ngữ thân thiện với người mới bắt đầu, dễ học và có cú pháp đơn giản. SQL cho phép bạn tạo các đối tượng cơ sở dữ liệu và truy vấn các bảng quan hệ.

Bạn có thể thực hiện các truy vấn SQL để tạo, đọc, cập nhật và xóa các bản ghi trong bảng cơ sở dữ liệu. Bạn có thể biết rằng những thao tác này được gọi là các thao tác CRUD (Tạo, Đọc, Cập nhật, Xóa).

Để cập nhật các bản ghi được lưu trữ trong bảng cơ sở dữ liệu, bạn có thể sử dụng lệnh UPDATE trong SQL.

Trong hướng dẫn này bạn sẽ học:

  • Cú pháp lệnh UPDATE trong SQL
  • Cách cập nhật bản ghi dựa trên một điều kiện cụ thể hoặc nhiều điều kiện được kết hợp bằng toán tử logic
  • Các vấn đề thường gặp cần lưu ý khi chạy lệnh UPDATE trong SQL

Cú pháp lệnh UPDATE trong SQL

Cú pháp của lệnh UPDATE trong SQL như sau:

UPDATE nazwa_tabeli
SET kolumna = nowa_wartość
WHERE warunek;

Trong truy vấn ở trên, cột được cập nhật cho tất cả các bản ghi có điều kiện đúng.

Để cập nhật nhiều cột (trường), hãy sử dụng lệnh UPDATE trong SQL như sau:

UPDATE nazwa_tabeli
SET kolumna_1 = nowa_wartość_1, kolumna_2 = nowa_wartość_2, ..., kolumna_k = nowa_wartość_k
WHERE warunek;

Lưu ý rằng trong cơ sở dữ liệu quan hệ:

  • Bảng đại diện cho thực thể.
  • Các hàng của bảng là các bản ghi và thể hiện một thể hiện của một thực thể.
  • Cột còn được gọi là trường hoặc thuộc tính. Trong hướng dẫn này, chúng ta sẽ sử dụng các thuật ngữ cột và trường thay thế cho nhau.

Ví dụ về sử dụng lệnh UPDATE trong SQL

Bây giờ hãy chuyển sang một số ví dụ.

Yêu cầu

Trước khi mã hóa:

  • Đối với hướng dẫn này, chúng tôi đang sử dụng SQLite. Bạn phải cài đặt SQLite và trình xem cơ sở dữ liệu SQLite (được khuyến nghị) để viết mã. Bạn cũng có thể sử dụng MySQL hoặc PostgreSQL.
  • Nếu bạn muốn tái tạo ví dụ, bạn cũng sẽ cần gói Python và Python Faker.

Tạo một bảng cơ sở dữ liệu với các bản ghi

Nếu muốn viết mã theo hướng dẫn này, bạn có thể chạy đoạn mã bên dưới để tạo và kết nối với cơ sở dữ liệu khách hàng customer_db.db. Lưu ý rằng chúng tôi sử dụng thư viện Python Faker để tạo dữ liệu tổng hợp để chèn vào bảng khách hàng:

# main.py

import sqlite3
from faker import Faker
import random

# połączenie z bazą danych
conn = sqlite3.connect('customer_db.db')
cur = conn.cur()

# utworzenie tabeli bazy danych
cur.execute('''CREATE TABLE customers (
                  customerID INTEGER PRIMARY KEY,
                  name TEXT,
                  city TEXT,
                  email TEXT,
                  num_orders INTEGER,
                  discount INTEGER DEFAULT 2)''')


# utworzenie obiektu Faker 
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))

# potwierdzenie transakcji 
conn.commit()
cur.close()
conn.close()

📑 Để mã này hoạt động mà không gặp lỗi, hãy đảm bảo bạn đã cài đặt Python 3.7 (hoặc mới hơn) và thư viện Faker. Bạn có thể cài đặt Python Faker bằng pip:

pip install faker

Nếu bạn đã có cơ sở dữ liệu mà bạn có thể kết nối và bảng cơ sở dữ liệu mà bạn có thể sử dụng thì bạn cũng có thể sử dụng cơ sở dữ liệu đó.

Thực hiện truy vấn SQL đầu tiên

Bảng khách hàng có các trường sau:

  • customerID: customerID là khóa chính giúp chúng ta xác định duy nhất một bản ghi trong bảng cơ sở dữ liệu.
  • name: Tên khách hàng
  • thành phố: Thành phố mà họ thuộc về.
  • email: Địa chỉ email.
  • num_orders: Số lượng đơn hàng đã đặt.
  • giảm giá: Phần trăm giảm giá, một số nguyên có giá trị mặc định 2. Vì trường giảm giá có giá trị mặc định nên chúng tôi không cần cung cấp giá trị khi điền vào bảng cơ sở dữ liệu.

📝 Bạn có thể chạy truy vấn và kiểm tra kết quả bằng ứng dụng khách bảng điều khiển SQLite hoặc trình xem cơ sở dữ liệu SQLite.

Dưới đây là kết quả từ trình duyệt cơ sở dữ liệu SQLite rất dễ hiểu.

Chạy truy vấn sau để lấy tất cả các bản ghi trong bảng khách hàng:

SELECT * FROM customers;

Trong thực tế, tránh sử dụng SELECT * trừ khi thực sự cần thiết. Tuy nhiên, trong ví dụ này, chúng tôi sẽ sử dụng nó vì chúng tôi chỉ có 15 bản ghi và một vài trường.

Cập nhật bản ghi dựa trên một điều kiện duy nhất

Bây giờ chúng ta đã biết bảng của mình trông như thế nào, hãy thực hiện một số truy vấn CẬP NHẬT để cập nhật các bản ghi dựa trên điều kiện bắt buộc.

📋 Lưu ý: Sau khi thực thi câu lệnh UPDATE, chúng ta sẽ chạy SELECT * FROM khách hàng để xem các bản ghi được cập nhật.

Cập nhật một trường duy nhất

Trước tiên, hãy cập nhật trường thành phố của bản ghi với customerID=7:

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

Hãy chọn tất cả các cột và bản ghi từ bảng khách hàng:

SELECT * FROM customers;

Chúng ta thấy rằng trường thành phố dành cho Danielle Ford (customerID=7) đã được cập nhật.

Cập nhật nhiều trường

Trong ví dụ trước, chúng tôi chỉ cập nhật một trường, đó là trường thành phố của bản ghi tương ứng với ID khách hàng 7. Nhưng chúng ta cũng có thể cập nhật nhiều trường bằng cú pháp đã học.

Ở đây chúng ta cập nhật cả trường thành phố và trường email tương ứng với customerID 1:

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

Sau đó chạy:

SELECT * FROM customers;

Và đây là kết quả:

Cập nhật nhiều bản ghi

Vì chúng tôi đã sử dụng khóa chính customerID, khóa này xác định duy nhất bản ghi khách hàng nên các truy vấn chúng tôi chạy cho đến nay chỉ cập nhật một bản ghi.

Tuy nhiên, nếu điều kiện đúng cho nhiều bản ghi trong bảng thì lệnh cập nhật SQL sẽ cập nhật tất cả các bản ghi tương ứng.

Một ví dụ về truy vấn như vậy:

UPDATE customers 
SET discount=10
WHERE num_orders > 170;

Bây giờ hãy chạy truy vấn này:

SELECT * FROM customers;

Đây là kết quả:

Việc thực thi lệnh cập nhật SQL ở trên sẽ sửa đổi ba bản ghi. Tất cả đều có num_orders lớn hơn 170 và hiện có giá trị chiết khấu là 10.

Cập nhật bản ghi dựa trên nhiều điều kiện

Cho đến nay, mệnh đề WHERE có một điều kiện đơn giản, nhưng không có gì lạ khi một tiêu chí lọc có nhiều điều kiện được kết nối bởi các toán tử logic.

Để hiểu điều này, hãy đặt mức giảm giá thành 5 dựa trên hai điều kiện:

  • thành phố THÍCH ‘New%’: điều kiện này kiểm tra và bao gồm những bản ghi có trường thành phố bắt đầu bằng Mới và
  • num_orders > 100 lọc các bản ghi dựa trên số lượng đơn hàng, chỉ bao gồm các bản ghi có hơn 100 đơn hàng.

Lệnh CẬP NHẬT trông như thế này:

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

Lưu ý rằng bây giờ chúng ta có hai điều kiện trong mệnh đề WHERE – được kết nối bằng toán tử AND. Và chỉ những bản ghi đáp ứng cả hai điều kiện mới được cập nhật.

Sau đó chạy truy vấn này và quan sát kết quả:

SELECT * FROM customers;

Như bạn có thể thấy ở đầu ra, trường chiết khấu cho các bản ghi có cả hai điều kiện trên đều đúng đã được cập nhật:

Các vấn đề thường gặp khi sử dụng lệnh UPDATE trong SQL

Cho đến nay, chúng tôi đã đưa mệnh đề WHERE vào tất cả các câu lệnh UPDATE.

Ví dụ: bạn muốn cập nhật mức giảm giá lên 25 cho một khách hàng cụ thể. Tuy nhiên, trong truy vấn cập nhật, bạn quên đưa mệnh đề WHERE vào ID khách hàng:

UPDATE customers
SET DISCOUNT=25;

Sau đó chạy:

SELECT * FROM customers;

Bạn sẽ thấy tất cả các bản ghi trong bảng đã được cập nhật. Đây có thể không phải là hành vi được mong đợi.

⚠ Vì vậy, hãy nhớ thêm mệnh đề WHERE khi bạn muốn cập nhật một tập hợp con các bản ghi dựa trên một điều kiện. Nếu bạn muốn cập nhật một cột cụ thể cho tất cả các bản ghi, bạn có thể bỏ qua mệnh đề WHERE.

Trong ví dụ này, giả sử sắp có đợt giảm giá Thứ Sáu Đen và bạn muốn giảm giá 25% cho tất cả khách hàng. Sau đó chạy truy vấn trên sẽ có ý nghĩa.

Kết luận

Dưới đây là tóm tắt những gì bạn đã học được:

  • Để cập nhật các bản ghi trong bảng cơ sở dữ liệu, bạn có thể sử dụng lệnh UPDATE trong SQL.
  • Truy vấn CẬP NHẬT SQL thường chứa mệnh đề WHERE với điều kiện chỉ định tập hợp con các bản ghi (các hàng trong bảng) cần cập nhật.
  • Nếu mệnh đề WHERE không có trong câu lệnh UPDATE thì tất cả các bản ghi sẽ được cập nhật. Do đó, hãy cẩn thận không bỏ qua mệnh đề WHERE trừ khi hành vi không mong muốn là cập nhật tất cả các hàng của bảng.

Sau đó, hãy xem bảng tham chiếu SQL này để tham khảo nhanh.