当前位置: 首页 > news >正文

SQL约束

目录

1.常见的SQL约束

1.1 添加主键约束

1.2  单独添加主键约束

1.3  删除主键约束

1.4  设置自动增长  

2.添加非空约束

3.添加唯一约束

4.添加默认值约束


我们已知道,创建数据表语法:

create table 表名(字段名1 数据类型(长度) [约束],字段名2 数据类型(长度) [约束],字段名3 数据类型(长度) [约束],...
) engine = 引擎名 default charset utf8;

 我们会发现字段名的结尾处可以添加SQL约束。

SQL约束是用于指定字段数据的规则,可以保证数据更加精确、可靠。 通俗地说,SQL约束就是数据在类型的基础上【增加了额外要求】。

1.常见的SQL约束

对于SQL约束,要注意:

(1)SQL约束不是必须的,而是为了让SQL更加规范而存在;

 (2)在实际应用中,可以对字段同时设定多个SQL约束,且都是在创建数据表时进行设定。

1.1 添加主键约束

在创建表时添加主键约束语法:

create table 表名(字段名 数据类型(长度) primary key [其他约束],...
) engine = 引擎名 default charset utf8;

说明:

(1)给primary key主键约束的字段设定值时,不允许出现重复值;[唯一性]

(2)主键约束列不能包含null值;[非空]

(3)每个表都应该有一个主键约束,且每个表只能有一个主键。

1.2  单独添加主键约束

除了可以在数据表添加主键约束外,还可以单独添加主键约束,语法:

# 创建表后,使用alter table关键字添加主键
alter table 表名 add primary key(字段名);

 此方式不常用,了解即可。

1.3  删除主键约束

给有主键约束的数据表删除主键约束,语法:

# 使用alter table关键字删除主键
alter table 表名 drop primary key;

说明: 当删除主键约束后,字段依旧有非空约束,不能为空。

1.4  设置自动增长  

在创建表时让主键约束字段为自动增长[auto],语法:

create table 表名(字段名 数据类型(长度) primary key auto_increment,...
) engine = 引擎名 default charset utf8;

说明:

(1)自动增长列的数据类型必须是整型;

(2)自动增长列必须为X键(例如主键、外键)。

当给数据字段设定了主键约束后,则: (1)值是唯一的; (2)值是非空的。

2.添加非空约束

语法:

create table 表名(字段名 数据类型(长度) [其他约束] not null,...
) engine = 引擎名 default charset utf8;

说明:

(1)当设定主键约束后,值默认是非空的;

(2)当给某列设定为not null后,在添加数据时必须向该字段传递非null值。

当设定为非空约束后,则:

(1)not null约束强制字段不接受null值;

(2)not null约束强制字段传递数据时,必须有数值.

3.添加唯一约束

语法:

create table 表名(字段名 数据类型(长度) [其他约束] unique,...
) engine = 引擎名 default charset utf8;

说明:

(1)每个表可以有多个unique唯一约束,但是每个表只能有一个primary key主键约束;

(2)当设定为某字段唯一约束后,给该字段添加已有值,则报错。

设定为唯一约束后,要了解:

(1)unique约束用于唯一标识数据表中的每条数据;

(2)primary key字段默认唯一;

(3)unique和primary key约束均为列提供了唯一性保证

当给数据字段设定了唯一约束后,则:值是唯一的。 通俗地说,当给某字段设定为unique后,在添加数据时若传递已有值,会出错。

4.添加默认值约束

语法:

create table 表名(字段名 数据类型(长度) [其他约束] default 值,...
) engine = 引擎名 default charset utf8;

说明:

(1)每个表可以有多个默认值约束;

(2)设置了默认值后,若不传递数值,则直接使用默认值。

当设定为默认值约束后,则:

(1)有了默认值约束后, 当不传递字段对应的值时,会使用默认值;

(2)有了默认值约束后, 当传递字段对应的值时,会传递的具体值为准。

相关文章:

SQL约束

