Một giải pháp khả thi là chỉ cần sử dụng DROP NẾU TỒN TẠI trước khi tạo ràng buộc mới.
ALTER TABLE foo DROP CONSTRAINT IF EXISTS bar;
ALTER TABLE foo ADD CONSTRAINT bar ...;
Có vẻ dễ dàng hơn so với việc cố gắng truy vấn information_schema hoặc danh mục, nhưng có thể chậm trên các bảng lớn vì nó luôn tạo lại ràng buộc.
Chỉnh sửa 2015-07-13:Kev đã chỉ ra trong câu trả lời của mình rằng giải pháp của tôi tạo ra một cửa sổ ngắn khi ràng buộc không tồn tại và không được thực thi. Mặc dù điều này là đúng, nhưng bạn có thể tránh một cửa sổ như vậy khá dễ dàng bằng cách gói cả hai câu lệnh trong một giao dịch.