数据库——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) );
最终输出的表
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(20) | NO | PRI | ||
last_name | varchar(100) | YES | |||
first_name | varchar(100) | YES | |||
address | varchar(100) | YES | |||
city | varchar(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)
)
最终输出的表
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(20) | NO | PRI | auto_increment | |
last_name | varchar(100) | YES | |||
first_name | varchar(100) | YES | |||
address | varchar(100) | YES | |||
city | varchar(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
语句之后,会输出id last_name first_name address city 1 Gates Bill 2 Gates Bill 可以看到,从上往下,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)
)
最终输出的表
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(20) | NO | PRI | auto_increment | |
last_name | varchar(100) | NO | |||
first_name | varchar(100) | YES | |||
address | varchar(100) | YES | |||
city | varchar(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)
)
最终输出的表
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(20) | NO | PRI | auto_increment | |
last_name | varchar(100) | YES | UNI | ||
first_name | varchar(100) | YES | |||
address | varchar(100) | YES | |||
city | varchar(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 '北京'
)
最终输出的表
Field | Type | Null | Key | Default | Extra |
---|---|---|---|---|---|
id | int(20) | NO | PRI | auto_increment | |
last_name | varchar(100) | YES | UNI | ||
first_name | varchar(100) | YES | |||
address | varchar(100) | YES | |||
city | varchar(100) | YES | 北京 |
四、窗口函数
- 基本语法:
SELECT SUM() OVER(PARTITION BY ___ ORDER BY ___) FROM TABLE;
PARTITION BY
与GROUP BY
的区别GROUP BY
分组聚合之后,分组字段有几个取值,就会返回几条结果PARTITION BY
返回的结果和原始数据表的条目数是一样的
相关文章:
数据库——SQL约束窗口函数介绍
4.SQL约束介绍 (1)主键约束 A、基本内容 基本内容 p r i m a r y primary primary k e y key key约束唯一表示数据库中的每条记录主键必须包含唯一的值(UNIQUE)主键不能包含NULL值(NOT NULL)每个表都应…...
Linux系统启动相关:vmlinux、vmlinuz、zImage,和initrd 、 initramfs,以及SystemV 和 SystemD
目录 一、vmlinux、vmlinuz、zImage、bzImage、uImage 二、initrd 和 initramfs 1、initrd(Initial RAM Disk) 2、initramfs(Initial RAM Filesystem) 3、initrd vs. initramfs 对比 4. 如何查看和生成 initramfs 三、Syste…...

