0

Apache Derby Bài 11: Thao tác dữ liệu cơ bản: INSERT, UPDATE, DELETE và SELECT

1. DML (Data Manipulation Language) là gì?

Ở các bài trước, chúng ta đã sử dụng DDL (Data Definition Language) để định nghĩa cấu trúc bảng và các ràng buộc. Trong bài này, chúng ta sẽ bước vào nhóm lệnh DML (Data Manipulation Language) – ngôn ngữ thao tác dữ liệu. Đây là 4 nhóm lệnh cốt lõi mà bất kỳ ứng dụng nào cũng sử dụng để thực hiện quy trình CRUD (Create, Read, Update, Delete).

Trong Apache Derby, các lệnh DML tuân thủ nghiêm ngặt chuẩn ANSI SQL, đảm bảo tính nhất quán và dễ dàng chuyển đổi sang các hệ quản trị cơ sở dữ liệu khác.

2. Thêm dữ liệu mới (INSERT)

Lệnh INSERT INTO dùng để thêm một hoặc nhiều bản ghi mới vào bảng.

Cú pháp cơ bản

Bạn cần chỉ định rõ danh sách các cột sẽ nhận dữ liệu để tránh lỗi nếu cấu trúc bảng bị thay đổi sau này:

SQL

INSERT INTO ten_bang (cot_1, cot_2, cot_3) 
VALUES (gia_tri_1, gia_tri_2, gia_tri_3);

Chèn nhiều dòng cùng lúc (Multi-row Insert)

Từ phiên bản Derby 10.4 trở đi, bạn có thể chèn nhiều dòng trong một câu lệnh duy nhất để tối ưu hiệu suất I/O:

SQL

INSERT INTO sach (ma_sach, tieu_de, the_loai, gia_ban) VALUES 
('S01', 'Lap trinh Java', 'Giao trinh', 150000.00),
('S02', 'Co so du lieu', 'Giao trinh', 120000.00),
('S03', 'Ky nang mem', 'Phat trien ban than', 90000.00);

Lưu ý: Các cột có ràng buộc DEFAULT hoặc tự động tăng (Identity) có thể được bỏ qua trong danh sách cột khai báo, Derby sẽ tự động điền giá trị cho chúng.

3. Truy vấn dữ liệu (SELECT)

Lệnh SELECT dùng để trích xuất dữ liệu. Lệnh này không làm thay đổi dữ liệu gốc trong database.

Lấy toàn bộ cột

Dấu sao (*) đại diện cho tất cả các cột trong bảng. Cách này tiện lợi khi gỡ lỗi nhưng không được khuyến nghị trong mã nguồn Java thực tế vì gây lãng phí bộ nhớ và băng thông.

SQL

SELECT * FROM sach;

Lấy các cột cụ thể và kết hợp bộ lọc WHERE

Mệnh đề WHERE giúp lọc ra những bản ghi thỏa mãn một điều kiện logic nhất định.

SQL

SELECT tieu_de, gia_ban 
FROM sach 
WHERE the_loai = 'Giao trinh' AND gia_ban < 140000;

Derby hỗ trợ đầy đủ các toán tử so sánh (=, <, >, <=, >=, <>) và toán tử logic (AND, OR, NOT, IN, LIKE).

4. Cập nhật dữ liệu (UPDATE)

Lệnh UPDATE dùng để sửa đổi dữ liệu của các bản ghi đã tồn tại.

SQL

UPDATE ten_bang 
SET cot_1 = gia_tri_moi_1, cot_2 = gia_tri_moi_2 
WHERE dieu_kien;

Ví dụ: Tăng giá bán của cuốn sách có mã S01 lên thêm 10%:

SQL

UPDATE sach 
SET gia_ban = gia_ban * 1.1 
WHERE ma_sach = 'S01';

Việc quên mệnh đề WHERE trong lệnh UPDATE là một trong những thảm họa phổ biến nhất của lập trình viên. Nếu bạn viết UPDATE sach SET gia_ban = 0;, toàn bộ sách trong hệ thống sẽ bị đổi giá về 0.

5. Xóa dữ liệu (DELETE)

Lệnh DELETE loại bỏ hoàn toàn các bản ghi khỏi bảng.

SQL

DELETE FROM sach 
WHERE tieu_de LIKE 'Ky nang%';

Khác biệt giữa DELETE và TRUNCATE:

  • DELETE: Xóa từng dòng một, có ghi lại nhật ký giao dịch (có thể ROLLBACK nếu đang trong một Transaction), và kích hoạt các Trigger nếu có.

  • TRUNCATE TABLE ten_bang: Xóa sạch toàn bộ dữ liệu trong bảng ngay lập tức bằng cách giải phóng các trang dữ liệu (Data Pages). Thao tác này nhanh hơn DELETE rất nhiều nhưng không thể dùng mệnh đề WHERE và không kích hoạt Trigger.

6. Tổng kết

  • INSERT: Thêm dòng mới. Khuyến khích liệt kê rõ ràng tên cột.

  • SELECT: Đọc dữ liệu. Nên kết hợp WHERE để tối ưu kết quả trả về, tránh dùng SELECT * trong mã nguồn.

  • UPDATE & DELETE: Sửa và xóa dữ liệu. Luôn luôn kiểm tra kỹ mệnh đề WHERE trước khi thực thi để tránh tác động ngoài ý muốn lên toàn bộ bảng.

Ở bài tiếp theo, chúng ta sẽ mở rộng khả năng của lệnh SELECT để phân tích và thống kê số liệu: Apache Derby Bài 12: Truy vấn nâng cao: Sắp xếp, nhóm dữ liệu (ORDER BY, GROUP BY, HAVING).


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí