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
DEFAULThoặ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 đề
WHEREtrong lệnhUPDATElà 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ếtUPDATE 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ểROLLBACKnế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ơnDELETErất nhiều nhưng không thể dùng mệnh đềWHEREvà 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ùngSELECT *trong mã nguồn. -
UPDATE & DELETE: Sửa và xóa dữ liệu. Luôn luôn kiểm tra kỹ mệnh đề
WHEREtrướ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