Giới thiệu
Thêm và xóa bản ghi khỏi bảng là một số hoạt động phổ biến nhất mà cơ sở dữ liệu thực hiện. Việc thêm dữ liệu liên quan đến việc chỉ định tên bảng và cột mà bạn muốn thêm giá trị vào cũng như giá trị bạn muốn nhập vào mỗi trường. Xóa bản ghi bao gồm việc xác định đúng hàng hoặc các hàng và xóa chúng khỏi bảng.
Trong hướng dẫn này, chúng tôi sẽ trình bày cách sử dụng INSERT
trong SQL và DELETE
lệnh với PostgreSQL. Điều này bao gồm cú pháp cơ bản, cách trả về thông tin dữ liệu về dữ liệu đã được xử lý và cách thêm hoặc xóa nhiều hàng trong một câu lệnh.
Xem lại cấu trúc của bảng
Trước khi sử dụng INSERT
, bạn phải biết cấu trúc của bảng để có thể đáp ứng các yêu cầu do cột, kiểu dữ liệu và ràng buộc của bảng áp đặt. Có một số cách khác nhau để thực hiện việc này tùy thuộc vào ứng dụng khách cơ sở dữ liệu của bạn.
Nếu bạn đang sử dụng psql
ứng dụng dòng lệnh, cách đơn giản nhất để tìm thông tin này là sử dụng \d+
lệnh meta được tích hợp trong công cụ.
Ví dụ:để tìm cấu trúc của bảng có tên employee
, bạn sẽ nhập cái này:
\d+ employee
Table "public.employee" Column | Type | Collation | Nullable | Default | Storage | Stats target | Description-------------+-----------------------------+-----------+----------+-----------------------------------------------+----------+--------------+------------- employee_id | integer | | not null | nextval('employee_employee_id_seq'::regclass) | plain | | first_name | character varying(45) | | not null | | extended | | last_name | character varying(45) | | not null | | extended | | last_update | timestamp without time zone | | not null | now() | plain | |Indexes: "employee_pkey" PRIMARY KEY, btree (employee_id) "idx_employee_last_name" btree (last_name)Triggers: last_updated BEFORE UPDATE ON employee FOR EACH ROW EXECUTE FUNCTION last_updated()Access method: heap
Kết quả hiển thị tên cột, kiểu dữ liệu và giá trị mặc định của bảng, trong số những tên khác.
\d+
lệnh meta chỉ khả dụng với psql
khách hàng, vì vậy nếu bạn đang sử dụng một ứng dụng khách khác, bạn có thể phải truy vấn thông tin bảng trực tiếp. Bạn có thể nhận được hầu hết các thông tin liên quan với một truy vấn như sau:
SELECT column_name, data_type, column_default, is_nullable, character_maximum_lengthFROM information_schema.columns WHERE table_name ='employee';
column_name | data_type | column_default | is_nullable | character_maximum_length-------------+-----------------------------+-----------------------------------------------+-------------+-------------------------- employee_id | integer | nextval('employee_employee_id_seq'::regclass) | NO | first_name | character varying | | NO | 45 last_name | character varying | | NO | 45 last_update | timestamp without time zone | now() | NO |(4 rows)
Những điều này sẽ cung cấp cho bạn một ý tưởng tốt về cấu trúc của bảng để bạn có thể chèn các giá trị một cách chính xác.
Sử dụng INSERT
để thêm bản ghi mới vào bảng
INSERT
trong SQL được sử dụng để thêm các hàng dữ liệu vào một bảng hiện có. Khi bạn đã biết cấu trúc của bảng, bạn có thể tạo một lệnh khớp các cột của bảng với các giá trị tương ứng mà bạn muốn chèn cho bản ghi mới.
Cú pháp cơ bản của lệnh trông như sau:
INSERT INTO my_table(column1, column2)VALUES ('value1', 'value2');
Các cột trong danh sách cột tương ứng trực tiếp với các giá trị được cung cấp trong danh sách giá trị.
Theo mặc định, INSERT
lệnh trả về ID đối tượng (thường là 0) và số lượng hàng đã được chèn thành công:
INSERT 0 1
Ví dụ:để chèn một nhân viên mới vào employee
bảng liệt kê ở trên, chúng ta có thể nhập:
INSERT INTO employee(first_name, last_name)VALUES ('Bob', 'Smith');
INSERT 0 1
Tại đây, chúng tôi cung cấp các giá trị cho first_name
và last_name
trong khi để các cột khác được điền theo giá trị mặc định của chúng. Nếu bạn truy vấn bảng, bạn có thể thấy rằng bản ghi mới đã được thêm vào:
SELECT * FROM employee;
employee_id | first_name | last_name | last_update-------------+------------+-----------+---------------------------- 1 | Bob | Smith | 2020-08-19 21:07:00.952454(1 row)
Trả lại dữ liệu từ INSERT
tuyên bố
Nếu bạn muốn thêm thông tin về dữ liệu đã được thêm vào bảng, bạn có thể bao gồm RETURNING
mệnh đề ở cuối tuyên bố của bạn. RETURNING
mệnh đề chỉ định các cột để hiển thị các bản ghi vừa được chèn vào.
Ví dụ:để hiển thị tất cả các cột cho các bản ghi vừa được chèn vào, bạn có thể nhập một cái gì đó như sau:
INSERT INTO my_table(column_name, column_name_2)VALUES ('value', 'value2')RETURNING *;
column_name | column_name_2-------------+--------------- value | value2(1 row)INSERT 0 1
Sử dụng employee
bảng này sẽ giống như sau:
INSERT INTO employee(first_name, last_name)VALUES ('Sue', 'Berns')RETURNING *;
employee_id | first_name | last_name | last_update-------------+------------+-----------+-------------------------- 2 | Sue | Berns | 2020-08-19 21:15:01.7622(1 row)INSERT 0 1
Bạn cũng có thể chọn chỉ trả lại các cột cụ thể từ các phần chèn. Ví dụ:ở đây, chúng tôi chỉ quan tâm đến ID của nhân viên mới:
INSERT INTO employee(first_name, last_name)VALUES ('Delores', 'Muniz')RETURNING employee_id;
employee_id ------------- 3(1 row)INSERT 0 1
Như thường lệ, bạn cũng có thể sử dụng bí danh cột để thay đổi tên cột trong đầu ra:
INSERT INTO employee(first_name, last_name)VALUES ('Simone', 'Kohler')RETURNING employee_id AS "Employee ID";
Employee ID------------- 4(1 row)INSERT 0 1
Sử dụng INSERT
để thêm nhiều hàng cùng một lúc
Chèn các bản ghi một câu lệnh tại một thời điểm tốn nhiều thời gian hơn và kém hiệu quả hơn việc chèn nhiều hàng cùng một lúc. PostgreSQL cho phép bạn chỉ định nhiều hàng để thêm vào cùng một bảng. Mỗi hàng mới được đóng gói trong dấu ngoặc đơn, với mỗi tập hợp các dấu ngoặc đơn được phân tách bằng dấu phẩy.
Cú pháp cơ bản để chèn nhiều bản ghi trông như sau:
INSERT INTO my_table(column_name, column_name_2)VALUES ('value', 'value2'), ('value3', 'value4'), ('value5', 'value6');
Đối với employee
bảng mà chúng tôi đang tham chiếu, bạn có thể thêm bốn nhân viên mới trong một tuyên bố duy nhất bằng cách nhập:
INSERT INTO employee(first_name, last_name)VALUES ('Abigail', 'Spencer'), ('Tamal', 'Wayne'), ('Katie', 'Singh'), ('Felipe', 'Espinosa');
INSERT 0 4
Sử dụng DELETE
để xóa các hàng khỏi bảng
DELETE
của SQL lệnh được sử dụng để xóa các hàng khỏi bảng, hoạt động như một hành động bổ sung cho INSERT
. Để xóa các hàng khỏi bảng, bạn phải xác định các hàng bạn muốn nhắm mục tiêu bằng cách cung cấp tiêu chí đối sánh trong WHERE
mệnh đề.
Cú pháp cơ bản giống như sau:
DELETE FROM my_tableWHERE <condition>;
Ví dụ:đối với mọi hàng trong employee
của chúng tôi bảng có first_name
đặt thành Abigail
, chúng ta có thể nhập cái này:
DELETE FROM employeeWHERE first_name = 'Abigail';
DELETE 1
Giá trị trả về ở đây cho biết rằng DELETE
lệnh đã được xử lý với một hàng bị xóa.
Trả lại dữ liệu từ DELETE
tuyên bố
Như với INSERT
, bạn có thể trả lại các hàng bị ảnh hưởng hoặc các cột cụ thể từ các hàng đã xóa bằng cách thêm RETURNING
mệnh đề:
DELETE FROM my_tableWHERE <condition>RETURNING *;
Ví dụ:chúng tôi có thể xác minh rằng bản ghi chính xác đã bị xóa bằng cách trả lại tất cả các cột từ employee
đã xóa tại đây:
DELETE FROM employeeWHERE last_name = 'Smith'RETURNING *;
employee_id | first_name | last_name | last_update-------------+------------+-----------+---------------------------- 1 | Bob | Smith | 2020-08-19 21:07:00.952454(1 row)DELETE 1
Sử dụng DELETE
để xóa nhiều hàng cùng một lúc
Bạn có thể xóa nhiều mục cùng lúc với DELETE
bằng cách thao tác các tiêu chí lựa chọn được chỉ định trong WHERE
mệnh đề.
Ví dụ:để loại bỏ nhiều hàng theo ID, bạn có thể nhập một cái gì đó như sau:
DELETE FROM employeeWHERE employee_id in (3,4)RETURNING *;
employee_id | first_name | last_name | last_update -------------+------------+-----------+---------------------------- 3 | Delores | Muniz | 2020-08-19 21:17:06.943608 4 | Simone | Kohler | 2020-08-19 21:19:19.298833(2 rows)DELETE 2
Bạn thậm chí có thể bỏ đi WHERE
mệnh đề xóa tất cả các hàng khỏi một bảng nhất định:
DELETE FROM employeeRETURNING *;
employee_id | first_name | last_name | last_update-------------+------------+-----------+---------------------------- 2 | Sue | Berns | 2020-08-19 21:15:01.7622 6 | Tamal | Wayne | 2020-08-19 22:11:53.408531 7 | Katie | Singh | 2020-08-19 22:11:53.408531 8 | Filipe | Espinosa | 2020-08-19 22:11:53.408531(4 rows)DELETE 4
Tuy nhiên, hãy lưu ý rằng sử dụng DELETE
để làm trống một bảng dữ liệu không hiệu quả bằng TRUNCATE
lệnh này có thể xóa dữ liệu mà không cần quét bảng.
Kết luận
Trong bài viết này, chúng tôi đã giới thiệu một số lệnh quan trọng nhất để kiểm soát dữ liệu nào trong các bảng PostgreSQL của bạn. INSERT
có thể được sử dụng để thêm dữ liệu mới vào bảng, trong khi DELETE
lệnh chỉ định hàng nào nên được loại bỏ. Cả hai lệnh đều có thể trả về các hàng mà chúng ảnh hưởng và có thể hoạt động trên nhiều hàng cùng một lúc.
Hai lệnh này là cơ chế chính được sử dụng để quản lý việc tăng hoặc giảm số lượng bản ghi mà bảng của bạn chứa. Nắm bắt được cú pháp cơ bản của chúng cũng như cách kết hợp chúng với các mệnh đề khác sẽ cho phép bạn điền và làm sạch bảng của mình khi cần thiết.