Điều khiển dữ liệu

Một phần của tài liệu Tài liệu quản trị postgresql (Trang 106 - 109)

Chương trước đã thảo luận cách tạo ra các bảng và các cấu trúc khác để lưu trữ dữ liệu của bạn. Bây giờ đã tới lúc điền dữ liệu vào các bảng. Chương này đề cập tới cách chèn, cập nhật và xóa các dữ liệu của bảng. Chương sau chương này cuối cùng sẽ giải thích cách trích xuất dữ liệu bền lâu từ cơ sở dữ liệu.

6.1. Chèn dữ liệu

Khi một bảng được tạo ra, nó không có dữ liệu. Điều đầu tiên phải làm trước khi một cơ sở dữ liệu có thể được sử dụng nhiều là chèn dữ liệu vào. Dữ liệu, về khái niệm, được chèn vào từng hàng một theo thời gian. Tất nhiên bạn cũng có thể chèn nhiều hơn một hàng, nhưng không có cách nào để chèn ít hơn một hàng cả. Thậm chí nếu bạn biết chỉ một số giá trị cột, thì một hàng hoàn chỉnh phải được tạo ra.

Để tạo ra một hàng mới, hãy sử dụng lệnh chèn INSERT. Lệnh này đòi hỏi tên bảng và các giá trị cột. Ví dụ, hãy xem xét bảng các sản phẩm từ Chương 5:

CREATE TABLE products ( product_no integer, name text,

price numeric );

Một lệnh ví dụ để chèn một hàng có thể là:

INSERT INTO products VALUES (1, ’Cheese’, 9.99);

Các giá trị dữ liệu được liệt kê theo trật tự trong đó các cột xuất hiện trong bảng, cách nhau bằng các dấu phẩy.

Thông thường, các giá trị dữ liệu sẽ là các hằng, nhưng các biểu thức vô hướng cũng được phép. Cú pháp ở trên có nhược điểm là bạn cần biết thứ tự của các cột trong bảng. Để tránh điều này bạn cũng có thể liệt kê các cột một cách rõ ràng. Ví dụ, cả 2 lệnh sau có cùng hiệu quả như lệnh ở trên:

INSERT INTO products (product_no, name, price) VALUES (1, ’Cheese’, 9.99);

INSERT INTO products (name, price, product_no) VALUES (’Cheese’, 9.99, 1);

Nhiều người sử dụng coi nó là thực tiễn tốt để luôn liệt kê các tên cột.

Nếu bạn không có các giá trị cho tất cả các cột, thì bạn có thể bỏ qua một số chúng. Trong trường hợp đó, các cột sẽ được điền với các giá trị mặc định. Ví dụ:

INSERT INTO products (product_no, name) VALUES (1, ’Cheese’);

INSERT INTO products VALUES (1, ’Cheese’);

Mẫu thứ 2 là một mở rộng của PostgreSQL. Nó điền các cột từ trái qua với càng nhiều giá trị càng tốt, và phần còn lại sẽ được mặc định.

Để làm rõ, bạn cũng có thể yêu cầu các giá trị mặc định một cách rõ ràng, cho các cột riêng rẽ hoặc cho toàn bộ hàng:

INSERT INTO products (product_no, name, price) VALUES (1, ’Cheese’, DEFAULT);

INSERT INTO products DEFAULT VALUES;

Bạn có thể chèn nhiều hàng trong một lệnh duy nhất;

INSERT INTO products (product_no, name, price) VALUES (1, ’Cheese’, 9.99),

(2, ’Bread’, 1.99), (3, ’Milk’, 2.99);

Mẹo: Khi chèn nhiều dữ liệu cùng một lúc, xem xét sử dụng lệnh COPY. Không mềm dẻo như lệnh INSERT, nhưng là có hiệu quả hơn. Hãy tham chiếu tới Phần 14.4 để có thêm thông tin về việc cải thiện hiệu năng tải theo bó.

6.2. Cập nhật dữ liệu

Sửa đổi các dữ liệu đã có rồi trong cơ sở dữ liệu được tham chiếu tới như là việc cập nhật. Bạn có thể cập nhật các hàng riêng rẽ, tất cả các hàng trong một bảng, hoặc một tập con của tất cả các hàng.

Từng cột có thể được cập nhật một cách riêng rẽ; các cột khác sẽ không bị ảnh hưởng.

Để cập nhật các hàng đang tồn tại, hãy sử dụng lệnh cập nhật UPDATE. Lệnh này đòi hỏi 3 mẩu tin:

1. Tên bảng và cột để cập nhật 2. Giá trị mới của cột

3. (Các) hàng nào để cập nhật

