Tôi có một bảng có tên là giải thưởng. Làm thế nào tôi có thể gắn kết Trình kích hoạt trong PostgreSQL trong đó mỗi lần chèn trong bảng giải thưởng cập nhật một bảng khác?Chèn trình kích hoạt để cập nhật bảng khác bằng cách sử dụng PostgreSQL
Trả lời
Bạn muốn số documenation for PL/PgSQL triggers, trong đó thảo luận về trường hợp này trong số những trường hợp khác. Tổng quan documentation on triggers cũng có thể hữu ích.
Bạn có thể sử dụng kích hoạt BEFORE
hoặc AFTER
cho việc này. Tôi có thể sử dụng một kích hoạt AFTER
để kích hoạt của tôi thấy phiên bản cuối cùng của hàng được chèn vào, mặc dù. Bạn muốn FOR EACH ROW
, tất nhiên.
Hey @ Craig Ringer là mục đích của FOR EACH ROW cho các đợt chèn? – rosenthal
@rosenthal Huh? Các trình kích hoạt 'FOR EACH STATEMENT' không có quyền truy cập vào hàng' NEW'. Vì vậy, ngay cả khi bạn đang làm một hàng duy nhất 'INSERT' nó sẽ không hữu ích cho việc này. –
Tôi không có ý đó, tha thứ cho sự lựa chọn tội nghiệp của tôi bằng lời nói. Ý tôi là FOR EACH ROW làm gì? Tôi đã xem tài liệu cho Postgres và hiểu nó ngay bây giờ. "Một kích hoạt được đánh dấu CHO M EI ROW được gọi một lần cho mỗi hàng mà các hoạt động sửa đổi." – rosenthal
Nhấp vào liên kết sau và bạn sẽ nhận được câu trả lời.
http://www.postgresql.org/docs/9.4/static/plpgsql-trigger.html
Ở đây chúng ta có hai bảng tên table1
và table2
. Sử dụng trình kích hoạt, tôi sẽ cập nhật table2
khi chèn vào table1
.
Tạo các bảng
CREATE TABLE table1
(
id integer NOT NULL,
name character varying,
CONSTRAINT table1_pkey PRIMARY KEY (id)
)
CREATE TABLE table2
(
id integer NOT NULL,
name character varying
)
cò Chức năng
CREATE OR REPLACE FUNCTION function_copy() RETURNS TRIGGER AS
$BODY$
BEGIN
INSERT INTO
table2(id,name)
VALUES(new.id,new.name);
RETURN new;
END;
$BODY$
language plpgsql;
cò
CREATE TRIGGER trig_copy
AFTER INSERT ON table1
FOR EACH ROW
EXECUTE PROCEDURE function_copy();
Trong kích hoạt Chức năng như thế nào das nó biết để chèn các giá trị từ bảng một? Chúng ta không cần phải viết "từ table1" sau "giá trị (new.id, new.name)"? –
- 1. Trình kích hoạt PostgreSQL trên Chèn hoặc Cập nhật
- 2. Kích hoạt MySql, cập nhật bảng khác trên chèn
- 3. T-SQL Chèn Trình kích hoạt để chèn, cập nhật nếu điều kiện trên nhiều bảng
- 4. Tạo trình kích hoạt PostgreSQL bằng cách sử dụng JDBC
- 5. Cập nhật/Chèn vào bảng bằng cách sử dụng SQLCeResultSet
- 6. Trình kích hoạt chỉ cập nhật hàng được chèn
- 7. Sử dụng trình kích hoạt để ngừng chèn hoặc cập nhật
- 8. Tạo trình kích hoạt chèn giá trị vào bảng mới khi cột được cập nhật
- 9. Trình kích hoạt Oracle Cập nhật một trường trên một Chèn hoặc Cập nhật
- 10. PostgreSQL Kích hoạt và các hàng được cập nhật
- 11. Kích hoạt MSSql trên Cập nhật Chèn (Updatecounter)
- 12. Trình kích hoạt Oracle để ghi tất cả Chèn/Cập nhật vào Tệp
- 13. mysql sau khi chèn kích hoạt mà cập nhật cột
- 14. Nhận tên cột được cập nhật hiện tại để sử dụng trong trình kích hoạt
- 15. Chèn/Cập nhật bản ghi bằng cách sử dụng mongoose
- 16. Cập nhật trình kích hoạt T-SQL
- 17. Cái gì nên là bảng chứa hàng cập nhật cho kích hoạt cập nhật
- 18. Cập nhật bảng kích hoạt sau khi cập nhật trên cùng một bảng
- 19. Nhiều câu lệnh chèn/cập nhật bên trong trình kích hoạt?
- 20. Trình kích hoạt chèn giá trị cũ- giá trị đã được cập nhật
- 21. Trình kích hoạt chống cháy của MySQL cho cả hai nút Chèn và Cập nhật
- 22. Bản sắc của hàng được chèn/cập nhật trong trình kích hoạt
- 23. Tần suất cập nhật kích hoạt kích hoạt bản cập nhật nhiều bản ghi?
- 24. Cập nhật giá trị N cao nhất bằng cách sử dụng PostgreSQL
- 25. Làm thế nào để lập trình một trình kích hoạt MySQL để chèn hàng vào một bảng khác?
- 26. Trình kích hoạt MYSQL hoạt động nếu tôi sử dụng 'sau khi cập nhật' nhưng không hoạt động 'sau khi chèn'?
- 27. CẬP NHẬT Hàng Tương tự Sau khi CẬP NHẬT trong Trình kích hoạt
- 28. Tạo trình kích hoạt mà cập nhật một cột trên một bảng khi một cột trong bảng khác được cập nhật
- 29. Tôi có thể cập nhật Mới vào trước khi chèn trình kích hoạt trong sqlite không?
- 30. Làm cách nào để tăng tốc các hoạt động cập nhật/thay thế trong PostgreSQL?
Ông có thể cung cấp một số mor e chi tiết? Đây có phải là "bảng khác", một bảng riêng biệt hay nhiều bảng dựa trên một số giá trị của một số trường trong phần thưởng. – jcater
http://www.postgresql.org/docs/8.1/static/triggers.html – ertx
@ertx Tốt hơn để liên kết đến/current/doc thay vì /8.1/ doc, đó là * cực kỳ * lỗi thời. –