【SQLite】SQLite3约束总结

前面学习了SQLite数据库的常见使用方法,其中包含许多约束,常见的如NOT NULLDEFAULTUNIQUEPRIMARY 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允许用户重命名表,或向先有的表添加一个新的列。但重命名列,删除一列,或从一个表中添加或删除约束都是不可能的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【设计模式-3.2】结构型——适配器模式

说明:本文介绍设计模式中结构型设计模式中的,适配器模式; 插头转换器 适配器模式属于结构型设计模式,设计思想体现在结构上的。以插头转换器为例,当你需要给手机充电,但是眼前只有一个三孔插座&#xff0…

二叉树结点个数、叶子结点个数、树的高度、第k层结点个数的计算(C语言)

目录 前言 分治算法 模拟二叉树代码 结点个数计算 错误方法 不便利方法 基于分治思想的方法 叶子结点个数 树的高度 第k层结点的个数 前言 在链式二叉树的前序、中序、后续遍历中我们模拟了一棵二叉树,并实现了它的前、中、后序遍历,现在我们来…

UE4 .ini文件使用

在需要给配置文件的类中加上config标签,当然变量也要加 在项目的Config下,新建一个Default类的UCLASS中config等于的名字,这里结合上面截图就是DefaultTest 在下面写入 [/Script/项目名/类名] 然后写变量以及对应的值即可

【Angular 开发】Angular 信号的应用状态管理

自我介绍 做一个简单介绍,年近48 ,有20多年IT工作经历,目前在一家500强做企业架构.因为工作需要,另外也因为兴趣涉猎比较广,为了自己学习建立了三个博客,分别是【全球IT瞭望】,【架构…

GO面试题系列

1.GO有哪些关键字 2.GO有哪些数据类型 3.Go方法与函数的区别 在Go语言中,方法和函数是两个不同的概念,尽管它们在某些方面有相似之处。下面是它们的主要区别: 定义位置: 函数: 函数是独立声明的,它们不…

python数据分析总结(pandas)

目录 前言 df导入数据 df基本增删改查 数据清洗 ​编辑 索引操作 数据统计 行列操作 ​编辑 df->types 数据格式化 ​编辑 日期数据处理 前言 此篇文章为个人python数据分析学习总结,总结内容大都为表格和结构图方式,仅供参考。 df导入数…

Vue3使用vue-baidu-map-3x百度地图

安装vue-baidu-map-3x: // vue3 $ npm install vue-baidu-map-3x --save// vue2 $ npm install vue2-baidu-map --save 全局注册/局部注册: import { createApp } from vue import App from ./App.vue import BaiduMap from vue-baidu-map-3xconst app …

综述 2017-Genome Biology:Alignment-free sequence comparison

Zielezinski, Andrzej, et al. "Alignment-free sequence comparison: benefits, applications, and tools." Genome biology 18 (2017): 1-17. https://genomebiology.biomedcentral.com/articles/10.1186/s13059-017-1319-7 被引次数:476应用问题&…

curl 18 HTTP/2 stream

cd /Users/haijunyan/Desktop/CustomKit/KeepThreadAlive/KeepThreadAlive //Podfile所在文件夹 git config --global https.postBuffer 10485760000 git config --global http.postBuffer 10485760000 pod install https://blog.csdn.net/weixin_41872403/article/details/86…

top K问题(借你五分钟)

目录 前言 top K问题 模拟数据 建堆 验证(简单了解即可) 最终代码 调试部分 前言 在大小堆的实现(C语言)中我们讨论了堆的实际意义,在看了就会的堆排序(C语言)中我们完成了堆排序&#…

银河麒麟本地软件源配置方法

软件源介绍 软件源可以理解为软件仓库,当需要安装软件时则会根据源配置去相应的软件源下载软件包,此方法的优点是可以自动解决软件包的依赖关系。常见的软件源有光盘源、硬盘源、FTP源、HTTP源,本文档主要介绍本地软件源的配置方法&#xff…

功能强大的屏幕录制和剪辑工具Camtasia Studio 2024 中文版

Camtasia Studio 2024 是一款功能强大的屏幕录像工具,集视频录制、剪辑、编辑和播放于一体的多功能屏幕录制软件,Camtasia Studio 2024操作简单,它能够轻松为您将屏幕上的所有声音、影音、鼠标移动的轨迹和麦克风声音全部录制下来&#xff0c…

分布式架构原理与实践读书笔记

分布式架构原理与实践读书笔记 IT 软件架构的更迭:从单体架构,到集群架构,到现在的分布式和微服务架构。 分布式架构具有分布性、自治性、并行性、全局性等特点。 为了应对请求的高并发和业务的复杂性,需要对应用服务进行合理拆…

使用Jmeter做性能测试的注意点

一、性能测试注意点 1. 用jmeter测试时使用BeanShell脚本获取随机参数值,会导致请求时间过长,TPS过低。应改为使用csv读取参数值,记录的TPS会更加准确。 注:进行性能测试时,应注意会影响请求时间的操作,尽量…

1-4、JDK目录结构

语雀原文链接 文章目录 1、目录结构2、JDK中rt.jar、tools.jar和dt.jar作用3、bin目录部分说明(基本工具) 1、目录结构 bin目录:包含一些用于开发Java程序的工具,例如:编译工具(javac.exe)、运行工具 (java.exe) 、打…

菜鸟学习日记(python)——循环语句

python中的循环语句包括for循环语句和while循环语句,但是python中是没有do...while循环语句的。 while循环语句 while循环语句的一般格式为; while condition:loop body condition是循环判断条件,loop body是循环体。 当循环条件成立时,…

基于ssm的彩妆小样售卖商城的设计与实现论文

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于彩妆小样售卖商城当然也不能排除在外,随着网络技术的不断成熟,带动了彩妆小样售卖商城,它彻底改变了过…

Leetcode—231.2的幂【简单】

2023每日刷题&#xff08;五十四&#xff09; Leetcode—231.2的幂 实现代码 class Solution { public:bool isPowerOfTwo(int n) {if(n < 0) {return false;}long long ans 1;while(ans < n) {ans * 2;}if(ans n) {return true;}return false;} };运行结果 之后我会…

时间序列预测专栏介绍 — 算法原理、源码解析、项目实战

专栏链接&#xff1a;https://blog.csdn.net/qq_41921826/category_12495091.html 专栏内容 所有文章提供源代码、数据集、效果可视化 文章多次上热搜榜单 时间序列预测存在的问题 现有的大量方法没有真正的预测未来值&#xff0c;只是用历史数据做验证 利用时间序列分解算法存…

【Vue第3章】使用Vue脚手架_Vue2

目录 3.1 初始化脚手架 3.1.1 说明 3.1.2 具体步骤 3.1.3 模板项目的结构 3.1.4 笔记与代码 3.1.4.1 笔记 3.1.4.2 01_src_分析脚手架 3.2 ref与props 3.2.1 ref 3.2.2 props 3.2.3 笔记与代码 3.2.3.1 笔记 3.2.3.2 02_src_ref属性 3.2.3.3 03_src_props配置 3…