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

Khóa chính SQLite

Tóm tắt :trong hướng dẫn này, bạn sẽ học cách sử dụng SQLite PRIMARY KEY ràng buộc để xác định khóa chính cho một bảng.

Giới thiệu về khóa chính SQLite

Khóa chính là một cột hoặc một nhóm cột được sử dụng để xác định tính duy nhất của các hàng trong bảng. Mỗi bảng có một và chỉ một khóa chính.

SQLite cho phép bạn xác định khóa chính theo hai cách:

Trước tiên, nếu khóa chính chỉ có một cột, bạn sử dụng PRIMARY KEY ràng buộc cột để xác định khóa chính như sau:

CREATE TABLE table_name(
   column_1 INTEGER NOT NULL PRIMARY KEY,
   ...
);Code language: PHP (php)

Thứ hai, trong trường hợp khóa chính bao gồm hai hoặc nhiều cột, bạn sử dụng PRIMARY KEY ràng buộc bảng để xác định chính như được hiển thị trong câu lệnh sau.

CREATE TABLE table_name(
   column_1 INTEGER NOT NULL,
   column_2 INTEGER NOT NULL,
   ...
   PRIMARY KEY(column_1,column_2,...)
);Code language: SQL (Structured Query Language) (sql)

Trong tiêu chuẩn SQL, cột khóa chính không được chứa NULL các giá trị. Có nghĩa là cột khóa chính có NOT NULL ngầm ràng buộc.

Tuy nhiên, để làm cho phiên bản SQLite hiện tại tương thích với phiên bản cũ hơn, SQLite cho phép cột khóa chính chứa NULL giá trị.

Khóa chính SQLite và bảng rowid

Khi bạn tạo bảng mà không chỉ định WITHOUT ROWID tùy chọn, SQLite thêm một cột ẩn được gọi là rowid lưu trữ số nguyên có dấu 64-bit. rowid cột là một khóa xác định duy nhất các hàng trong bảng. Các bảng có rowid các cột được gọi là rowid bảng.

Nếu một bảng có khóa chính bao gồm một cột và cột đó được xác định là INTEGER thì cột khóa chính này trở thành bí danh cho rowid cột.

Lưu ý rằng nếu bạn chỉ định một kiểu số nguyên khác, chẳng hạn như BIGINTUNSIGNED INT vào cột khóa chính, cột này sẽ không phải là bí danh cho rowid cột.

Bởi vì rowid bảng tổ chức dữ liệu của nó dưới dạng cây B, truy vấn và sắp xếp dữ liệu của một rowid bảng rất nhanh. Nó nhanh hơn so với việc sử dụng khóa chính không phải là bí danh của rowid .

Một lưu ý quan trọng khác là nếu bạn khai báo một cột với INTEGER nhập và PRIMARY KEY DESC , cột này sẽ không trở thành bí danh cho rowid cột:

CREATE TABLE table(
   pk INTEGER PRIMARY KEY DESC,
   ...
);Code language: SQL (Structured Query Language) (sql)

Tạo ví dụ về khóa chính của SQLite

Câu lệnh sau tạo một bảng có tên countriescountry_id làm khóa chính.

CREATE TABLE countries (
   country_id INTEGER PRIMARY KEY,
   name TEXT NOT NULL
);Code language: SQL (Structured Query Language) (sql)

Hãy thử nó

Vì khóa chính của countries bảng chỉ có một cột, chúng tôi đã xác định khóa chính bằng PRIMARY KEY ràng buộc cột.

Có thể sử dụng PRIMARY KEY ràng buộc bảng để xác định khóa chính bao gồm một cột như được hiển thị trong câu lệnh sau:

CREATE TABLE languages (
   language_id INTEGER,
   name TEXT NOT NULL,
   PRIMARY KEY (language_id)
);Code language: SQL (Structured Query Language) (sql)

Hãy thử nó

Tuy nhiên, đối với các bảng có khóa chính bao gồm nhiều hơn một cột, bạn phải sử dụng PRIMARY KEY ràng buộc bảng để xác định khóa chính.

Câu lệnh sau tạo country_languages bảng có khóa chính bao gồm hai cột.

CREATE TABLE country_languages (
	country_id INTEGER NOT NULL,
	language_id INTEGER NOT NULL,
	PRIMARY KEY (country_id, language_id),
	FOREIGN KEY (country_id) REFERENCES countries (country_id) 
            ON DELETE CASCADE ON UPDATE NO ACTION,
	FOREIGN KEY (language_id) REFERENCES languages (language_id) 
            ON DELETE CASCADE ON UPDATE NO ACTION
);Code language: PHP (php)

Hãy thử nó

Thêm ví dụ về khóa chính SQLite

Không giống như các hệ thống cơ sở dữ liệu khác, ví dụ:MySQL và PostgreSQL, bạn không thể sử dụng ALTER TABLE để thêm khóa chính vào bảng hiện có.

Bạn cần làm theo các bước sau để khắc phục hạn chế:

  1. Đầu tiên, hãy đặt kiểm tra hằng số khóa ngoại.
  2. Tiếp theo, đổi tên bảng thành một tên bảng khác (old_table)
  3. Sau đó, tạo một bảng (bảng) mới với cấu trúc chính xác của bảng mà bạn đã được đổi tên.
  4. Sau đó, sao chép dữ liệu từ old_table vào bảng.
  5. Cuối cùng, bật kiểm tra ràng buộc khóa ngoại

Xem các câu sau:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE table RENAME TO old_table;

-- define the primary key constraint here
CREATE TABLE table ( ... );

INSERT INTO table SELECT * FROM old_table;

COMMIT;

PRAGMA foreign_keys=on;Code language: SQL (Structured Query Language) (sql)

Hãy thử nó

BEGIN TRANSACTION bắt đầu một giao dịch mới. Nó đảm bảo rằng tất cả các câu lệnh tiếp theo thực thi thành công hoặc không có câu lệnh nào thực thi cả.

COMMIT tuyên bố cam kết tất cả các tuyên bố.

Hãy tạo tên bảng cities không có khóa chính.

CREATE TABLE cities (
   id INTEGER NOT NULL,
   name text NOT NULL
);

INSERT INTO cities (id, name)
VALUES(1, 'San Jose');Code language: SQL (Structured Query Language) (sql)

Hãy thử nó

Để thêm khóa chính vào cities bảng, bạn thực hiện các bước sau:

PRAGMA foreign_keys=off;

BEGIN TRANSACTION;

ALTER TABLE cities RENAME TO old_cities;

CREATE TABLE cities (
   id INTEGER NOT NULL PRIMARY KEY,
   name TEXT NOT NULL
);

INSERT INTO cities 
SELECT * FROM old_cities;

DROP TABLE old_cities;

COMMIT;

PRAGMA foreign_keys=on;Code language: SQL (Structured Query Language) (sql)

Hãy thử nó

Nếu bạn sử dụng công cụ SQLite GUI, bạn có thể sử dụng câu lệnh sau để hiển thị thông tin của bảng.

PRAGMA table_info([cities]);Code language: SQL (Structured Query Language) (sql)

Hãy thử nó

Trong hướng dẫn này, bạn đã học cách sử dụng PRIMARY KEY của SQLite ràng buộc để xác định khóa chính cho một bảng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tích hợp SQLCipher với greenDAO

  2. Cách bỏ khóa ngoại trong SQLite

  3. Làm cách nào để tạo một bảng có hai hoặc nhiều khóa ngoại bằng Android Room?

  4. Cách hoạt động của SQLite Lower ()

  5. Cách cài đặt trình duyệt SQLite và SQLite trong Ubuntu