SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Tự động tạo khóa tổng hợp trong SQLite

Các bảng Sqlite bình thường là B * -trees sử dụng số nguyên 64-bit làm khóa của chúng. Điều này được gọi là người ồn ào. Khi chèn một hàng, nếu một giá trị không được cung cấp rõ ràng cho điều này, thì một giá trị sẽ được tạo ra. INTEGER PRIMARY KEY cột hoạt động như một bí danh cho rowid này. AUTOINCREMENT từ khóa này chỉ có thể được sử dụng trên INTEGER PRIMARY KEY đã nói , ngược lại với tên, chỉ thay đổi cách tính rowid đã nói - nếu bạn bỏ đi một giá trị, một giá trị sẽ được tạo cho dù từ khóa đó có xuất hiện hay không, bởi vì nó thực sự là rowid và phải có một số. Thông tin chi tiết tại đây. (các giá trị rowid thường được tạo theo cách tăng dần, nhưng không nhất thiết phải theo thứ tự, theo thứ tự và không nên được coi như một số hàng hoặc bất kỳ thứ gì tương tự, btw).

Bất kỳ khóa chính nào khác ngoài một INTEGER cột được coi là một chỉ mục duy nhất, trong khi rowid vẫn là khóa chính thực sự (Trừ khi đó là bảng KHÔNG CÓ ROWID) và không được tạo tự động. Vì vậy, không, bạn không thể (dễ dàng) làm những gì bạn muốn.

Tôi có thể sẽ tìm ra một thiết kế cơ sở dữ liệu trong đó bạn có một bảng các cửa hàng, một bảng sản phẩm, mỗi cửa hàng có id riêng và một bảng nối thiết lập mối quan hệ nhiều-nhiều giữa hai thứ đó. Điều này giữ cho id sản phẩm giống nhau giữa các cửa hàng, điều này có lẽ sẽ ít gây nhầm lẫn hơn cho mọi người - chẳng hạn, tôi sẽ không mong đợi cùng một mặt hàng có SKU khác nhau ở hai cửa hàng khác nhau của cùng một chuỗi.

Một cái gì đó như:

CREATE TABLE stores(store_id INTEGER PRIMARY KEY
                  , address TEXT
                    -- etc
                   );
CREATE TABLE product(prod_id INTEGER PRIMARY KEY
                   , name TEXT
                     -- etc
                   );
CREATE TABLE inventory(store_id INTEGER REFERENCES stores(store_id)
                     , prod_id INTEGER REFERENCES product(prod_id)
                     , PRIMARY KEY(store_id, prod_id)) WITHOUT ROWID;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Giao dịch SQLite

  2. Bảng xóa nâng cấp Android Sqlite khỏi cơ sở dữ liệu

  3. Tạo bảng mới trong DB hiện có trong lớp SQLiteOpenHelper riêng biệt

  4. Xem nội dung của tệp cơ sở dữ liệu trong Android Studio

  5. Trình duyệt SQLite là gì và cách sử dụng nó?