鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ SQLite主鍵
SQLite觸發(fā)器(刪除之前/之后)
SQLite Union All操作符
SQLite快速入門(mén)
SQLite LIMIT子句
SQLite更新查詢
SQLite插入查詢
SQLite創(chuàng)建數(shù)據(jù)庫(kù)
SQLite datetime()函數(shù)
SQLite now函數(shù)和時(shí)間格式化
SQLite左連接
SQLite AVG()函數(shù)
SQLite交叉連接(Cross Join)
SQLite運(yùn)算符
SQLite ORDER BY子句
SQLite聚合函數(shù)
SQLite Union操作符
SQLite是什么?
SQLite安裝
PHP連接SQLite數(shù)據(jù)庫(kù)
SQLite命令大全
SQLite LIKE子句
SQLite OR子句
SQLite內(nèi)連接(Inner Join)
SQLite日期和時(shí)間
SQLite WHERE子句
SQLite刪除表
Python連接SQLite數(shù)據(jù)庫(kù)
SQLite刪除觸發(fā)器
SQLite優(yōu)點(diǎn)和缺點(diǎn)
SQLite連接(JOIN子句)
SQLite數(shù)據(jù)類型
SQLite外連接(Outer Join)
SQLite COUNT()函數(shù)
SQLite主鍵
SQLite觸發(fā)器(插入之前/之后)
SQLite HAVING子句
SQLite IN運(yùn)算符
SQLite選擇查詢
SQLite date()函數(shù)
SQLite MAX()函數(shù)
SQLite刪除查詢
SQLite分離數(shù)據(jù)庫(kù)
SQLite教程
SQLite GLOB子句
SQLite MIN()函數(shù)
SQLite導(dǎo)入數(shù)據(jù)
SQLite GROUP BY子句
SQLite表達(dá)式
SQLite語(yǔ)法大全
SQLite外鍵
SQLite觸發(fā)器
SQLite導(dǎo)出數(shù)據(jù)
SQLite juliandday()函數(shù)
SQLite創(chuàng)建表
Java連接SQLite數(shù)據(jù)庫(kù)
SQLite SUM()函數(shù)
SQLite特性/為什么要使用SQLite?
SQLite觸發(fā)器(更新之前/之后)
SQLite strftime()函數(shù)日期日間格式化
SQLite附加/選擇數(shù)據(jù)庫(kù)
SQLite DISTINCT子句
SQLite歷史
SQLite time()函數(shù)

SQLite主鍵

SQLite主鍵是用于唯一定義行記錄的一個(gè)簡(jiǎn)單字段或多個(gè)字段的組合。一個(gè)表只能有一個(gè)主鍵。

主鍵的值不可以是一個(gè)NULL值。

創(chuàng)建主鍵

主鍵通常在創(chuàng)建表時(shí)一同創(chuàng)建。在執(zhí)行CREATE TABLE語(yǔ)句時(shí)可以直接定義主鍵。

語(yǔ)法:

CREATE TABLE table_name  
(  
    column1 datatype [ NULL | NOT NULL ],  
    column2 datatype [ NULL | NOT NULL ],  
    ......  
    CONSTRAINT constraint_name PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)  
);

參數(shù)說(shuō)明:

  • table_name:指定要?jiǎng)?chuàng)建的表的名稱。
  • column1,column2:指定要在表中創(chuàng)建的列。
  • constraint_name:指定主鍵的名稱。
  • pk_col1,pk_col2,… pk_col_n:它指定構(gòu)成主鍵的列。

示例:

創(chuàng)建一個(gè)“workers”表,其中worker_id列是表的主鍵。

CREATE TABLE workers  
(
    worker_id INTEGER PRIMARY KEY,  
    last_name VARCHAR NOT NULL,  
    first_name VARCHAR,  
    join_date DATE  
);

添加主鍵

當(dāng)沒(méi)有在CREATE TABLE語(yǔ)句中定義主鍵時(shí),也可以在創(chuàng)建表后再添加主鍵。

需要注意的是,不能使用ALTER TABLE語(yǔ)句來(lái)創(chuàng)建主鍵。在SQLite中需要先創(chuàng)建一個(gè)與原表一樣的新表,并在這個(gè)新表上創(chuàng)建主鍵,然后復(fù)制舊表中的所有數(shù)據(jù)到新表中就可以了。

語(yǔ)法

