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

news2025/12/18 11:20:04

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.coloradmin.cn/o/2378397.html

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

相关文章

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(下…

SEO长尾词与关键词优化实战

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

机器学习-人与机器生数据的区分模型测试-数据处理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文件,会生…

SEO 优化实战:ZKmall模板商城的 B2C商城的 URL 重构与结构化数据

在搜索引擎算法日益复杂的今天,B2C商城想要在海量信息中脱颖而出,仅靠优质商品和营销活动远远不够。ZKmall模板商城以实战为导向,通过URL 重构与结构化数据优化两大核心策略,帮助 B2C 商城实现从底层架构到搜索展示的全面升级&…

数字万用表与指针万用表使用方法及注意事项

在电子测量领域,万用表是极为常用的工具,数字万用表和指针万用表各具特点。熟练掌握它们的使用方法与注意事项,能确保测量的准确性与安全性。下面为您详细介绍: 一 、数字万用表按钮功能 > 进入及退出手动量程模式 每 按 […

【读代码】端到端多模态语言模型Ultravox深度解析

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

RabbitMQ工作流程及使用方法

一、什么是RabbitMQ RabbitMQ 是一款基于 ‌AMQP(高级,消息队列协议)‌ 的开源消息中间件,专为分布式系统设计,用于实现应用程序间的异步通信,其核心功能是通过 ‌消息代理(Message Broker&…

算法:分治法

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

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 …

Visual Studio2022跨平台Avalonia开发搭建

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

css iconfont图标样式修改,js 点击后更改样式

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

开源项目实战学习之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 …

全局异常处理:如何优雅地统一管理业务异常

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

动态规划-LCR 166.珠宝的最大价值-力扣(LeetCode)

一、题目解析 frame二维矩阵中每个值代表珠宝的价值,现在从左上角开始拿珠宝,只能向右或向下拿珠宝,到达右下角时停止拿珠宝,要求拿的珠宝价值最大。 二、算法解析 1.状态表示 我们想要知道的是到达[i,j]为位置时的最大价值&am…

JDBC实现模糊、动态与分页查询的详解

文章目录 一. 模糊查询1. Mysql的写法2. JDBC的实现 二. 动态条件查询1. 创建生成动态条件查询sql的方法2. 完整的动态条件查询类以及测试类 三. 分页查询1. 什么是分页查询?2. 分页查询的分类3. MySQL的实现4. JDBC实现4.1. 创建page页4.2. 分页的实现 本章来讲一下…