# SQLite 約束
約束是在表的數據列上強制執行的規則。這些是用來限制可以插入到表中的數據類型。這確保了數據庫中數據的準確性和可靠性。
約束可以是列級或表級。列級約束僅適用于列,表級約束被應用到整個表。
以下是在 SQLite 中常用的約束。
* **NOT NULL 約束**:確保某列不能有 NULL 值。
* **DEFAULT 約束**:當某列沒有指定值時,為該列提供默認值。
* **UNIQUE 約束**:確保某列中的所有值是不同的。
* **PRIMARY Key 約束**:唯一標識數據庫表中的各行/記錄。
* **CHECK 約束**:CHECK 約束確保某列中的所有值滿足一定條件。
## NOT NULL 約束
默認情況下,列可以保存 NULL 值。如果您不想某列有 NULL 值,那么需要在該列上定義此約束,指定在該列上不允許 NULL 值。
NULL 與沒有數據是不一樣的,它代表著未知的數據。
### 實例
例如,下面的 SQLite 語句創建一個新的表 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 語句沒有提供一個特定的值時,為列提供一個默認值。
### 實例
例如,下面的 SQLite 語句創建一個新的表 COMPANY,并增加了五列。在這里,SALARY 列默認設置為 5000.00。所以當 INSERT INTO 語句沒有為該列提供值時,該列將被設置為 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 語句創建一個新的表 COMPANY,并增加了五列。在這里,AGE 列設置為 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 約束唯一標識數據庫表中的每個記錄。在一個表中可以有多個 UNIQUE 列,但只能有一個主鍵。在設計數據庫表時,主鍵是很重要的。主鍵是唯一的 ID。
我們使用主鍵來引用表中的行。可通過把主鍵設置為其他表的外鍵,來創建表之間的關系。由于"長期存在編碼監督",在 SQLite 中,主鍵可以是 NULL,這是與其他數據庫不同的地方。
主鍵是表中的一個字段,唯一標識數據庫表中的各行/記錄。主鍵必須包含唯一值。主鍵列不能有 NULL 值。
一個表只能有一個主鍵,它可以由一個或多個字段組成。當多個字段作為主鍵,它們被稱為**復合鍵**。
如果一個表在任何字段上定義了一個主鍵,那么在這些字段上不能有兩個記錄具有相同的值。
### 實例
已經看到了我們創建以 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 創建一個新的表 COMPANY,并增加了五列。在這里,我們為 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)
);
```
## 刪除約束
SQLite 支持 ALTER TABLE 的有限子集。在 SQLite 中,ALTER TABLE 命令允許用戶重命名表,或向現有表添加一個新的列。重命名列,刪除一列,或從一個表中添加或刪除約束都是不可能的。
- SQL基礎
- SQL 簡介
- SQL 語法
- SQL SELECT 語句
- SQL SELECT DISTINCT 語句
- SQL WHERE 子句
- SQL AND & OR 運算符
- SQL ORDER BY 子句
- SQL INSERT INTO 語句
- SQL UPDATE 語句
- SQL DELETE 語句
- SQL高級
- SQL TOP 子句
- SQL LIKE 操作符
- SQL 通配符
- SQL IN 操作符
- SQL BETWEEN 操作符
- SQL Alias(別名)
- SQL JOIN
- SQL INNER JOIN 關鍵字
- SQL LEFT JOIN 關鍵字
- SQL RIGHT JOIN 關鍵字
- SQL FULL JOIN 關鍵字
- SQL UNION 和 UNION ALL 操作符
- SQL SELECT INTO 語句
- SQL CREATE DATABASE 語句
- SQL CREATE TABLE 語句
- SQL 約束 (Constraints)
- SQL NOT NULL 約束
- SQL UNIQUE 約束
- SQL PRIMARY KEY 約束
- SQL FOREIGN KEY 約束
- SQL CHECK 約束
- SQL DEFAULT 約束
- SQL CREATE INDEX 語句
- SQL 撤銷索引、表以及數據庫
- SQL ALTER TABLE 語句
- SQL AUTO INCREMENT 字段
- SQL VIEW(視圖)
- SQL函數
- SQL Date 函數
- SQL NULL 值
- SQL NULL 函數
- SQL 數據類型
- SQL 服務器 - RDBMS
- SQL 函數
- SQL AVG 函數
- SQL COUNT() 函數
- SQL FIRST() 函數
- SQL LAST() 函數
- SQL MAX() 函數
- SQL MIN() 函數
- SQL SUM() 函數
- SQL GROUP BY 語句
- SQL HAVING 子句
- SQL UCASE() 函數
- SQL LCASE() 函數
- SQL MID() 函數
- SQL LEN() 函數
- SQL ROUND() 函數
- SQL NOW() 函數
- SQL FORMAT() 函數
- SQL 快速參考
- SQLite 基礎
- SQLite 簡介
- SQLite 安裝
- SQLite 命令
- SQLite 語法
- SQLite 數據類型
- SQLite 創建數據庫
- SQLite 附加數據庫
- SQLite 分離數據庫
- SQLite 創建表
- SQLite 刪除表
- SQLite Insert 語句
- SQLite Select 語句
- SQLite 運算符
- SQLite 表達式
- SQLite Where 子句
- SQLite AND/OR 運算符
- SQLite Update 語句
- SQLite Delete 語句
- SQLite Like 子句
- SQLite Glob 子句
- SQLite Limit 子句
- SQLite Order By
- SQLite Group By
- SQLite Having 子句
- SQLite Distinct 關鍵字
- SQLite 高級
- SQLite PRAGMA
- SQLite 約束
- SQLite Joins
- SQLite Unions 子句
- SQLite NULL 值
- SQLite 別名
- SQLite 觸發器(Trigger)
- SQLite 索引(Index)
- SQLite Indexed By
- SQLite Alter 命令
- SQLite Truncate Table
- SQLite 視圖(View)
- SQLite 事務(Transaction)
- SQLite 子查詢
- SQLite Autoincrement(自動遞增)
- SQLite 注入
- SQLite Explain(解釋)
- SQLite Vacuum
- SQLite 日期 & 時間
- SQLite 常用函數
- SQLite 接口
- SQLite - C/C++
- SQLite - Java
- SQLite - PHP
- SQLite - Perl
- SQLite - Python
- MySQL 教程
- MySQL 教程
- MySQL 安裝
- MySQL 管理
- MySQL PHP 語法
- MySQL 連接
- MySQL 創建數據庫
- MySQL 刪除數據庫
- MySQL 選擇數據庫
- MySQL 數據類型
- MySQL 創建數據表
- MySQL 刪除數據表
- MySQL 插入數據
- MySQL 查詢數據
- MySQL where 子句
- MySQL UPDATE 查詢
- MySQL DELETE 語句
- MySQL LIKE 子句
- MySQL 排序
- Mysql Join的使用
- MySQL NULL 值處理
- MySQL 正則表達式
- MySQL 事務
- MySQL ALTER命令
- MySQL 索引
- MySQL 臨時表
- MySQL 復制表
- MySQL 元數據
- MySQL 序列使用
- MySQL 處理重復數據
- MySQL 及 SQL 注入
- MySQL 導出數據
- MySQL 導入數據
- 免責聲明