數據庫——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.pswp.cn/diannao/83444.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/83444.shtml
英文地址,請注明出處:http://en.pswp.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能并行處理多任務&…