数据库——SQL约束窗口函数介绍

4.SQL约束介绍

(1)主键约束

A、基本内容
  • 基本内容
    • p r i m a r y primary primary k e y key key约束唯一表示数据库中的每条记录
    • 主键必须包含唯一的值(UNIQUE)
    • 主键不能包含NULL值(NOT NULL)
    • 每个表都应该有一个主键,并且每个表只能有一个主键
  • 遵循原则
    • 逐渐应当是对用户没有意义的
    • 永远也不要更新主键
    • 主键不应该包含动态变换的数据,如时间戳,创建时间列,修改时间列
    • 逐渐应当由计算机自动生成
B、添加主键约束
  • 创建表时添加主键

    #创建数据表时添加
    create table person(id INT PRIMARY KEY,last_name VARCHAR(100),first_name VARCHAR(100),address VARCHAR(100),city VARCHAR(100)
    );
    

最终输出的表

FieldTypeNullKeyDefaultExtra
idint(20)NOPRI
last_namevarchar(100)YES
first_namevarchar(100)YES
addressvarchar(100)YES
cityvarchar(100)YES
  • 创建表后添加主键

    # 创建后添加约束
    create table person(id INT,last_name VARCHAR(100),first_name VARCHAR(100),address VARCHAR(100),city VARCHAR(100)
    );
    
    • 在创建表后,可以使用ALTER TABLE关键字添加主键
    ALTER TABLE category ADD PRIMARY KEY(cid);
    
C、删除主键约束
  • 格式:alter table category drop primary key;
D、自动增长列

auto_increment(自动增长列)关键字:我们通常在每次插入新记录时,数据库自动生成字段的值

  • 注意:自动增长列类型必须是整型,自动增长列必须为键(一般是主键),自动增长常与主键约束配合使用
  • 创建表时添加自动增长
CREATE TABLE person2(id INT PRIMARY KEY AUTO_INCREMENT,last_name VARCHAR(100),first_name VARCHAR(100),address VARCHAR(100),city VARCHAR(100)
)

最终输出的表

FieldTypeNullKeyDefaultExtra
idint(20)NOPRIauto_increment
last_namevarchar(100)YES
first_namevarchar(100)YES
addressvarchar(100)YES
cityvarchar(100)YES
  • 在创建表之后添加自动增长
ALTER TABLE person2 CHANGE id id INT AUTO_INCERMENT;
  • 示例

    向person中添加数据时,可以不为id字段设置值,或可以设置成null,数据库将自动维护主键值

    输入

    insert into person2(first_name,last_name) values('Bill','Gates');
    或
    insert into person2(id,first_name,last_name) values(null,'Bill','Gates');
    

    在输入select * from person2语句之后,会输出

    idlast_namefirst_nameaddresscity
    1GatesBill
    2GatesBill

    可以看到,从上往下,id的值是

  • 其他

    当主键不是自增长类型时

    • 不为 id 字段设置值

      执行插入语句时若不指定 id 字段值,数据库会报错。因为非自增长主键字段不允许有空值(一般定义为主键时会设置为 NOT NULL ),缺少主键值就无法满足数据完整性约束 。例如在 MySQL 中执行 insert into person2(first_name,last_name) values('Bill','Gates'); 会报错,提示主键字段不能为空 。

    • 将 id 设置成 null

      同样会报错。因为主键具有唯一性和非空性约束,null 值既不符合非空要求,也难以保证唯一性(多个 null 无法区分 ) 。像执行 insert into person2(id,first_name,last_name) values(null,'Bill','Gates'); ,数据库会提示违反主键约束相关错误 。

    总之,非自增长主键要求在插入数据时必须明确指定一个符合其数据类型且唯一的有效值。

(2)非空约束

  • NOTNULL 约束强制列不进行NULL值,强制字段始终包含值,故说明如果不向字段中添加值,就无法插入新记录或者更新记录

  • 示例

CREATE TABLE person3(id INT PRIMARY KEY,last_name VARCHAR(100) NOT NULL,first_name VARCHAR(100),address VARCHAR(100),city VARCHAR(100)
)

最终输出的表

FieldTypeNullKeyDefaultExtra
idint(20)NOPRIauto_increment
last_namevarchar(100)NO
first_namevarchar(100)YES
addressvarchar(100)YES
cityvarchar(100)YES

(3)唯一约束

  • 基础

    • UNIQUE约束唯一标识数据库表中的每条记录
    • UNIQUE和PRIMARY KEY 约束均为列或列集合提供了唯一性的保证
    • PRIMARY KEY 拥有自动定义的UNIQUE约束
  • 注意

    • 每个表中可以有多个UNIQUE约束,但是每个表只能有一个PERIMARY KEY约束
  • 示例

