【SQLite】SQLite3约束总结

news2024/11/19 11:28:24

前面学习了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.coloradmin.cn/o/1298273.html

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

相关文章

【nuxt3】cannot read preperties of null (reading ‘$nuxt‘)

问题描述 vue3 中,通过 createVNode 创建子组件实例时,发现子组件无法获取到父组件中的 router、store 信息,一旦子组件使用就会报错。 问题原因 通过控制台断点调试,发现时 appContext 值为空导致的。怀疑是创建子组件的时候&a…

RHEL8---网络配置

本章主要介绍网络配置的方法。 网络基础知识查看网络信息图形化界面修改通过配置文件修改命令行管理主机名的设置 网络基础知识 一台主机需要配置必要的网络信息,才可以连接到互联网。需要的配置网络信息包括IP、 子网掩码、网关和 DNS。 1、IP 地址 在计算机…

TOMCAT9安装

1、官网下载 2、解压到任意盘符,注意路径不要有中文 3、环境变量 path 下 配置 %CATALINA_HOME%\bin 4、找到tomcat9/bin, 点击 start.bat启动 tomcat

vue pc官网顶部导航栏组件

官网顶部导航分为一级导航和二级导航 导航的样子 文件的层级 router 文件层级 header 组件代码 <h1 class"logo-wrap"><router-link to"/"><img class"logo" :src"$config.company.logo" alt"" /><i…

Meta Platforms推出Imagine:基于Emu的免费AI文本到图像生成器服务

优势主要体现在以下两个方面&#xff1a; 精细运动控制&#xff1a; 该项目在实现摄像机运动和物体运动方面表现出色&#xff0c;成功实现了对两者运动的高度独立控制。这一特性为运动控制提供了更为精细的调整空间&#xff0c;使得在视频生成过程中能够实现更灵活、多样的运动…

Leetcode刷题笔记题解(C++):LCR 181. 字符串中的单词反转

思路&#xff1a;根据栈的原理先进后出&#xff0c;使用栈来依次保存每个单词&#xff0c;然后再依次从栈中取出每个单词 class Solution { public:string reverseMessage(string message) {int left 0;int right message.size()-1;//消除字符串前后多余的空格&#xff0c;比…

第1章-第1节-第一个Java程序,命令行编译并运行Java

第一个Java程序不用任何IDE&#xff0c;用记事本去编写&#xff0c;用命令行去编译并运行&#xff0c;这样便于了解Java程序运行原理。 1、首先打开记事本&#xff0c;写下如下代码&#xff1a; 然后另存为xxx.java&#xff0c;xxx文件名不强求与类名相同&#xff0c;但是建议…

安装@uni-helper/uni-app-types之后模板代码报错

安装uni-helper/uni-app-types之后模板代码一大片红 之后在https://uni-helper.js.org/uni-app-types找到了答案 配置tsconfig.json 添加vueCompilerOptions这个配置后&#xff0c;报错不见了 "vueCompilerOptions": {"nativeTags": ["block"…

算法Day24 不专心开车

不专心开车 Description 小硕开车经过一条公路&#xff0c;这条路线总共由n 1个不同海拔的点组成。小硕从海拔为0的点0开始骑行。 给小硕一个长度为n的整数数组arr&#xff0c;其中arr[i]是点i和点i 1的净海拔高度差&#xff08;0≤i < n&#xff09;。请你返回最高点的海…

OpenAI 首席运营官(COO)Brad Lightcap认为商业人工智能被夸大了

美国消费者新闻与商业频道&#xff08;CNBC&#xff09;是美国NBC环球集团持有的全球性财经有线电视卫星新闻台&#xff0c;是全球财经媒体中的佼佼者&#xff0c;其深入的分析和实时报导赢得了全球企业界的信任。在1991年前&#xff0c;使用消费者新闻与商业频道&#xff08;C…

算法通关村第二关—K个一组反转(黄金)

K个一组翻转链表 题目介绍 LeetCode25.给你一个链表&#xff0c;每k个节点一组进行翻转&#xff0c;请你返回翻转后的链表。k是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是k的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。进阶&#xff1…

计算机毕业设计 基于大数据的心脏病患者数据分析管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

【接口技术】实验5:模/数(ADC0809)和数/模(DAC0832)转换

实验5 模/数(ADC0809)和数/模(DAC0832)转换实验 一、实验目的 1&#xff1a;了解模/数转换的基本原理&#xff0c;掌握ADC0809的使用方法。 2&#xff1a;了解数/模转换的基本原理&#xff0c;掌握DAC0832的使用方法。 二、实验内容 &#xff08;1&#xff09;模/数转换器…

网件R8500 trojan

一 将路由器刷机成改版梅林 路由器首页的Firmware:380.70_0-X7.9.1是梅林改版 380.xx 梅林原版固件 380.xx_x 梅林改版固件 必须是改版梅林才支持trojan&#xff0c;所以要确保是梅林改版固件 点击上传文件&#xff0c;选择下载好的改版固件 固件及软件链接 链接: https:…

C语言--实现一个函数把一个整数转为它对应的十六进制的字符串

一.题目描述 实现一个函数把一个整数转为它对应的十六进制的字符串。 比如&#xff1a;输入数字1234 输出&#xff1a;4D2 二.思路分析 用一个sprintf函数可以解决问题&#xff0c;输出相对应的字符串 要注意的问题就是&#xff1a;函数结束后要继续使用的内存&#xff08;比如…

Leetcode—2048.下一个更大的数值平衡数【中等】

2023每日刷题&#xff08;五十四&#xff09; Leetcode—2048.下一个更大的数值平衡数 实现代码 class Solution { public:int nextBeautifulNumber(int n) {for(int x n 1; ; x) {vector<int> cnt(10, 0);for(int y x; y > 0; y / 10) {cnt[y%10];}bool ok tru…

【win32_005】调试信息打印到控制台----2种简单方法

方法1&#xff1a;使用win32 api函数 PCTSTR str1 TEXT("123456789");AllocConsole();HANDLE HConsole GetStdHandle(STD_OUTPUT_HANDLE);WriteConsole(HConsole, str1, 9, NULL, NULL);https://learn.microsoft.com/zh-cn/windows/console/writeconsole 方…

深度探索Linux操作系统 —— 构建initramfs

系列文章目录 深度探索Linux操作系统 —— 编译过程分析 深度探索Linux操作系统 —— 构建工具链 深度探索Linux操作系统 —— 构建内核 深度探索Linux操作系统 —— 构建initramfs 文章目录 系列文章目录前言一、为什么需要 initramfs二、initramfs原理探讨三、构建基本的init…

智能优化算法应用:基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于粒子群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.粒子群算法4.实验参数设定5.算法结果6.参考文…

反汇编语言区分函数和运算符

在汇编语言中&#xff0c;函数和运算符可以通过一些特定的指令和约定来区分。 函数&#xff1a; 函数通常由一系列指令组成&#xff0c;用于执行特定的任务或操作。函数通常具有入口点和出口点&#xff0c;分别表示函数的开始和结束位置。函数通常包含参数传递、局部变量的分配…