PRAGMA foreign_keys=off;  
BEGIN TRANSACTION;  
ALTER TABLE table_name RENAME TO old_table;  
CREATE TABLE table_name  
(  
    column1 datatype [ NULL | NOT NULL ],  
    column2 datatype [ NULL | NOT NULL ],  
    ...  
    CONSTRAINT constraint_name PRIMARY KEY (pk_col1, pk_col2, ... pk_col_n)  
);  
INSERT INTO table_name SELECT * FROM old_table;  
COMMIT;  
PRAGMA foreign_keys=on;

參數(shù)說(shuō)明:

  • table_name:指定要?jiǎng)?chuàng)建含有主鍵的表的名稱。
  • old_table:指定要被修表的名稱。
  • column1column2:指定要在表中創(chuàng)建的列。
  • constraint_name:指定主鍵的名稱。
  • pk_col1,pk_col2… pk_col_n:它指定構(gòu)成主鍵的列。

示例:

首先創(chuàng)建一個(gè)沒(méi)有主鍵的表:employees,如下語(yǔ)句 -

CREATE TABLE employees  
(
    employee_id INTEGER,  
    last_name VARCHAR NOT NULL,  
    first_name VARCHAR,  
    hire_date DATE  
);

現(xiàn)在,運(yùn)行以下命令將“employee_id”列設(shè)置成為主鍵。

PRAGMA foreign_keys=off;  
BEGIN TRANSACTION;  
ALTER TABLE employees RENAME TO old_employees;  
CREATE TABLE employees  
(  
    employee_id INTEGER,  
    last_name VARCHAR NOT NULL,  
    first_name VARCHAR,  
    hire_date DATE,  
    CONSTRAINT employees_pk PRIMARY KEY (employee_id)  
);  
INSERT INTO employees SELECT * FROM old_employees;  
COMMIT;  
PRAGMA foreign_keys=on;

現(xiàn)在,它會(huì)將employees表重命名為old_employees,然后創(chuàng)建一個(gè)新表employees并創(chuàng)建主鍵,然后從old_employees表中將所有數(shù)據(jù)傳輸?shù)叫卤?employees中。

最后刪除舊表:old_employees。

DROP TABLE old_employees;

刪除主鍵

與添加主鍵一樣,不能使用ALTER TABLE語(yǔ)句來(lái)刪除主鍵。需要?jiǎng)?chuàng)建一個(gè)沒(méi)有(刪除)主鍵的新表,并將數(shù)據(jù)復(fù)制到此新表中。

語(yǔ)法

PRAGMA foreign_keys=off;  
BEGIN TRANSACTION;  
ALTER TABLE table_name RENAME TO old_table;  
CREATE TABLE table_name  
(  
    column1 datatype [ NULL | NOT NULL ],  
    column2 datatype [ NULL | NOT NULL ],  
    ...  
);  
INSERT INTO table_name SELECT * FROM old_table;  
COMMIT;  
PRAGMA foreign_keys=on;

參數(shù)說(shuō)明

  • table_name - 指定要從中刪除主鍵的表的名稱。
  • old_table - 指定在刪除主鍵后再創(chuàng)建新表時(shí),將要?jiǎng)h除擁有主鍵的表名稱。

示例:

假設(shè)有一個(gè)表engineers,并有一個(gè)主鍵:engineer_id,現(xiàn)在要?jiǎng)h除這個(gè)engineer_id主鍵。

CREATE TABLE engineers  
(
    engineer_id INTEGER,  
    engineerr_name VARCHAR NOT NULL,  
    address VARCHAR,  
    city VARCHAR,  
    CONSTRAINT engineers_pk PRIMARY KEY (engineer_id)  
);

現(xiàn)在,運(yùn)行以下命令刪除主鍵。

PRAGMA foreign_keys=off;  
BEGIN TRANSACTION;  
ALTER TABLE engineers RENAME TO old_engineers;  
CREATE TABLE engineers  
(  
    engineer_id INTEGER,  
    engineer_name VARCHAR NOT NULL,  
    address VARCHAR,  
    city VARCHAR  
);  
INSERT INTO engineers SELECT * FROM old_engineers;  
COMMIT;  
PRAGMA foreign_keys=on;

執(zhí)行上面語(yǔ)句后,主鍵現(xiàn)在從engineers表中刪除。 但是原來(lái)的表現(xiàn)在被重命名為old_engineers

現(xiàn)在刪除old_engineers表,如下語(yǔ)句 -

DROP TABLE old_engineers;