CREATE TABLE person3(id INT PRIMARY KEY,last_name VARCHAR(100) UNIQUE,first_name VARCHAR(100),address VARCHAR(100),city VARCHAR(100)
)

最终输出的表

FieldTypeNullKeyDefaultExtra
idint(20)NOPRIauto_increment
last_namevarchar(100)YESUNI
first_namevarchar(100)YES
addressvarchar(100)YES
cityvarchar(100)YES

(4)默认值约束

  • 当不填写字段对应的值会使用默认值,如果填写时以填写的为准
  • 示例
CREATE TABLE person3(id INT PRIMARY KEY,last_name varchar(100) NOT NULL,first_name varchar(100),address varchar(100),city varchar(100) DEFAULT '北京'
)

最终输出的表

FieldTypeNullKeyDefaultExtra
idint(20)NOPRIauto_increment
last_namevarchar(100)YESUNI
first_namevarchar(100)YES
addressvarchar(100)YES
cityvarchar(100)YES北京

四、窗口函数

  • 基本语法:SELECT SUM() OVER(PARTITION BY ___ ORDER BY ___) FROM TABLE;
  • PARTITION BYGROUP BY的区别
    • GROUP BY分组聚合之后,分组字段有几个取值,就会返回几条结果
    • PARTITION BY返回的结果和原始数据表的条目数是一样的

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

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

相关文章

【typenum】 8 常量文件(consts.rs)

一、源码 这段代码通过类型级编程(type-level programming)在编译期实现数值计算。以下是常量定义部分: // THIS IS GENERATED CODE #![allow(missing_docs)] use crate::int::{NInt, PInt}; /** Type aliases for many constants.This fil…

第8讲、Multi-Head Attention 的核心机制与实现细节

🤔 为什么要有 Multi-Head Attention? 单个 Attention 机制虽然可以捕捉句子中不同词之间的关系,但它只能关注一种角度或模式。 Multi-Head 的作用是: 多个头 多个视角同时观察序列的不同关系。 例如: 一个头可能专…

百度智能云千帆携手联想,共创MCP生态宇宙

5月7日,2025联想创新科技大会(Tech World)在上海世博中心举行,本届大会以“让AI成为创新生产力”为主题。会上,联想集团董事长兼CEO杨元庆展示了包括覆盖全场景的超级智能体矩阵,包括个人超级智能体、企业超…

【OpenCV】帧差法、级联分类器、透视变换

一、帧差法(移动目标识别): 好处:开销小,不怎么消耗CPU的算力,对硬件要求不高,但只适合固定摄像头 1、优点 计算效率高,硬件要求 响应速度快,实时性强 直接利用连续帧…

数据库迁移的艺术:团队协作中的冲突预防与解决之道

title: 数据库迁移的艺术:团队协作中的冲突预防与解决之道 date: 2025/05/17 00:13:50 updated: 2025/05/17 00:13:50 author: cmdragon excerpt: 在团队协作中,数据库迁移脚本冲突是常见问题。通过Alembic工具,可以有效地管理和解决这些冲突。冲突预防的四原则包括功能分…

Linux常用命令43——bunzip2解压缩bz2文件

在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率,bunzip2可解压缩.bz2格式的压缩文件。bunzip2实际上是bzip2的符号连接,执行bunzip2与bzip2 -d的效果相同。本篇学习记录bunzip2命令的基本使用。 首先查看帮助文档&#…

盲盒:拆开未知的惊喜,收藏生活的仪式感

一、什么是盲盒?—— 一场关于“未知”的浪漫冒险 盲盒,是一种充满神秘感的消费体验: 🎁 盒中藏惊喜——每个盲盒外观相同,但内含随机商品,可能是普通款、稀有款,甚至是“隐藏款”;…

Android 中使用通知(Kotlin 版)

1. 前置条件 Android Studio:确保使用最新版本(2023.3.1)目标 API:最低 API 21,兼容 Android 8.0(渠道)和 13(权限)依赖库:使用 WorkManager 和 Notificatio…

使用大模型预测急性结石性疾病技术方案

目录 1. 数据预处理与特征工程伪代码 - 数据清洗与特征处理数据预处理流程图2. 大模型构建与训练伪代码 - 模型训练模型训练流程图3. 术前预测系统伪代码 - 术前风险评估术前预测流程图4. 术中实时调整系统伪代码 - 术中风险预警术中调整流程图5. 术后护理系统伪代码 - 并发症预…

