2009-10-30 31 views

Trả lời

32

Mấu chốt chính Bạn có thể là một cột trong một bảng.

Khóa chính cần giá trị duy nhất, cần phải đến từ đâu đó.

Trình tự là một tính năng của một số sản phẩm cơ sở dữ liệu chỉ tạo các giá trị duy nhất. Nó chỉ tăng giá trị và trả về giá trị đó. Điều đặc biệt về nó là: không có cách ly giao dịch, do đó, một số giao dịch không thể có được cùng một giá trị, sự gia tăng cũng không được khôi phục. Nếu không có trình tự cơ sở dữ liệu thì rất khó để tạo ra các số gia tăng duy nhất.

Các sản phẩm cơ sở dữ liệu khác hỗ trợ cột được tự động khởi tạo với số gia tăng.

Có các cách khác để tạo các giá trị duy nhất cho các khóa chính, ví dụ: Guids.

+0

Nếu không có cách ly giao dịch, thì làm cách nào để sử dụng nó? – rapt

+4

Không có cách ly giao dịch cho việc tạo các id. Nó luôn trả về giá trị tiếp theo của chuỗi. Việc tách biệt giao dịch có nghĩa là giao dịch song song sẽ nhận được cùng một giá trị hoặc một giao dịch cần chờ giao dịch kia thực hiện trước khi nó có thể nhận được giá trị tiếp theo. Điều này là không cần thiết cũng không hữu ích. –

3

Trình tự sẽ cho phép bạn điền mã khóa chính với số duy nhất, được đăng theo thứ tự.

Đó là khác biệt so với một khóa chính serial hoặc auto_incremement theo nghĩa là:

  • Nó là một đối tượng cơ sở dữ liệu thực tế (bạn cần phải tạo ra nó):

    sql> create sequence NAME_OF_YOUR_SEQUENCE;

  • Bạn có thể gán quyền độc lập cho nó cho người dùng cơ sở dữ liệu khác nhau:

    sql> grant select on NAME_OF_YOUR_SEQUENCE to NAME_OF_YOUR_USER;

  • Bạn có thể sử dụng để có số duy nhất khác nhau giữa nhiều bảng (không chỉ một bảng). Giả sử bạn có bốn bảng với các khóa chính số và bạn muốn số duy nhất trong số bốn bảng đó. Bạn có thể sử dụng một chuỗi cho điều đó, mà không phải lo lắng về việc triển khai các cơ chế khóa để thực hiện nó 'bằng tay'.

  • Bạn có thể thay đổi số lượng của nó đối với bất kỳ giá trị mà bạn muốn với alter sequence

  • chu kỳ thông qua số của nó

    sql> create sequence NAME_OF_YOUR_SEQUENCE maxvalue 1500 cycle;

+0

Vậy chuỗi khác với khóa chính auto_increment như thế nào? Hay đó thực sự là một chuỗi? – Blaise

+1

Kiểm tra câu trả lời cập nhật của tôi @Blaise –

5

Khóa chính là (về mặt kỹ thuật) chỉ là một chỉ mục thực thi tính duy nhất (cũng như tăng tốc hiệu năng truy vấn). Có một số thông tin ngữ nghĩa ở đó cùng với đó là "khóa" cho thực thể mà hàng mô tả, nhưng đó là nó.

Một chuỗi là một thực thể hoàn toàn khác; nó tồn tại tách biệt với các bảng (giống như một thủ tục đã lưu trữ) và có thể được gọi để mang lại các số thứ tự.

Cả hai thường được sử dụng cùng nhau, để tạo khóa chính tự động cho các đối tượng không có khóa "gốc" hợp lý. Nhưng chúng là hai khái niệm riêng biệt; bạn có thể có các bảng trong đó khóa chính được điền rõ ràng trong quá trình chèn và bạn có thể có các chuỗi được sử dụng để điền các cột không phải PK (hoặc thậm chí được sử dụng trong quá trình lưu trữ, khác với chèn bản ghi).

Các vấn đề liên quan