Có thể sử dụng các giá trị UUID làm khóa chính trong SQLite không? Tôi đang tìm kiếm thông tin rất hạn chế về chủ đề, vì vậy tôi không chắc liệu SQLite có hỗ trợ kiểu dữ liệu UUID hay không. Tôi có nên lưu trữ UUID dưới dạng chuỗi không?Sử dụng UUID trong SQLite
Trả lời
SQLite cho phép sử dụng bất kỳ data type làm khóa chính.
UUID có thể được lưu trữ dưới dạng chuỗi (có thể đọc được) hoặc dưới dạng BLOB 16 byte (có thể nhanh hơn nếu các bản ghi quá nhỏ mà sự khác biệt quan trọng).
Câu trả lời của CL là chính xác nhưng loại váy là vấn đề ở bàn tay. Như đã đề cập, một cột (hoặc nhiều cột) thuộc bất kỳ loại nào có thể được sử dụng làm khóa chính. Vì vậy, bạn có thể lưu trữ UUID ở định dạng chuỗi có thể đọc được, có thể đọc được và làm cho khóa của bảng. Và vì UUID chỉ là một số nguyên 128 bit, bạn cũng có thể lưu trữ các byte của số nguyên là BLOB, mà tôi tưởng tượng sẽ nhanh hơn một chút.
Nhưng để trực tiếp trả lời những gì tôi tin là câu hỏi trong tầm tay, không, SQLite không có bất kỳ tính năng nào hỗ trợ trực tiếp UUID. SQLite sử dụng kiểu khai báo của một cột để xác định cái nào trong năm số nguyên bên dưới là storage classes (số nguyên, thực, văn bản, blob hoặc null) mà nó sẽ sử dụng. Nhưng loại khai báo của cột bị bỏ qua. Vì vậy, không có loại cột hoặc lớp lưu trữ cụ thể UUID. Có vẻ như không có bất kỳ functions nào có sẵn để chuyển đổi thành và từ chuỗi UUID được định dạng. Để nhận được các byte UUID của bạn, bạn sẽ muốn xem những phương thức nào được cung cấp bởi ngôn ngữ mà ứng dụng của bạn được viết. Ví dụ, lớp UUID của Java hoặc NSUUID của Apple.
Không chắc về việc sử dụng nó như là lĩnh vực mặc định, nhưng nếu ai đó cần phải tạo ra giá trị duy nhất trong truy vấn sql cách tiếp cận suggested here sau đây có thể được sử dụng:
Các randomblob (N) chức năng trả về một giả N-byte blob chứa -random byte. Nếu N nhỏ hơn 1 thì một blob ngẫu nhiên 1 byte được trả về. Gợi ý: ứng dụng có thể tạo ra định danh duy nhất trên toàn cầu sử dụng chức năng này cùng với hex() và/hoặc thấp hơn() như thế này:
hex(randomblob(16))
hoặc
lower(hex(randomblob(16)))
- 1. Làm cách nào để sử dụng UUID trong SQLAlchemy?
- 2. Việc sử dụng moveToFirst() trong SQLite Cursors
- 3. Sử dụng AND và OR trong SQLite
- 4. sử dụng python sqlite trong terminal -django
- 5. Cách sử dụng FTS3 trong SQLite
- 6. UUID trong Rails3
- 7. Sử dụng SQLITE với VB6
- 8. Laravel 4 sử dụng UUID làm khóa chính
- 9. UUID cho ứng dụng trên iOS5
- 10. Khi nào sử dụng pragmas trên sqlite?
- 11. Sử dụng SQLite từ libGDX trên Android
- 12. Sử dụng từ khóa IN android sqlite
- 13. Zend Framework: Bắt đầu sử dụng SQLite
- 14. Sqlite được sử dụng để làm gì?
- 15. Phiên bản SQLite được sử dụng trong Android?
- 16. Sử dụng câu lệnh LIMIT trong truy vấn SQLite
- 17. Sử dụng cơ sở dữ liệu SQLite trong Libgdx
- 18. Khai báo biến trong sqlite và sử dụng nó
- 19. Postgres + Hibernate + Java UUID
- 20. Sử dụng UUID làm khóa chính trong các mô hình Django (tác động quan hệ chung)
- 21. Ví dụ về tạo UUID bằng cách sử dụng Boost trong C++
- 22. Tạo UUID qua Maven
- 23. UUID với Khung Chơi
- 24. XSLT tạo UUID
- 25. UUID cho DynamoDB?
- 26. Laravel lastInsertId với UUID PK
- 27. thế hệ uuid postgreSQL
- 28. Sử dụng guid trong sqlite chọn nơi guid được lưu trữ trong sqlite db dưới dạng nhị phân
- 29. Xóa #inst và #uuid literals trong clojure
- 30. UUID là gì?
Là một trong những kiểu dữ liệu hiệu quả hơn khác với việc lưu trữ UUID? –
Đối với các độc giả khác ... chuỗi ký tự 36 ký tự có thể đọc được như sau: '988097c8-3f9c-4ecf-9d1d-64701bb9764c' –
UUID BLOB vs TEXT quan trọng kích thước tệp, tuy nhiên, tốc độ chèn và truy vấn là về giống nhau, xem http://stackoverflow.com/a/11337522/254109 – xmedeko