每日Prompt:生成自拍照

提示词 帮我生成一张图片:图片风格为「人像摄影」,请你画一张及其平凡无奇的iPhone对镜自拍照,主角是穿着JK风格cos服的可爱女孩,在自己精心布置的可按风格的房间内的落地镜前用后置摄像头随手一拍的快照。照片开启了闪光灯&…

动态规划-64.最小路径和-力扣(LetCode)

一、题目解析 从左上角到右下角使得数字总和最小且只能向下或向右移动 二、算法原理 1.状态表示 我们需要求到达[i,j]位置时数字总和的最小值,所以dp[i][j]表示:到达[i,j]位置时,路径数字总和的最小值。 2.状态转移方程 到达[i,j]之前要先…

LeetCode LCR 010 和为 K 的子数组 (Java)

两种解法详解:暴力枚举与前缀和哈希表寻找和为k的子数组 在解决数组中和为k的连续子数组个数的问题时,我们可以采用不同的方法。本文将详细解析两种常见的解法:暴力枚举法和前缀和结合哈希表的方法,分析它们的思路、优缺点及适用…

OpenVLA (2) 机器人环境和环境数据

文章目录 [TOC](文章目录) 前言1 BridgeData V21.1 概述1.2 硬件环境 2 数据集2.1 场景与结构2.2 数据结构2.2.1 images02.2.2 obs_dict.pkl2.2.3 policy_out.pkl 3 close question3.1 英伟达环境3.2 LIBERO 环境更适合仿真3.3 4090 运行问题 前言 按照笔者之前的行业经验, 数…

深度学习(第3章——亚像素卷积和可形变卷积)

前言: 本章介绍了计算机识别超分领域和目标检测领域中常常使用的两种卷积变体,亚像素卷积(Subpixel Convolution)和可形变卷积(Deformable Convolution),并给出对应pytorch的使用。 亚像素卷积…

大模型在腰椎间盘突出症预测与治疗方案制定中的应用研究

目录 一、引言 1.1 研究背景 1.2 研究目的与意义 二、腰椎间盘突出症概述 2.1 定义与病因 2.2 症状与诊断方法 2.3 治疗方法概述 三、大模型技术原理与应用基础 3.1 大模型的基本原理 3.2 大模型在医疗领域的应用现状 3.3 用于腰椎间盘突出症预测的可行性分析 四、…

Vue3学习(组合式API——ref模版引用与defineExpose编译宏函数)

目录 一、ref模版引用。 &#xff08;1&#xff09;基本介绍。 &#xff08;2&#xff09;核心基本步骤。(以获取DOM、组件为例) &#xff08;3&#xff09;案例&#xff1a;获取dom对象演示。 <1>需求&#xff1a;点击按钮&#xff0c;让输入框聚焦。 &#xff08;4&…

公链开发及其配套设施:钱包与区块链浏览器

公链开发及其配套设施&#xff1a;钱包与区块链浏览器的技术架构与生态实践 ——2025年区块链基础设施建设的核心逻辑与创新突破 一、公链开发&#xff1a;构建去中心化世界的基石 1. 技术架构设计的三重挑战 公链作为开放的区块链网络&#xff0c;需在性能、安全性与去中心…

Kotlin 作用域函数(let、run、with、apply、also)对比

Kotlin 的 作用域函数&#xff08;Scope Functions&#xff09; 是简化代码逻辑的重要工具&#xff0c;它们通过临时作用域为对象提供更简洁的操作方式。以下是 let、run、with、apply、also 的对比分析&#xff1a; 一、核心区别对比表 函数上下文对象引用返回值是否扩展函数…

14、Python时间表示:Unix时间戳、毫秒微秒精度与time模块实战

适合人群&#xff1a;零基础自学者 | 编程小白快速入门 阅读时长&#xff1a;约5分钟 文章目录 一、问题&#xff1a;计算机中的时间的表示、Unix时间点&#xff1f;1、例子1&#xff1a;计算机的“生日”&#xff1a;Unix时间点2、答案&#xff1a;&#xff08;1&#xff09;U…

AI日报 - 2024年5月17日

&#x1f31f; 今日概览 (60秒速览) ▎&#x1f916; 大模型前沿 | OpenAI推出自主编码代理Codex&#xff1b;Google DeepMind发布Gemini驱动的编码代理AlphaEvolve&#xff0c;能设计先进算法&#xff1b;Meta旗舰AI模型Llama 4 Behemoth发布推迟。 Codex能并行处理多任务&…