SQLite进阶-10.约束

约束

约束是作用于数据表中列上的规则,用于限制表中数据的类型。约束的存在保证了数据库中数据的精确性和可靠性。
约束可以是列级或表级,列级约束作用于单一的列,而表级约束作用于整张数据表。

SQLite中常见的约束:

  • NOT NULL 约束:确保某列不能有NULL值。
  • DEFAULT 约束:当某列没有插入值时,为该列提供默认值。
  • UNIQUE 约束:确保某列中的所有值是不同的。
  • PRIMARY KEY 约束:唯一标识数据库表中的数据。
  • FOREIGN KEY 约束:一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
  • CHECK 约束:确保某列中的所有值满足一定条件。

NOT NULL 约束

默认情况下,列可以保存 NULL 值。如果您不想某列有 NULL 值,那么需要在该列上定义此约束,指定在该列上不允许 NULL 值。

NULL 与没有数据是不一样的,它代表着未知的数据。

-- 实例
CREATE TABLE link_men (
    ID INT PRIMARY KEY      NOT NULL;
    NAME           TEXT     NOT NULL
)

DEFAULT 约束

DEFAULT 约束在 INSERT INTO 语句没有提供一个特定的值时,为列提供一个默认值。

-- 实例
CREATE TABLE link_men(
    ID INT PRIMARY KEY      NOT NULL;
    NAME           TEXT     NOT NULL;
    ADDRESS        TEXT     NOT NULL;
    SALARY         REAL     DEFAULT 8000.00
)

UNIQUE 约束

UNIQUE 约束防止在一个特定的列存在两个记录具有相同的值。

-- 实例
CREATE TABLE link_men(
    ID INT PRIMARY KEY      NOT NULL;
    NAME           TEXT     NOT NULL;
    AGE            INT      NOT NULL UNIQUE;
    ADDRESS        TEXT;
    SALARY        REAL DEFAULT 8000.00
)

PRIMAY KEY 约束

PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。

-- 实例
CREATE TABLE link_men(
    ID INT PRIMARY KEY      NOT NULL;
    NAME           TEXT     NOT NULL;
    AGE            INT      NOT NULL UNIQUE;
    ADDRESS        TEXT;
    SALARY       , REAL DEFAULT 8000.00
)

FOREIGN KEY 约束

一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

-- 实例
CREATE TABLE link_men (
    ID INT PRIMARY KEY     NOT NULL;
    NAME           TEXT    NOT NULL;
    AGE            INT     NOT NULL UNIQUE;
    ADDRESS        TEXT;
    SALARY         REAL DEFAULT 8000.00;
    FOREIGN KEY (P_ID) REFERENCES persons(P_ID);
)

CHECK 约束

CHECK 约束启用输入一条记录要检查值的条件。如果条件值为 false,则记录违反了约束,且不能输入到表。

CREATE TABLE link_men(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        TEXT,
   SALARY         REAL    CHECK(SALARY > 0)
);

原文地址:https://www.cnblogs.com/haitao130v/p/11334389.html

时间: 2024-10-08 10:36:32

SQLite进阶-10.约束的相关文章

java进阶10 GUI图形界面 布局管理器之FlowLayout GridLayout

先说说FlowLayout 流式布局管理器. 效果 这是当第一行显示不下,才转到第二行的. 看看代码 package Frame; import java.awt.BorderLayout; import java.awt.FlowLayout; import javax.swing.JButton; import javax.swing.JFrame; public class MyLayout{ JFrame frame; public MyLayout(JFrame frame) { //

SQLite进阶-19.常用函数

目录 SQLite常用函数 SQLite常用函数 SQLite 有许多内置函数用于处理字符串或数字数据. 序号 函数 & 描述 1 SQLite COUNT 函数SQLite COUNT 聚集函数是用来计算一个数据库表中的行数. 2 SQLite MAX 函数SQLite MAX 聚合函数允许我们选择某列的最大值. 3 SQLite MIN 函数SQLite MIN 聚合函数允许我们选择某列的最小值. 4 SQLite AVG 函数SQLite AVG 聚合函数计算某列的平均值. 5 SQLit

C++之路进阶——差分约束(糖果)

2404 糖果 2011年省队选拔赛四川 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求.幼儿园的糖果总是有限的,lxhgww想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到

[Xcode10 实际操作]九、实用进阶-(10)定位设备的使用

本文将演示定位设备的使用. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 1 import UIKit 2 //导入需要用到的定位CoreLocation框架 3 //该框架可以利用三种技术来实现定位: 4 //1.全球卫星定位系统 5 //2.蜂窝基站三角网定位 6 //3.无线网络定位服务 7 //其中,全球卫星定位系统是最精确的. 8 import CoreLocation 9 10 //添加一个地理定位的代理协议CLLocationManagerDe

SQLite进阶-17.视图

目录 视图(View) 操作视图 更新视图 删除视图 查看所有的视图 视图(View) 视图是一个预定义的SQLite查询的形式存在的表的组合. 可以包含一个表的所有行或从一个或多个表选定行.可以从一个或多个表,这取决于创建视图的语句. 视图(View)是一种虚表,是只读的,因此在视图上无法执行DELETE,INSERT或UPDATE语句.但是可以创建一个触发器,视图上发生DELETE,INSERT或UPDATE操作时,需要做的操作在触发器内实现. -- 语句 CREATE [TEMP | TE

SQLite进阶-18.事务

目录 SQLite事务 事务的属性 事务控制 BEGIN TRANSACTION命令 COMMIT命令 ROLLBACK命令 SQLite事务 事务(Transaction) 是一个对数据库执行工作单元.事务是以逻辑顺序完成的工作单元或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成. 事务是指一个或者多个改变数据库的扩展.例如:如果你正在创建一个记录或者更新一个记录或者从表中删除一个记录,那么你正在该表上执行事务.重要的是要控制事务以确保数据的完整性和处理数据库错误. 实际上,

攻防世界 reverse 进阶 10 Reverse Box

攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www.megabeets.net/twctf-2016-reverse-reverse-box/ [TWCTF-2016:Reverse] Reverse Box Writeup 标准 Shak的客座文章. 挑战描述$ ./reverse_box $ {FLAG} 95eeaf95ef942349995

Java进阶(10) - 网络编程

BIO.NIO.AIONIO vs IO之间的理念上面的区别(NIO将阻塞交给了后台线程执行) IO是面向流的,NIO是面向缓冲区的 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方: NIO则能前后移动流中的数据,因为是面向缓冲区的 IO流是阻塞的,NIO流是不阻塞的 Java IO的各种流是阻塞的.这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入.该线程在此期间不能再干任何事情了 J

SQLite使用教程10 运算符

SQLite 运算符 SQLite 运算符是什么? 运算符是一个保留字或字符,主要用于 SQLite 语句的 WHERE 子句中执行操作,如比较和算术运算. 运算符用于指定 SQLite 语句中的条件,并在语句中连接多个条件. 算术运算符 比较运算符 逻辑运算符 位运算符 SQLite 算术运算符 假设变量 a=10,变量 b=20,则: 运算符 描述 实例 + 加法 - 把运算符两边的值相加 a + b 将得到 30 - 减法 - 左操作数减去右操作数 a - b 将得到 -10 * 乘法 -