PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để thêm vào xóa các ràng buộc tầng?

Tôi khá chắc rằng bạn không thể chỉ cần thêm on delete cascade đối với một ràng buộc khóa ngoại hiện có. Bạn phải loại bỏ ràng buộc trước, sau đó thêm phiên bản chính xác. Trong SQL chuẩn, tôi tin rằng cách dễ nhất để làm điều này là

  • bắt đầu một giao dịch,
  • bỏ khóa ngoại,
  • thêm khóa ngoại với on delete cascade và cuối cùng
  • cam kết giao dịch

Lặp lại cho từng khóa ngoại bạn muốn thay đổi.

Nhưng PostgreSQL có một phần mở rộng không chuẩn cho phép bạn sử dụng nhiều mệnh đề ràng buộc trong một câu lệnh SQL duy nhất. Ví dụ

alter table public.scores
drop constraint scores_gid_fkey,
add constraint scores_gid_fkey
   foreign key (gid)
   references games(gid)
   on delete cascade;

Nếu bạn không biết tên của ràng buộc khóa ngoại mà bạn muốn loại bỏ, bạn có thể tra cứu nó trong pgAdminIII (chỉ cần nhấp vào tên bảng và xem DDL hoặc mở rộng phân cấp cho đến khi bạn thấy "Các ràng buộc"), hoặc bạn có thể truy vấn lược đồ thông tin.

select *
from information_schema.key_column_usage
where position_in_unique_constraint is not null


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Việc sử dụng trình tự PostgreSQL ở chế độ ngủ đông không ảnh hưởng đến bảng trình tự

  2. Trạng thái hiện tại của quản lý sao lưu mã nguồn mở cho PostgreSQL

  3. Làm cách nào để bỏ tất cả các bảng trong cơ sở dữ liệu PostgreSQL?

  4. PostgreSQL, CHỌN từ id tối đa

  5. Bắt đầu từ một ngày trong PostgreSQL