約束是在表的數(shù)據(jù)列上強(qiáng)制執(zhí)行的規(guī)則玻粪。這些是用來限制可以插入到表中的數(shù)據(jù)類型窜管。這確保了數(shù)據(jù)庫中數(shù)據(jù)的準(zhǔn)確性和可靠性。
約束可以是列級或表級韧涨。列級約束僅適用于列牍戚,表級約束被應(yīng)用到整個表。
以下是在 SQLite 中常用的約束:
- NOT NULL 約束:確保某列不能有 NULL 值氓奈。
- DEFAULT 約束:當(dāng)某列沒有指定值時翘魄,為該列提供默認(rèn)值。
- UNIQUE 約束:確保某列中的所有值都是唯一的舀奶。
- PRIMARY Key 約束:唯一標(biāo)識數(shù)據(jù)庫表中的各行/記錄(主鍵)暑竟。
- CHECK 約束: 確保某列中的所有值滿足一定條件。
NOT NULL 約束
默認(rèn)情況下育勺,列可以保存 NULL 值但荤。如果您不想某列有 NULL 值,那么需要在該列上定義此約束涧至,指定在該列上不允許 NULL 值腹躁。
NULL 與沒有數(shù)據(jù)是不一樣的,它代表著未知的數(shù)據(jù)南蓬。
實例
例如纺非,下面的 SQLite 語句創(chuàng)建一個新的表 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
);
DEFAULT 約束
DEFAULT 約束在 INSERT INTO 語句沒有提供一個特定的值時,為列提供一個默認(rèn)值窄陡。
實例
例如炕淮,下面的 SQLite 語句創(chuàng)建一個新的表 COMPANY,并增加了五列跳夭。在這里涂圆,SALARY 列默認(rèn)設(shè)置為 5000.00。所以當(dāng) INSERT INTO 語句沒有為該列提供值時币叹,該列將被設(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 約束
UNIQUE 約束防止在一個特定的列存在兩個記錄具有相同的值。在 COMPANY 表中套硼,例如卡辰,您可能要防止兩個或兩個以上的人具有相同的年齡。
實例
例如邪意,下面的 SQLite 語句創(chuàng)建一個新的表 COMPANY九妈,并增加了五列。在這里雾鬼,AGE 列設(shè)置為 UNIQUE萌朱,所以不能有兩個相同年齡的記錄:
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 約束
PRIMARY KEY 約束唯一標(biāo)識數(shù)據(jù)庫表中的每個記錄。在一個表中可以有多個 UNIQUE 列策菜,但只能有一個主鍵晶疼。在設(shè)計數(shù)據(jù)庫表時,主鍵是很重要的又憨。主鍵是唯一的 ID翠霍。
我們使用主鍵來引用表中的行〈垒海可通過把主鍵設(shè)置為其他表的外鍵寒匙,來創(chuàng)建表之間的關(guān)系。由于"長期存在編碼監(jiān)督"躏将,在 SQLite 中锄弱,主鍵可以是 NULL,這是與其他數(shù)據(jù)庫不同的地方祸憋。
主鍵是表中的一個字段会宪,唯一標(biāo)識數(shù)據(jù)庫表中的各行/記錄。主鍵必須包含唯一值蚯窥。主鍵列不能有 NULL 值掸鹅。
一個表只能有一個主鍵,它可以由一個或多個字段組成拦赠。當(dāng)多個字段作為主鍵巍沙,它們被稱為復(fù)合鍵。
如果一個表在任何字段上定義了一個主鍵矛紫,那么在這些字段上不能有兩個記錄具有相同的值赎瞎。
實例
創(chuàng)建以 ID 作為主鍵的 COMAPNY 表的實例:
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
CHECK 約束
CHECK 約束啟用輸入一條記錄要檢查值的條件。如果條件值為 false颊咬,則記錄違反了約束务甥,且不能輸入到表。
實例
例如喳篇,下面的 SQLite 創(chuàng)建一個新的表 COMPANY敞临,并增加了五列。在這里麸澜,我們?yōu)?SALARY 列添加 CHECK挺尿,所以工資必須大于零:
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)
);