2009-07-24 29 views
7

Tôi đang học cách sử dụng sqlite3 với python. Ví dụ trong sách văn bản mà tôi đang theo dõi là một cơ sở dữ liệu mà mỗi bản ghi Quốc gia có một Vùng, Quốc gia và Dân số.Từ khóa CONSTRAINT làm gì trong câu lệnh CREATE TABLE

Cuốn sách này nói:

Đoạn sau đây sử dụng từ khóa CONSTRAINT để xác định rằng không có hai mục trong bảng là tạo bao giờ sẽ có cùng giá trị đối với khu vực và quốc gia:

>>> cur.execute(''' 
CREATE TABLE PopByCountry(
    Region TEXT NOT NULL, 
    Country TEXT NOT NULL, 
    Population INTEGER NOT NULL, 
    CONSTRAINT Country_Key PRIMARY KEY (Region, Country)) 
''') 

Bạn có thể giải thích những gì CONSTRAINT Country_Key không có tại đây. Nếu tôi gỡ bỏ nó, bản tuyên bố PRIMARY KEY có vẻ như đảm bảo rằng mỗi quốc gia có một tên duy nhất cho khu vực đó.

Trả lời

9

Country_key chỉ đơn giản là đặt tên cho ràng buộc. Nếu bạn không làm điều này tên sẽ được tạo ra cho bạn. Điều này rất hữu ích khi có một số ràng buộc trên bảng và bạn cần phải thả một trong số chúng.

Như một ví dụ cho thả các hạn chế:

ALTER TABLE PopByCountry DROP CONSTRAINT Country_Key 
+0

Đúng vậy. Ràng buộc PRIMARY KEY thực tế không khác gì có hoặc không có từ khóa CONSTRAINT. Từ khóa chỉ cho phép chúng tôi xác định ràng buộc. –

+0

Cảm ơn bạn đã trả lời rất nhanh. Tôi sẽ đánh dấu đây là câu trả lời nếu bạn có thể cho tôi một ví dụ đơn giản về lệnh để sửa/bỏ ràng buộc sau này. –

+0

Hóa ra tôi bỏ lỡ sớm hơn. Bạn chỉ có thể thả các ràng buộc, chứ không phải chỉnh sửa chúng trực tiếp. Tuy nhiên, bạn có thể thả một và thêm một cái khác (thực hiện chỉnh sửa) –

1

Nếu bạn bỏ qua CONSTRAINT Contry_Key từ báo cáo kết quả, SQL Server sẽ tạo ra một tên cho chế PRIMARY KEY của bạn cho bạn (PRIMARY KEY là một loại chế).

Bằng cách đặt cụ thể CONSTRAINT trong truy vấn, bạn chủ yếu chỉ định tên cho ràng buộc khóa chính của bạn.

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