約束是對(duì)表的數(shù)據(jù)列強(qiáng)制執(zhí)行的規(guī)則。這些用于限制可以進(jìn)入表的數(shù)據(jù)類型。這樣可以確保數(shù)據(jù)庫(kù)中數(shù)據(jù)的準(zhǔn)確性和可靠性。
約束可以是列級(jí)別或表級(jí)別。列級(jí)約束僅應(yīng)用于一列,而表級(jí)約束則應(yīng)用于整個(gè)表。
以下是SQLite中可用的常用約束。
NOT NULL 約束?確保列不能為NULL值。
DEFAULT 約束?如果未指定,則為列提供默認(rèn)值。
UNIQUE 約束?確保列中的所有值均不同。
PRIMARY Key ?唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每一行/記錄。
CHECK 約束?確保列中的所有值都滿足某些條件。
默認(rèn)情況下,列可以保存NULL值。如果您不希望某列具有NULL值,則需要在此列上定義此類約束,以指定該列現(xiàn)在不允許NULL。
NULL等于沒有數(shù)據(jù),它代表未知數(shù)據(jù)。
例如,下面的SQLite語句創(chuàng)建一個(gè)名為COMPANY的新表,并添加五列,其中三列(ID,NAME和AGE)指定不接受NULL。
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
當(dāng)INSERT INTO語句未提供特定值時(shí),DEFAULT約束將為列提供默認(rèn)值。
例如,以下SQLite語句創(chuàng)建一個(gè)名為COMPANY的新表并添加五列。此處,SALARY列默認(rèn)情況下設(shè)置為5000.00,因此,如果INSERT INTO語句不為此列提供值,則默認(rèn)情況下,此列將設(shè)置為5000.00。
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL DEFAULT 50000.00 );
UNIQUE約束可防止兩個(gè)記錄在特定列中具有相同的值。例如,在COMPANY表中,您可能要防止兩個(gè)或多個(gè)人具有相同的年齡。
例如,以下SQLite語句創(chuàng)建一個(gè)名為COMPANY的新表并添加五列。在這里,AGE列設(shè)置為UNIQUE,因此您不能擁有兩個(gè)具有相同年齡的記錄-
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL UNIQUE, ADDRESS CHAR(50), SALARY REAL DEFAULT 50000.00 );
PRIMARY KEY約束唯一地標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每個(gè)記錄??梢杂懈嗟腢NIQUE列,但表中只有一個(gè)主鍵。在設(shè)計(jì)數(shù)據(jù)庫(kù)表時(shí),主鍵很重要。主鍵是唯一的ID。
我們使用它們來引用表行。在表之間創(chuàng)建關(guān)系時(shí),主鍵成為其他表中的外鍵。由于“長(zhǎng)期的編碼監(jiān)督”,SQLite中的主鍵可以為NULL。其他數(shù)據(jù)庫(kù)則不是這種情況。
主鍵是表中的字段,它唯一地標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的每一行/記錄。主鍵必須包含唯一值。主鍵列不能具有NULL值。
一個(gè)表只能有一個(gè)主鍵,它可以由單個(gè)或多個(gè)字段組成。當(dāng)多個(gè)字段用作主鍵時(shí),它們稱為composite key。
如果表在任何表上定義了主鍵field(s),則不能有兩個(gè)記錄具有相同的值field(s)。
您已經(jīng)在上面看到了許多示例,在這些示例中,我們創(chuàng)建了以ID為主鍵的COMPANY表。
CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL );
CHECK 約束使條件能夠檢查輸入到記錄中的值。如果條件的計(jì)算結(jié)果為false,則記錄違反了約束且未輸入到表中。
例如,以下SQLite創(chuàng)建一個(gè)名為COMPANY的新表并添加五列。在這里,我們添加了一個(gè)帶有SALARY的CHECK列,因此您不能有任何SALARY 0。
CREATE TABLE COMPANY3( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL CHECK(SALARY > 0) );
SQLite支持ALTER TABLE的有限子集。SQLite中的ALTER TABLE命令允許用戶重命名表或向現(xiàn)有表添加新列。不能重命名列、刪除列或在表中添加或刪除約束。