目录 1.常见的SQL约束 1.1 添加主键约束 1.2 单独添加主键约束 1.3 删除主键约束 1.4 设置自动增长 2.添加非空约束 3.添加唯一约束 4.添加默认值约束 我们已知道,创建数据表语法: create table 表名(字段名1 数据类型(长度) [约束],字段名…...

lombok使用@slf4j 运行时提示找不到符号log(Missing POM for org.projectors:lombok:jar)

1.问题表现 原本是之前搭建好的工程&#xff0c;只是换了个开发环境重新启动就不行了。一直编译不通过&#xff01; 可以看到IDEA其实是引入了依赖的 都没有出现红色波浪线 <mapstruct.version>1.5.5.Final</mapstruct.version> <lombok.version>1.18.30<…...

21. 合并两个有序链表(递归)

目录 一;题目&#xff1a; 二代码; 三&#xff1a;结果&#xff1a; 一;题目&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 二代码; /*** Definition for singly-linked list.* struct ListNode {* …...

学习vue3 三,组件基础,父子组件传值

组件基础 每一个.vue 文件都可以充当组件来使用 每一个组件都可以复用 父组件引入之后可以直接当标签使用 案例&#xff1a; App.vue <script setup lang"ts"> import BaseRefAndReactive from "./components/BaseRefAndReactive.vue";</sc…...

月木学途开发 2.项目架构

1.项目介绍 月木学途是一款it在线学习网站&#xff0c;项目采用前后端分离架构。前端开发主要使用vue.js&#xff0c;后端使用Spring Cloud Alibaba技术栈。项目包含学习网站的大部分功能&#xff0c;分为管理员端和用户端。管理员端有权限管理、课程管理、网站管理、求职模块管…...

FPGA开发——按键控制数码管的设计

一、概述 按键控制数码管是一种常见的电子显示技术&#xff0c;它结合了按键输入与数码管显示的功能。在这一设计中&#xff0c;用户通过按下不同的按键来发送指令&#xff0c;这些指令随后被处理并转换为数码管上显示的数字或字符。按键通常作为输入设备&#xff0c;通过电路…...

【AI学习】[2024北京智源大会]具身智能:具身智能关键技术研究:操纵、决策、导航

具身智能关键技术研究&#xff1a;操纵、决策、导航 董 豪 | 北京大学助理教授 依然是边看边做些记录 这张图的重点是在说&#xff0c;我们的大脑&#xff0c;也是不同的部分处理不同的功能。这里面有些功能&#xff0c;比如视觉、听觉理解等功能&#xff0c;LLM已经具备&…...

C语言实现UDP广播

UDP 广播发送方 1.创建套接字&#xff1a;使用socket()函数创建一个UDP套接字。 2.设置套接字选项&#xff1a;使用setsockopt()函数设置SO_BROADCAST选项以允许广播。 3.发送数据&#xff1a;使用sendto()函数将数据发送到特定的广播地址和端口。 #include <stdio.h> …...

速记Java八股文——Redis 篇

前言 分类汇总 50 常见的 Redis 篇 经典后端面试题&#xff0c;并对题目进行了精炼总结&#xff0c;旨在帮助大家高效记忆&#xff0c;在面试中游刃有余&#xff0c;不至于陷入词穷的窘境。 Redis 篇 什么是Redis? Redis是一个开源的内存数据结构存储系统&#xff0c;可用作数…...

CUDA编程05 - GPU内存架构和数据局部性

一&#xff1a;概述 到目前为止&#xff0c;我们已经学会了如何编写 CUDA 核函数&#xff0c;以及如何设置和分配大量线程来执行核函数。我们还了解了当前 GPU 硬件的计算架构&#xff0c;以及线程在硬件上调度执行过程。在本章中&#xff0c;我们将重点关注 GPU 的片上(on-chi…...

TCP协议程序设计

文章目录 前言一、TCP协议程序是什么&#xff1f;二、使用步骤 1.服务器端与客户端2.实操展示总结 前言 TCP网络程序设计是指利用Socket类编写通信程序。利用TCP协议进行通讯的两个应用程序是有主次之分的&#xff0c;一个称为服务器程序&#xff0c;另一个称为客户机程序&…...

【C++高阶】:自定义删除器的全面探索

✨ 我凌于山壑万里&#xff0c;一生自由随风起 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;C学习 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&am…...

Java中的不可变集合、Stream流以及异常处理的

目录 1. 不可变集合 如何创建不可变集合 2. Stream流 Stream基本操作 3. 异常处理 异常的分类 异常处理机制 1. 不可变集合 在Java中&#xff0c;不可变集合指的是一旦创建后内容不可更改的集合。这种集合的好处在于它们可以安全地被多个线程访问而无需同步&#xff0c;…...

LeetCode面试题Day1|LeetCode26 删除有序数组中的重复项、LeetCode80 删除有序数组中的重复项Ⅱ

前言&#xff1a; 暑假实在不知道干什么了&#xff0c;做一下力扣的《面试经典150题》吧&#xff0c;记录一下学习轨迹。(如果有要打非中文竞赛或者精进一下英语水平的记得把力扣调成英文) 题目1&#xff1a; 指路&#xff1a; . - 力扣&#xff08;LeetCode&#xff09;26…...

细说文件操作

你好&#xff01;感谢支持孔乙己的新作&#xff0c;本文就文件操作与大家分享我的思路。 希望能大佬们多多纠正及支持 &#xff01;&#xff01;&#xff01; 个人主页&#xff1a;爱摸鱼的孔乙己-CSDN博客 目录 1.什么是文件 1.1.程序设计文件 1.1.1.程序文件 1.1.2.数据文…...

Vue3从零开始——掌握setup、ref和reactive函数的奥秘

文章目录 一、Vue 3 组合式 API 概述二、setup​ 函数的基本使用2.1 setup​ 函数的特点2.2 setup​ 函数的基本结构2.3 实现一个简单的小demo 三、ref​ 函数的功能和应用3.1 ref​函数介绍3.2 基本使用3.2.1 定义ref​数据3.2.2 修改响应式变量 3.3 使用ref​函数实现计数器 …...

C语言练习--屏幕上打印九九乘法表

int main() { int i 0; for (i 1; i < 10; i) { int j 0; for (j 1; j <i; j) { printf(" %d*%d%2d", i, j, i * j); } printf("\n"); } return 0; }...

将tsx引入vue

按钮 vue <cl-batch-btn >新增批量</cl-batch-btn> import batch from "//modules/ad/components/ uploading/batch.vue" import ClBatchBtn from "/~/crud/src/components/batch-btn"; tsx...

前端实现签字效果+合同展示

文章目录 获取一个高度会变的元素的高度获取元素设置的 transform适配手机transform-origin: 5% 0; 的原因修改后 签字效果取消el-dialog的头部边距为什么禁止界面滚动vue3 使用 nextTick实现效果 签字判断是横是竖canvas 去掉空白部分canvas裁剪图片最终完善代码&#xff0c;可…...

[AI Embedchain] 开始使用 - 快速开始

安装 首先安装 Python 包&#xff1a; pip install embedchain安装包后&#xff0c;根据您的偏好&#xff0c;您可以选择使用以下内容&#xff1a; 开源模型 本节提供了一个快速入门示例&#xff0c;展示了如何使用 Mistral 作为开源 LLM&#xff08;大型语言模型&#xff…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

es6+和css3新增的特性有哪些

一&#xff1a;ECMAScript 新特性&#xff08;ES6&#xff09; ES6 (2015) - 革命性更新 1&#xff0c;记住的方法&#xff0c;从一个方法里面用到了哪些技术 1&#xff0c;let /const块级作用域声明2&#xff0c;**默认参数**&#xff1a;函数参数可以设置默认值。3&#x…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

前端调试HTTP状态码

1xx&#xff08;信息类状态码&#xff09; 这类状态码表示临时响应&#xff0c;需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分&#xff0c;客户端应继续发送剩余部分。 2xx&#xff08;成功类状态码&#xff09; 表示请求已成功被服务器接收、理解并处…...