前面學習了SQLite數據庫的常見使用方法,其中包含許多約束,常見的如NOT NULL、DEFAULT、UNIQUE、PRIMARY KEY(主鍵)、CHECK等
本篇文章主要介紹這些約束在SQLite中的使用
目錄
- 什么是約束
- NOT NULL 約束
- DEFAULT約束
- UNIQUE約束
- PRIMARY KEY約束
- CHECK約束
- 刪除約束
什么是約束
約束是在數據庫表中的某列字段上強制執行的規則,用以限制插入表中的數據類型,確保數據庫中的數據的準確性和可靠性
約束分為列級約束和表級約束,前者適用于列,后者應用于整個表
NOT NULL 約束
默認情況下,列可以保存NULL值,這個約束就是確保某列字段中不能有NULL值,但并不意味著沒有數據,NULL代表著未知的數據
下面用SQLite語句創建了一個表t_Student
,并增加了4列,并給NAME列、AGE列設置為NOT NULL
CREATE TABLE t_Student (ID INT PRIMARY KEY,NAME TEXT NOT NULL,AGE INT NOT NULL,SCORE REAL
);
只要聲明為PRIMARY KEY,就說明是一個主鍵字段,主鍵字段默認包含了NOT NULL和UNIQUE兩個約束
DEFAULT約束
對于設置了DEFAULT約束的某列字段中,在其中INSERT INTO插入數據而沒有為改列提供值時,該列值將被這值為一個指定的默認值
下面用SQLite語句創建了一個表t_Student
,并增加了4列,并給SCORE列設置為DEFAULT
CREATE TABLE t_Student (ID INT PRIMARY KEY,NAME TEXT NOT NULL,AGE INT NOT NULL,SCORE REAL DEFAULT 137.00
);
意味著當INSERT INTO語句沒有為該列提供值時,該列將被設置為137.00
UNIQUE約束
此約束防止在某個列上存在兩個或兩個以上相同的值,比如,有時可能會需要防止兩個或兩個以上的人具有相同的姓名
下面用SQLite語句創建了一個表t_Student
,并增加了4列,這里NAME列設置為UNIQUE
CREATE TABLE t_Student(ID INT PRIMARY KEY,NAME TEXT NOT NULL UNIQUE,AGE INT NOT NULL,SCORE REAL DEFAULT 137.00
);
從而保證不能有兩個同名的數據
PRIMARY KEY約束
PRIMARY KEY主鍵約束起到一個身份認證的作用,標識著數據表中的每行數據,且每一個認證都是唯一的
我們使用主鍵來引用表中的行。可通過把主鍵設置為其他表的外鍵,來創建表之間的關系。由于"長期存在編碼監督",在 SQLite 中,主鍵可以是 NULL,這是與其他數據庫不同的地方。
主鍵是表中的一個字段,唯一標識表中的各行/記錄
上面也提到,只要聲明為PRIMARY KEY,就說明是一個主鍵字段,主鍵字段默認包含了NOT NULL和UNIQUE兩個約束,所以主鍵(字段)必須包含唯一值,且主鍵列不能有NULL值
一個表只能有一個主鍵,它可以由一個或多個字段組成,當多個字段作為主鍵,它們被稱為復合鍵。如果一個表在任何字段上定義了一個主鍵,那么在這些字段上不能有兩個相同的值
CREATE TABLE t_Student(ID INT PRIMARY KEY AUTOINCREMENT,NAME TEXT NOT NULL UNIQUE,AGE INT NOT NULL,SCORE REAL DEFAULT 137.00
);
如果想要讓主鍵自動增長(必須是INTEGER類型),應該增加AUTOINCREMENT約束,這樣在插入新數據時,就算不給主鍵(比如ID)賦值,也會沿著最后一個ID的值依次賦值
這里ID設置為主鍵,且設置為自動增長,把表中的數據刪除后,重新插入新的數據,ID的編號不是從1開始,而是接著之前的ID進行編號
示例:
從上圖也可以看出DEFAUT的作用,并未給SCORE賦值,默認值就時137.00;當然也沒有給主鍵ID設值,若沒有AUTOINCREMENT
,那么ID列就會無數據展示
CHECK約束
CHECK約束用于啟用輸入一行數據要檢查值的條件,如果條件值為FALSE,則數據違反了約束,且不能輸入到表中
下面的SQLite語句創建了一個表t_Student,并增加了4列,這里AGE列添加CHECK
CREATE TABLE t_Student(ID INT PRIMARY KEY AUTOINCREMENT,NAME TEXT NOT NULL UNIQUE,AGE INT CHECK(AGE > 17),SCORE REAL DEFAULT 137.00
);
表示年齡不能低于18
刪除約束
在SQLite中,ALTER TABLE允許用戶重命名表,或向先有的表添加一個新的列。但重命名列,刪除一列,或從一個表中添加或刪除約束都是不可能的