Sử dụng CTE sửa đổi dữ liệu để xâu chuỗi ba CHÈN của bạn. Một cái gì đó như thế này:
WITH ins1 AS (
INSERT INTO table1 (username, name, surname)
VALUES ('johnee','john','smith')
RETURNING user_id
)
, ins2 AS (
INSERT INTO table2 (user_id, password)
SELECT ins1.user_id, 'secret'
FROM ins1 -- nothing to return here
)
INSERT INTO table3 (user_id, adress, city, phone)
SELECT ins1.user_id, ...
FROM ins1
RETURNING user_id;
-
Thông thường, tốt nhất là thêm danh sách định nghĩa cột cho
INSERT
s (trừ trường hợp đặc biệt). Ngoài ra, nếu cấu trúc bảng thay đổi, mã của bạn có thể bị hỏng theo những cách đáng ngạc nhiên. -
Tôi đã bỏ qua các cột mà bạn chỉ cần nhập
DEFAULT
. Các giá trị mặc định được chèn tự động. Ngắn hơn, cùng một kết quả. -
RETURNING
cuối cùng, tùy chọn trả vềuser_id
kết quả - rõ ràng là từ một chuỗi hoặc một số mặc định khác. Nó thực sự làuser_id
từtable3
, nhưng điều đó vẫn tương tự trừ khi bạn có một số kích hoạt hoặc ma thuật khác can thiệp.
Tìm hiểu thêm về CTE sửa đổi dữ liệu (còn gọi là "có thể ghi"):
- Các truy vấn loại SELECT có phải là loại duy nhất có thể được lồng vào nhau không?