Tôi muốn tạo bảng trong SQL Server 2008, nhưng tôi không biết cách tạo khóa chính hỗn hợp. Làm thế nào tôi có thể đạt được điều này?Cách tạo khóa chính kết hợp trong SQL Server 2008
Trả lời
create table my_table (
column_a integer not null,
column_b integer not null,
column_c varchar(50),
primary key (column_a, column_b)
);
Sự khác biệt giữa việc sử dụng ** Chính là gì Khóa ** và ** CONSTRAINT ** như trong ví dụ của @ matthew-abbott? – mateuscb
Nó tạo ra một ràng buộc có tên có thể bị xóa/cập nhật theo tên – longhairedsi
Không hoàn toàn đúng. Cả hai tạo ra "ràng buộc có tên". Nó chỉ là với các cựu, bạn không kiểm soát việc đặt tên. Nhưng khi đã tạo xong, bạn có thể tra cứu tên đã được sử dụng và xóa/cập nhật theo tên ... – Auspex
CREATE TABLE UserGroup
(
[User_Id] INT NOT NULL,
[Group_Id] INT NOT NULL
CONSTRAINT PK_UserGroup PRIMARY KEY NONCLUSTERED ([User_Id], [Group_Id])
)
+1 - Có, đặt tên cho những người khó khăn của bạn, Sql Server làm những điều khó chịu như họ PK_UserGrou_5DEAEAF5 trong DB của một bản phát hành và PK_UserGrou_3214EC0777F66C69 trên khác. Đây là một nỗi đau nếu bạn cần cập nhật hoặc thả PK vì trước tiên bạn phải lấy tên từ db và sau đó sử dụng sql động (hoặc xây dựng lệnh trong mã đầu tiên). Ngoài ra, nó xấu xí. – monty
Có lý do gì khiến tôi không muốn nhóm PK của tôi được nhóm lại không? – 4AM
@ 4AM Điều này có thể trả lời câu hỏi của bạn: [link] (https://dba.stackexchange.com/questions/7741/when-should-a-primary-key-be-declared-non-clustered) – Dongminator
Via Enterprise Manager (SSMS) ...
- Kích chuột phải vào bảng bạn muốn tạo phím hợp trên và chọn Thiết kế.
- Highlight cột bạn muốn để hình thành như một hỗn hợp chính
- Right Click trên các cột và Set Primary Key
Để xem SQL sau đó bạn có thể nhấp chuột phải vào Table
>Script Table As
>Create To
Cảm ơn bạn. Đây là cách an toàn nhất/dễ nhất mà không có khả năng làm rối tung cú pháp SQL của tôi – AlbatrossCafe
Điều này giúp dễ dàng cho những ai muốn sửa chữa nhanh chóng thông qua giao diện thiết kế/guid. Cảm ơn đã giúp đỡ. –
Trước tiên hãy tạo cơ sở dữ liệu và bảng, thêm các cột theo cách thủ công. Trong đó cột là khóa chính. Bạn nên kích chuột phải vào cột này và thiết lập khóa chính và thiết lập giá trị hạt giống của khóa chính.
Để tạo một khóa duy nhất tổng hợp trên bảng
ALTER TABLE [TableName] ADD UNIQUE ([Column1], [Column2], [column3]);
Phím UNIQUE KHÔNG giống với khóa CHÍNH! –
Tôi biết tôi là muộn để bên này, nhưng đối với một bảng hiện có, hãy thử:
ALTER table TABLE_NAME
ADD CONSTRAINT [name of your PK, e.g. PK_TableName] PRIMARY KEY CLUSTERED (column1, column2, etc.)
CREATE TABLE UserGroup
(
[User_Id] INT Foreign Key,
[Group_Id] INT foreign key,
PRIMARY KEY ([User_Id], [Group_Id])
)
thêm một số mô tả quá –
6 năm trễ và cú pháp không chính xác! –
Đối với MSSQL Server 2012
CREATE TABLE usrgroup(
usr_id int FOREIGN KEY REFERENCES users(id),
grp_id int FOREIGN KEY REFERENCES groups(id),
PRIMARY KEY (usr_id, grp_id)
)
CẬP NHẬT
Tôi nên thêm!
Nếu bạn muốn các khóa ngoại/khóa chính này thay đổi, trước tiên bạn nên tạo với hạn chế hoặc bạn không thể thực hiện thay đổi. Như dưới đây;
CREATE TABLE usrgroup(
usr_id int,
grp_id int,
CONSTRAINT FK_usrgroup_usrid FOREIGN KEY (usr_id) REFERENCES users(id),
CONSTRAINT FK_usrgroup_groupid FOREIGN KEY (grp_id) REFERENCES groups(id),
CONSTRAINT PK_usrgroup PRIMARY KEY (usr_id,grp_id)
)
Thực ra cách cuối cùng là lành mạnh và nối tiếp. Bạn có thể xem các tên Ràng buộc FK/PK (dbo.dbname> Keys> ..) nhưng Nếu bạn không sử dụng ràng buộc, MSSQL sẽ tự động tạo các tên FK/PK ngẫu nhiên. Bạn sẽ cần phải xem xét mọi thay đổi (thay đổi bảng) mà bạn cần.
Tôi khuyên bạn nên đặt tiêu chuẩn cho chính mình và ràng buộc phải được xác định theo tiêu chuẩn của bạn. Bạn sẽ không phải ghi nhớ và bạn sẽ không phải suy nghĩ quá lâu. Tóm lại, bạn làm việc nhanh hơn.
điều này không tạo PK nhưng chỉ FK, phải không? – batmaci
@batmaci; Không, nó là cả FK và FK nhóm đôi để PK. Đó là sử dụng lành mạnh. Tôi khuyên điều đó. Khi bạn không tạo PK, bạn cũng có thể sử dụng. –
- 1. Kết hợp hai bảng trong Chọn (SQL Server 2008)
- 2. TẠO SQL Server INDEX 2008
- 3. Cách tạo cá thể trong SQL Server 2008
- 4. Phím tắt để thiết lập khóa chính trong SQL Server 2008 là gì?
- 5. trường hợp vô SQL Server 2008
- 6. Cách xác định trùng lặp khóa chính từ mã lỗi SQL Server 2008?
- 7. Tạo người dùng cho SQL Server 2008?
- 8. Hợp nhất hai Bảng trong SQL Server 2008
- 9. Không thể tạo chuỗi trong SQL Server 2008
- 10. xem Updatable - SQL Server 2008
- 11. Kết hợp XML trong một SQL Server
- 12. Tìm ngày không hợp lệ trong SQL Server 2008
- 13. Tạo biến bảng trong SQL Server 2008 R2
- 14. SQL Server 2008 Express Edition - cách tạo một chuỗi
- 15. Trường hợp và số đếm trong SQL Server 2008
- 16. báo cáo Format SQL trong SQL Server Management Studio 2008
- 17. Thay đổi cột khóa chính trong SQL Server
- 18. SQL Server 2008 và HashBytes
- 19. Kết hợp CTE "WITH" và "WITH XMLNAMESPACES ...." trong SQL Server
- 20. Làm cách nào để tạo cột "Không trùng lặp" trong SQL Server 2008?
- 21. Gỡ rối deadlock trong Sql Server 2008
- 22. Android với SQL Server 2008
- 23. Sử dụng PIVOT trong SQL Server 2008
- 24. Cách viết chỉ mục, khóa, khóa ngoài trong SQL Server
- 25. Tạo cột được tính trong SQL Server 2008
- 26. Khóa chính có cần thiết trong SQL Server không?
- 27. Làm cách nào để xác định khóa chính kết hợp trong SQL?
- 28. Cách nhập bảng mà không làm mất chỉ mục và khóa trong SQL Server 2008
- 29. Loại dữ liệu Sql cho khóa chính - SQL Server?
- 30. SQL Server 2008: Cách so sánh XML?
Là bạn mới tham gia asp.net, một lời khuyên: Các khóa chính hỗn hợp là một điều xấu * thường chỉ ra thiết kế được suy nghĩ kém – smirkingman
@smirkingman Các vấn đề rất quan trọng có thể được giải quyết, thường gần như hoàn toàn với các khóa chính kết hợp. Chẳng hạn như khi bạn có hàng trăm/hàng nghìn người dùng lưu các hàng vào một loại bảng/đối tượng đơn lẻ. Bạn muốn các hàng được sắp xếp theo user-id, cộng với giá trị thứ hai. Đánh giá giá trị của bạn chỉ đơn giản là không chính xác, nếu không, chúng tôi sẽ sớm ngừng sử dụng tính năng này. –
Có thể trùng lặp của [Tạo khóa chính kết hợp trong SQL Server] (http://stackoverflow.com/questions/12594791/creating-composite-primary-key-in-sql-server) –