SQLite
 sql >> база данни >  >> RDS >> SQLite

Основен ключ на SQLite

Резюме :в този урок ще научите как да използвате SQLite PRIMARY KEY ограничение за дефиниране на първичен ключ за таблица.

Въведение в първичния ключ на SQLite

Първичният ключ е колона или група от колони, използвани за идентифициране на уникалността на редовете в таблица. Всяка таблица има един и само един първичен ключ.

SQLite ви позволява да дефинирате първичен ключ по два начина:

Първо, ако първичният ключ има само една колона, използвате PRIMARY KEY ограничение на колоната, за да дефинирате първичния ключ, както следва:

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

Второ, в случай, че първичният ключ се състои от две или повече колони, използвате PRIMARY KEY ограничение на таблицата, за да дефинирате първичния, както е показано в следния израз.

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)

В SQL стандарта колоната с първичен ключ не трябва да съдържа NULL стойности. Това означава, че колоната с първичен ключ има неявно NOT NULL ограничение.

Въпреки това, за да направи текущата версия на SQLite съвместима с по-ранната версия, SQLite позволява колоната с първичен ключ да съдържа NULL стойности.

SQLite първичен ключ и rowid таблица

Когато създавате таблица, без да посочите WITHOUT ROWID опция, SQLite добавя неявна колона, наречена rowid който съхранява 64-битово цяло число със знак. rowid колоната е ключ, който уникално идентифицира редовете в таблицата. Таблици, които имат rowid колоните се наричат ​​rowid таблици.

Ако таблица има първичен ключ, който се състои от една колона и тази колона е дефинирана като INTEGER тогава тази колона с първичен ключ става псевдоним за rowid колона.

Забележете, че ако присвоите друг целочислен тип, като BIGINT и UNSIGNED INT към колоната с първичен ключ, тази колона няма да бъде псевдоним за rowid колона.

Тъй като rowid таблицата организира своите данни като B-дърво, като прави заявки и сортира данни от rowid масата са много бързи. Това е по-бързо от използването на първичен ключ, който не е псевдоним на rowid .

Друга важна забележка е, че ако декларирате колона с INTEGER тип и PRIMARY KEY DESC клауза, тази колона няма да стане псевдоним за rowid колона:

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

Създаване на примери за първичен ключ на SQLite

Следното изявление създава таблица с име countries който има country_id колона като първичен ключ.

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

Опитайте го

Тъй като първичният ключ на countries таблицата има само една колона, дефинирахме първичния ключ с помощта на PRIMARY KEY ограничение на колоната.

Възможно е да се използва PRIMARY KEY ограничение на таблицата за дефиниране на първичния ключ, който се състои от една колона, както е показано в следния израз:

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

Опитайте го

Въпреки това, за таблици, в които първичните ключове се състоят от повече от една колона, трябва да използвате PRIMARY KEY ограничение на таблицата за дефиниране на първични ключове.

Следното изявление създава country_languages таблица, чийто първичен ключ се състои от две колони.

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)

Опитайте го

Пример за добавяне на първичен ключ на SQLite

За разлика от други системи за бази данни, например MySQL и PostgreSQL, не можете да използвате ALTER TABLE оператор за добавяне на първичен ключ към съществуваща таблица.

Трябва да следвате тези стъпки, за да заобиколите ограничението:

  1. Първо, изключете отметката на константата на външния ключ.
  2. След това преименувайте таблицата на друго име на таблица (стара_таблица)
  3. След това създайте нова таблица (таблица) с точната структура на таблицата, която сте преименували.
  4. След това копирайте данните от old_table в таблицата.
  5. Накрая включете проверката на ограничението на външния ключ

Вижте следните твърдения:

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)

Опитайте го

BEGIN TRANSACTION започва нова транзакция. Той гарантира, че всички следващи оператори се изпълняват успешно или нищо не се изпълнява изобщо.

COMMIT изявлението записва всички оператори.

Нека създадем име на таблица cities без първичен ключ.

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)

Опитайте го

За да добавите първичен ключ към cities таблица, изпълнявате следните стъпки:

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)

Опитайте го

Ако използвате инструмента на SQLite GUI, можете да използвате следния израз, за ​​да покажете информацията за таблицата.

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

Опитайте го

В този урок се научихте да използвате SQLite PRIMARY KEY ограничение за дефиниране на първичния ключ за таблица.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Върнете търсените данни от sqlite

  2. Връщане на редове, които съдържат само небуквени и цифрови знаци в SQLite

  3. selectionArgs в SQLiteQueryBuilder не работи с целочислени стойности в колони

  4. Най-добрият начин за запазване на изображения, които идват от сървър в android

  5. SQLite Е NULL