Nhớ lại từ Chương 5 rằng SQL, nói chung, không cung cấp một mã định danh độc nhất cho các hàng. Vì thế không luôn có khả năng để chỉ định trực tiếp hàng nào để cập nhật. Thay vào đó, bạn chỉ định các điều kiện nào một hàng phải đáp ứng để được cập nhật. Chỉ nếu bạn có một khóa chủ trong bảng (độc lập với việc liệu bạn đã khai báo nó hay chưa) có thể bạn đề cập một cách tin cậy các hàng riêng rẽ bằng việc chọn một điều kiện mà trùng khớp với khóa chủ. Các công cụ truy cập cơ sở dữ liệu đồ họa dựa vào thực tế này để cho phép bạn cập nhật các hàng một cách riêng rẽ.

Ví dụ, lệnh này cập nhật tất cả các sản phẩm mà có giá là 5 sẽ có giá lên là 10:

UPDATE products SET price = 10 WHERE price = 5;

Điều này có thể làm cho 0, 1 hoặc nhiều hàng sẽ được cập nhật. Không là lỗi để cố gắng một cập nhật mà không khớp với hàng nào cả.

Hãy nhìn vào lệnh đó một cách chi tiết. Trước hết là từ khóa UPDATE theo sau là tên bảng. Thông thường, tên bảng có thể có đủ điều kiện như là sơ đồ, nếu không thì nó được tra trong đường dẫn.

Cạnh từ khóa SET đi theo sau là tên cột, một dấu bằng (=), và giá trị cột mới. Giá trị cột mới đó có thể là bất kỳ biểu thức vô hướng nào, không chỉ là một hằng số. Ví dụ, nếu bạn muốn nâng giá thành của tất cả các sản phẩm lên 10% thì bạn có thể sử dụng:

UPDATE products SET price = price * 1.10;

Như bạn thấy, biểu thức cho giá trị mới có thể tham chiếu tới (các) giá trị đang tồn tại trong hàng.

Chúng ta cũng để lại mệnh đề WHERE. Nếu nó bị bỏ qua, thì có nghĩa là tất cả các hàng trong bảng

được cập nhật. Nếu nó hiện diện, thì chỉ những hàng nào mà khớp với điều kiện WHERE sẽ được cập nhật. Lưu ý rằng dấu bằng trong mệnh đề SET là một chỉ định trong khi dấu hiệu trong mệnh đề

WHERE là một so sánh, nhưng điều này không tạo ra bất kỳ sự tù mù nào. Tất nhiên, điều kiện

WHERE không phải là một kiểm thử về sự ngang bằng nhau. Nhiều toán tử khác cũng sẵn sàng (xem Chương 9). Nhưng biểu thức đó cần phải đánh giá theo một kết quả Boolean.

Bạn có thể cập nhật nhiều hơn một cột trong một lệnh UPDATE bằng việc liệt kê nhiều hơn một chỉ định trong mệnh đề SET. Ví dụ:

UPDATE mytable SET a = 5, b = 3, c = 1 WHERE a > 0;

6.3. Xóa dữ liệu

Cho tới nay chúng ta đã giải thích cách để thêm dữ liệu vào các bảng và cách để thay đổi dữ liệu.

Điều còn lại là thảo luận cách để loại bỏ dữ liệu mà không còn cần thiết nữa. Hệt như việc thêm dữ liệu chỉ có khả năng trong toàn bộ các hàng, bạn chỉ có thể loại bỏ toàn bộ các hàng khỏi một bảng.

Trong phần trước chúng ta đã giải thích rằng SQL không đưa ra cách thức để trực tiếp đề cập tới các hàng riêng rẽ. Vì thế, việc loại bỏ các hàng chỉ có thể được thực hiện bằng việc chỉ định các điều kiện mà các hàng sẽ được loại bỏ phải trùng khớp. Nếu bạn có một khóa chủ trong bảng thì bạn có thể chỉ định hàng chính xác. Nhưng bạn cũng có thể loại bỏ nhóm các hàng khớp với một điều kiện, hoặc bạn có thể loại bỏ tất cả các hàng trong một bảng cùng một lần.

Bạn hãy sử dụng lệnh xóa DELETE để loại bỏ các hàng; cú pháp rất tương tự như với lệnh UPDATE. Ví dụ, để loại bỏ tất cả các hàng khỏi bảng các sản phẩm mà có giá là 10, hãy sử dụng:

DELETE FROM products WHERE price = 10;

Nếu bạn đơn giản viết:

DELETE FROM products;

thì tất cả các hàng trong bảng đó sẽ bị xóa! Vấn đề còn lại là của lập trình viên.

Một phần của tài liệu Tài liệu quản trị postgresql (Trang 106 - 109)

Tải bản đầy đủ (PDF)

(372 trang)