JSP链接MySQL8.0(Eclipse+Tomcat9.0+MySQL8.0)
所用环境 Eclipse Tomcat9.0 MySQL8.0.21(下载:MySQL Community Server 8.0.21 官方镜像源下载 | Renwole) mysql-connector-java-8.0.21(下载:MySQL :: Begin Your Download) .NET Framework 4.5.2(下…...
Python爬虫-爬取百度指数之人群兴趣分布数据,进行数据分析
前言 本文是该专栏的第56篇,后面会持续分享python爬虫干货知识,记得关注。 在本专栏之前的文章《Python爬虫-爬取百度指数之需求图谱近一年数据》中,笔者有详细介绍过爬取需求图谱的数据教程。 而本文,笔者将再以百度指数为例子,基于Python爬虫获取指定关键词的人群“兴…...

SEO长尾词与关键词优化实战
内容概要 在SEO优化体系中,长尾关键词与核心关键词的协同作用直接影响流量获取效率与用户转化路径。长尾词通常由3-5个词组构成,搜索量较低但意图明确,能精准触达细分需求用户;核心关键词则具备高搜索量与广泛覆盖能力࿰…...

机器学习-人与机器生数据的区分模型测试-数据处理1
附件为训练数据,总体的流程可以作为参考。 导入依赖 import pandas as pd import os import numpy as np from sklearn.model_selection import train_test_split,GridSearchCV from sklearn.ensemble import RandomForestClassifier,VotingClassifier from skle…...

HelloWorld
HelloWorld 新建一个java文件 文件后缀名为 .javahello.java【注意】系统可能没有显示文件后缀名,我们需要手动打开 编写代码 public class hello {public static void main(String[] args) {System.out.print(Hello,World)} }编译 javac java文件,会生…...
令牌桶和漏桶算法使用场景解析
文章目录 什么时候用令牌桶,什么时候用漏桶算法??先放结论 两个算法一眼看懂什么时候选令牌桶?什么时候选漏桶?组合用法(90% 的真实系统都会这么干)小结记忆 对令牌桶和漏桶组合用法再次详细叙述…...
轻量、优雅、高扩展的事件驱动框架——Hibiscus-Signal
在现代企业级应用中,事件驱动架构(EDA)已成为解耦系统、提升扩展性的利器。今天给大家推荐一个非常优秀的国产轻量级事件驱动框架 —— Hibiscus Signal,它不仅天然整合 Spring Boot,还提供完整的事件生命周期支持&…...

SEO 优化实战:ZKmall模板商城的 B2C商城的 URL 重构与结构化数据
在搜索引擎算法日益复杂的今天,B2C商城想要在海量信息中脱颖而出,仅靠优质商品和营销活动远远不够。ZKmall模板商城以实战为导向,通过URL 重构与结构化数据优化两大核心策略,帮助 B2C 商城实现从底层架构到搜索展示的全面升级&…...
2020CCPC河南省赛题解
A. 班委竞选 签到题,模拟。 #include <bits/stdc.h> #define x first #define y second #define int long long //#define double long doubleusing namespace std; typedef unsigned long long ULL ; typedef pair<int,int> PII ; typedef pair<d…...

数字万用表与指针万用表使用方法及注意事项
在电子测量领域,万用表是极为常用的工具,数字万用表和指针万用表各具特点。熟练掌握它们的使用方法与注意事项,能确保测量的准确性与安全性。下面为您详细介绍: 一 、数字万用表按钮功能 > 进入及退出手动量程模式 每 按 […...
虚拟主播肖像权保护,数字时代的法律博弈
首席数据官高鹏律师团队 在虚拟主播行业蓬勃发展的表象之下,潜藏着一场关乎法律边界的隐形战争。当一位虚拟偶像的3D模型被非法拆解、面部数据被批量复制,运营方惊讶地发现——传统的肖像权保护体系,竟难以完全覆盖这具由代码与数据构成的“…...

【读代码】端到端多模态语言模型Ultravox深度解析
一、项目基本介绍 Ultravox是由Fixie AI团队开发的开源多模态大语言模型,专注于实现音频-文本的端到端实时交互。项目基于Llama 3、Mistral等开源模型,通过创新的跨模态投影架构,绕过了传统语音识别(ASR)的中间步骤,可直接将音频特征映射到语言模型的高维空间。 核心优…...

RabbitMQ工作流程及使用方法
一、什么是RabbitMQ RabbitMQ 是一款基于 AMQP(高级,消息队列协议) 的开源消息中间件,专为分布式系统设计,用于实现应用程序间的异步通信,其核心功能是通过 消息代理(Message Broker&…...
Java 面向对象进阶:解锁多态、内部类与包管理
Java 面向对象进阶:解锁多态、内部类与包管理 🔑 在 Java 的面向对象编程中,多态赋予了对象“多种形态”的能力,内部类提供了更精细的代码组织方式,而包则帮助我们管理和组织大量的类。今天,我们将深入探讨…...

算法:分治法
实验内容 在一个2kⅹ2k个方格组成的棋盘中,若恰有一个方格与其他方格不同,则称该方格为特殊方格,且称该棋盘为一特殊棋盘。 显然,特殊方格出现的位置有4k 种情况,即k>0,有4k 种不同的特殊棋盘 棋盘覆盖:…...

MySQL初阶:sql事务和索引
索引(index) 可以类似理解为一本书的目录,一个表可以有多个索引。 索引的意义和代价 在MySQL中使用select进行查询时会经过: 1.先遍历表 2.将条件带入每行记录中进行判断,看是否符合 3.不符合就跳过 但当表中的…...

docker部署第一个Go项目
1.前期准备 目录结构 main.go package mainimport ("fmt""github.com/gin-gonic/gin""net/http" )func main() {fmt.Println("\n .::::.\n .::::::::.\n :::::::::::\n …...
day27 python 装饰器
目录 一、装饰器的基本概念 示例:用装饰器优化质数查找函数 二、装饰器的高级用法 1. 支持任意参数的装饰器 2. 装饰器的返回值处理 在 Python 编程中,装饰器是一个非常强大的功能,它可以让其他函数或方法在不需要做任何代码修改的前提下…...

Visual Studio2022跨平台Avalonia开发搭建
由于我已经下载并安装了 VS2022版本,这里就跳过不做阐述。 1.安装 Visual Studio 2022 安装时工作负荷Tab页勾选 “.NET 桌面开发” 和“Visual Studio扩展开发” ,这里由于不是用的微软的MAUI,所以不用选择其他的来支持跨平台开发&a…...

css iconfont图标样式修改,js 点击后更改样式
背景: 在vue项目中,通过点击/鼠标覆盖,更改选中元素的样式,可以通过js逻辑,也可以根据css样式修改。包括以下内容:iconfont图标的引入以及使用,iconfont图标样式修改【导入文件是纯白࿰…...

开源项目实战学习之YOLO11:12.4 ultralytics-models-sam-memory_attention.py源码分析
👉 点击关注不迷路 👉 点击关注不迷路 👉 另外,前些天发现了一个巨牛的AI人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。感兴趣的可以点击相关跳转链接。 点击跳转到网站。 ultralytics-models-sam 1.sam-modules-memory_attention.pyblocks.py: 定义模…...

【沉浸式求职学习day42】【算法题:滑动窗口】
沉浸式求职学习 长度最小的子数组水果成篮 关于算法题:滑动窗口的几个题目 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组…...

LIIGO ❤️ RUST 12 YEARS
LIIGO 💖 RUST 12 YEARS 今天是RUST语言1.0发布十周年纪念日。十年前的今天,2015年的今天,Rust 1.0 正式发行。这是值得全球Rust支持者隆重纪念的日子。我借此机会衷心感谢Rust语言创始人Graydon Hoare,Mozilla公司,以…...

Linux基础开发工具二(gcc/g++,自动化构建makefile)
3. 编译器gcc/g 3.1 背景知识 1. 预处理(进行宏替换/去注释/条件编译/头文件展开等) 2. 编译(生成汇编) 3. 汇编(生成机器可识别代码) 4. 连接(生成可执行文件或库文件) 3.2 gcc编译选项 格式 : gcc …...
Linux zip、unzip 压缩和解压
zip 命令用于压缩文件,压缩后的文件后缀名为 .zip 。 对应的解压命令是 unzip 。 测试用的目录结构如下, userzn:~/test$ tree . ├── folder1 │ ├── folder111 │ │ └── file1.txt │ └── main1.c ├── folder2 │ ├── …...
muduo库TcpConnection模块详解——C++
muduo库中的TcpConnection模块详解 TcpConnection是muduo库中处理TCP连接的核心模块,负责管理单个TCP连接的生命周期、数据读写、状态转换以及事件回调。每个TCP连接对应一个TcpConnection对象,其设计体现了高性能、线程安全和灵活回调的特点。 一、核心…...
Node.js 源码架构详解
Node.js 的源码是一个庞大且复杂的项目,它主要由 C 和 JavaScript 构成。要完全理解每一部分需要大量的时间和精力。我会给你一个高层次的概述,并指出一些关键的目录和组件,帮助你开始探索。 Node.js 的核心架构 Node.js 的核心可以概括为以…...

全局异常处理:如何优雅地统一管理业务异常
在软件开发中,异常处理是保证系统健壮性的重要环节。一个良好的异常处理机制不仅能提高代码的可维护性,还能为使用者提供清晰的错误反馈。本文将介绍如何通过全局异常处理和业务异常统一处理来编写更加优雅的代码。 一、传统异常处理的痛点 1.1 典型问…...