2010-02-18 5 views
6

Tôi đang cố gắng ghi nhớ một số cú pháp sql và tôi đã nhận được cú pháp TABLE ADD CONTER TĂNG ALTER xuống. Tôi tin rằng tôi là chính xác khi tôi nói rằng khi bạn sử dụng cú pháp này để thêm một khóa NGOẠI HỐI hoặc hạn chế CHÍNH PRIMARY, máy chủ sql tự động tạo ra các chỉ mục để hỗ trợ các hoạt động hạn chế. (Điều đó đúng ... hay là nó chỉ đúng trên PK chứ không phải FK?)Khi giảm một ràng buộc, các chỉ số hỗ trợ cũng sẽ bị loại bỏ?

Nếu vậy, khi bạn sử dụng cú pháp ALTER TABLE DROP CONSTRAINT ... là các chỉ mục hỗ trợ tự động bị giảm không? Các chỉ số hỗ trợ tiềm ẩn này có bị giảm một cách rõ ràng không? Nếu vậy, CONSTRAINT sẽ tự động bị xóa?

Tôi chỉ muốn biết nó hoạt động như thế nào "dưới bìa". Googling đã không giúp đỡ. Tôi tưởng tượng tôi có thể đã truy vấn một số bảng sys để khám phá sự thật nhưng tôi nghĩ rằng tôi sẽ thử ở đây để thay thế.

Cảm ơn sự giúp đỡ của bạn.

Seth

Trả lời

2

Khi bạn thêm khóa chính, chỉ mục duy nhất được thêm vào thực tế. Liệu sự bổ sung đó có làm cho chỉ mục mới được nhóm lại hay không phụ thuộc vào việc bạn có chỉ định rằng nó không được nhóm hay không. Nếu thêm một ràng buộc khóa chính, bạn không chỉ định rằng nó được nhóm lại hay không phân cụm, nó sẽ được nhóm nếu một ràng buộc hoặc chỉ mục nhóm không tồn tại trên bảng nếu không nó sẽ không được nhóm lại.

Khi bạn thêm khóa ngoại, không có chỉ mục nào được tạo tự động.

Khi bạn thả một ràng buộc, bất kỳ chỉ mục nào được tạo ra do kết quả của việc tạo ràng buộc sẽ bị loại bỏ. Tuy nhiên, nếu bạn cố gắng bỏ ràng buộc khóa duy nhất hoặc khóa chính và có các ràng buộc khóa ngoài tham chiếu đến nó, bạn sẽ gặp lỗi.

Không thể xóa chỉ mục được tạo do tạo ràng buộc bằng DROP INDEX.

2

Một ràng buộc khoá chính sẽ bổ sung thêm một nhóm chỉ số trên bảng, nếu một người chưa hề tồn tại nếu không một độc đáo phi clustered index sẽ được tạo ra cho nó.

Việc bỏ ràng buộc khóa chính cũng sẽ làm giảm chỉ mục cơ bản.

Ràng buộc khóa ngoài sẽ không thêm chỉ mục.

Việc bỏ ràng buộc khóa ngoài sẽ không làm gì đối với chỉ mục.

Khóa ngoại không có liên quan gì đến chỉ mục.

+0

Không phải lúc nào cũng đúng. Nếu đã có một chỉ mục nhóm trên bảng, ràng buộc PRIMARY KEY sẽ được thực thi bởi một chỉ mục không độc quyền duy nhất. –

+0

Trong các khóa ngoại SQL Server 2008 có điểm chung với các chỉ mục. Tôi không thể thả một chỉ mục (và nó không phải là chỉ số khóa chính), bởi vì nếu được tham chiếu bằng khóa ngoài. – LukLed

+1

@LukLed, khi bạn có mối quan hệ cha-con từ 1 đến nhiều được thực thi bằng FK, cha mẹ cần phải là duy nhất, nếu bạn cố gắng loại bỏ ràng buộc duy nhất trên phụ huynh, nó sẽ ném một lỗi. –

2

FK không tự động nhận chỉ mục trong SQL Server, nếu bạn muốn một chỉ mục bạn cần thêm nó! Khi thả FK, bạn không làm giảm chỉ mục, bạn sẽ cần phải tự mình thả chỉ mục.

2

Chỉ số thực thi ràng buộc UNIQUE sẽ bị loại bỏ, một chỉ mục hỗ trợ ràng buộc FK sẽ không tự động bị xóa. Nó cũng sẽ không được tạo tự động.