【SQLite】SQLite3约束总结

前面学习了SQLite数据库的常见使用方法,其中包含许多约束,常见的如NOT NULLDEFAULTUNIQUEPRIMARY KEY(主键)CHECK

本篇文章主要介绍这些约束在SQLite中的使用


什么是约束

约束是在数据库表中的某列字段上强制执行的规则,用以限制插入表中的数据类型,确保数据库中的数据的准确性和可靠性

约束分为列级约束表级约束,前者适用于列,后者应用于整个表

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允许用户重命名表,或向先有的表添加一个新的列。但重命名列,删除一列,或从一个表中添加或删除约束都是不可能的

相关推荐

  1. MySQL之约束详细总结

    2023-12-09 23:42:01       12 阅读
  2. Vue3知识总结-3

    2023-12-09 23:42:01       10 阅读
  3. GPT3年终总结

    2023-12-09 23:42:01       29 阅读
  4. react面试总结3

    2023-12-09 23:42:01       36 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-09 23:42:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-09 23:42:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-09 23:42:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-09 23:42:01       20 阅读

热门阅读

  1. Python基础学习文档(1)

    2023-12-09 23:42:01       29 阅读
  2. 【C3】【二维数组】【入门】交换行

    2023-12-09 23:42:01       35 阅读
  3. 我的K线图、反转图、砖型图和技术指标

    2023-12-09 23:42:01       35 阅读
  4. 编程中常见的技术难题:挑战与解决之道

    2023-12-09 23:42:01       30 阅读
  5. XMake构建Qt项目报错“undefined reference”

    2023-12-09 23:42:01       39 阅读
  6. TensorFlow的介绍

    2023-12-09 23:42:01       37 阅读
  7. Python处理Excel文件并与数据库匹配做拼接

    2023-12-09 23:42:01       31 阅读
  8. 单片机中的printf思考

    2023-12-09 23:42:01       36 阅读
  9. 分享一个用C#写的Aspose.Words生成word的工具类

    2023-12-09 23:42:01       31 阅读
  10. c语言编程题经典100例——(90~95例)

    2023-12-09 23:42:01       34 阅读
  11. [动态规划]最长公共子序列

    2023-12-09 23:42:01       31 阅读
  12. 从Android源码中生成系统签名文件

    2023-12-09 23:42:01       37 阅读
  13. 面向无组织点云中快速鲁棒的边缘提取方法

    2023-12-09 23:42:01       30 阅读
  14. 考研真题数据结构

    2023-12-09 23:42:01       32 阅读
  15. Centos7安装docker支持NVIDIA GPU

    2023-12-09 23:42:01       30 阅读
  16. 反向传播算法

    2023-12-09 23:42:01       34 阅读
  17. 《C++新经典设计模式》之第18章 备忘录模式

    2023-12-09 23:42:01       37 阅读
  18. 考研真题数据结构

    2023-12-09 23:42:01       37 阅读