SQL:Primary Key(主鍵)和Foreign Key(外鍵)

目錄

1. Key(鍵)

2. Index(索引)

3.Key和Index的區別

4. Primary Key(主鍵)

5. Foreign Key(外鍵)

6.主鍵和外鍵的關系

溫馨提示: 閃電按鈕不同的執行功能

首先,我想先介紹一下簡單介紹SQL中的Key(鍵)和Index(索引)。

1. Key(鍵)

基本概念

定義:Key是數據庫表中用于標識或關聯數據的特殊列(或列組合)。它像一個“標簽”或“身份證”,幫助數據庫管理記錄。

通俗解釋:想象一個大圖書館,書上有編號(Key),用來快速找到某本書或確認它是唯一的。Key是數據庫里給每行數據貼上的“識別碼”。

2. Index(索引)

基本概念

定義:Index是數據庫為表中的一列(或多列)創建的特殊數據結構,加快數據檢索速度。

通俗解釋:想象圖書館的書目索引,書按編號排序,查書時不用翻遍所有書架,直接找索引上的頁碼。Index就像給數據庫加了個“快速查找表”。

3.Key和Index的區別

目的:

Key(主鍵、外鍵、唯一鍵)主要用于數據完整性和關系。?

Index主要用于查詢優化。?

比喻:Key像身份證和戶口簿,Index像圖書館的索引卡。?

4. Primary Key(主鍵)

什么是主鍵?

定義:主鍵是一個表中用來唯一標識每行記錄的列或列組合。就像每個人的身份證號碼,保證沒有重復。

通俗解釋:想象一個班級花名冊,每個人都有一個唯一的學號(比如001、002),主鍵就是這個學號,確保找不到兩個“張三”混淆。?

特點:

  • 唯一性:每行數據的主鍵值必須不同。

  • 非空:主鍵不能是NULL,必須有值。

  • 不可變:一旦設好,主鍵值一般不該改(改了會影響關聯)。

舉例說明:

這是一張個人信息表。表中分別有ID,名字,姓氏,性別,電話 。從表中我們可以看到,ID是這張表的主鍵,因為其他列中都有重復的值。它們的值無效,或者是重復的。

5. Foreign Key(外鍵)

什么是外鍵?

定義:外鍵是表A中的一列(或多列),它的值必須指向表B的主鍵,建立了兩表之間的關系。?

通俗解釋:想象一個班級花名冊(表A)和成績表(表B),成績表里有個“學生ID”列,指向花名冊里的“學號”(主鍵),這樣就能知道哪個成績屬于哪個學生。外鍵就像“關系紐帶”。?

特點:

  • 引用性:外鍵值必須是它所引用的主鍵值之一,或者是NULL(如果允許)。

  • 關聯性:通過外鍵,多個表可以“聯手”管理數據。

帶有主鍵的表稱為父表(parent table),帶有外鍵的表稱為子表(child table)?。

6.主鍵和外鍵的關系

  • 聯系:外鍵依賴主鍵,外鍵的值必須來自它引用的表的主鍵,形成了表之間的“父子關系”。

  • 比喻:主鍵是“戶主”的身份證,外鍵是“家庭成員”持有的戶主身份證號碼,靠這個聯系起家庭(表)。?

這張表顯示了訂單,客戶,產品之間的關系。這個設計模擬了一個咖啡店的訂單系統,客戶可以購買產品,訂單記錄誰買了什么。

箭頭的方向顯示鏈接,從父表的主鍵指向子表的外鍵。?

箭頭表示外鍵關系:?

orders.customer_id → customers.id:訂單指向客戶。?

orders.product_id → products.id:訂單指向產品。?

SHOW DATABASES;		#顯示當前服務器上的所有數據庫。CREATE DATABASE coffee_store;	#創建一個名為coffee_store的新數據庫。如果已存在則報錯USE coffee_store;	#切換到coffee_store數據庫中,接下來的操作都在這里CREATE TABLE products(id INT auto_increment PRIMARY KEY, #id是主鍵(從1開始),INT表示類型#auto_increment表示自動遞增,每次有新的記錄時,id自動加1#保證每行id唯一且非空,像產品唯一的“產品編號”。name VARCHAR(30),price DECIMAL(3,2)
);CREATE TABLE customers(id INT auto_increment PRIMARY KEY,first_name VARCHAR(30),last_name  VARCHAR(30),gender ENUM('F','M'),phone_number VARCHAR(11)
);CREATE TABLE orders
(id INT auto_increment PRIMARY KEY,products_id INT,customer_id INT,order_time DATETIME,FOREIGN KEY(product_id) REFERENCES products(id),FOREIGN KEY(customer_id) REFERENCES customers(id)#FOREIGN KEY 這是個關鍵字,告訴數據庫下面我要定義一個外鍵#(customer_id)括號里是外鍵的列名,在當前表叫customer_id#REFERENCES是個關鍵字,指customer_id的值要去對應的customers表里找id#customers(id) 分別是參考表的表名和列名#組合起來的意思是在當前表里,customer_id列是外鍵。它的值必須是customers表中id列的值之一
);SHOW TABLES;	#顯示當前數據庫中的所有表。

溫馨提示: 閃電按鈕不同的執行功能

?在 MySQL Workbench 中,工具欄上有三個與執行 SQL 查詢相關的閃電按鈕(lightning bolt buttons),它們的功能各不相同。

?

1. 第一個閃電按鈕?

功能:執行整個 SQL 腳本。?

描述:這個按鈕會運行 SQL 查詢面板(SQL Query Panel)中當前所有內容,無論你是否選中了特定部分。只要面板中有 SQL 語句,它就會從頭到尾執行所有語句。?

2. 第二個閃電按鈕?

?功能:執行當前選中的 SQL 語句或高亮部分。

描述:這個按鈕只執行你在 SQL 查詢面板中手動選中的部分。如果沒有選中任何內容,它會執行光標當前所在的單個語句(從光標位置到語句的末尾)。?

使用場景:當你只想測試或運行腳本中的一部分時非常有用。例如,你有一個長腳本,但只想運行其中一個 SELECT 查詢。?

3. 第三個閃電按鈕?

功能:對當前光標下的語句執行 EXPLAIN 分析。?

描述:這個按鈕不會直接執行 SQL 語句,而是生成該語句的執行計劃(Execution Plan)。執行計劃顯示 MySQL 如何執行查詢,包括使用的索引、表掃描方式等,幫助你優化查詢性能。?

使用場景:

  • 當你想分析某個查詢的性能瓶頸或優化 SQL 語句時,使用這個按鈕。

  • 例如,如果你懷疑某個 SELECT 查詢運行緩慢,可以用 EXPLAIN 檢查它是否使用了正確的索引。

4.手形按鈕?

?

功能:停止執行的查詢。 如果你正在運行一個查詢,該查詢正在檢索成千上萬的數據,它可以停止查詢而不是繼續等待。

應用場景:只在查詢時才有效,如果正常狀態下點擊,不會有任何事發生。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/77011.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77011.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/77011.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2025年- H1-Lc109-160. 相交列表--java版

1.題目描述 2.思路 “雙指針切換鏈表頭” 思路一:雙指針路徑對齊 while (pA ! pB) { pA (pA null) ? headB : pA.next; pB (pB null) ? headA : pB.next; } 讓兩個指針走相同的總路徑長度! 設: 鏈表 A 獨有部分長度是 lenA 鏈表 B …

PyTorch 深度學習 || 6. Transformer | Ch6.3 Transformer 簡單案例

1. 簡單案例 這個代碼是一個簡單的 Transformer 模型的實現,這個例子展示了一個基本的序列到序列(seq2seq)任務,比如將一個數字序列轉換為另一個數字序列。可以用于學習和理解 Transformer 的基本結構和工作原理。 import torch import torch.nn as nn import math# 位置…

基礎算法篇(4)(藍橋杯常考點)—數據結構(進階)

前言 這期將會講到基礎算法篇里面的數據結構(進階),主要包括單調棧,單調隊列,并查集,擴展域并查集,帶權并查集,字符串哈希,Trie樹。 數據結構(進階)正文 單…

【AI學習】初步了解Gradio

Gradio 是一個開源的 Python 庫,專注于快速構建交互式 Web 界面,特別適用于機器學習模型、數據科學項目或任意 Python 函數的演示與部署。它通過極簡的代碼實現前后端一體化,無需前端開發經驗即可創建功能豐富的應用。以下是 Gradio 的核心特…

Overleaf 論文提交 Arxiv

Contents References 清除 Overleaf 中所有編譯 error,并且保證 main.tex 文件在 project 最上層參考文件 .bib 轉 .bbl. project 編譯成功后可以在 Overleaf 的 Recompile 按鈕右側找到 “Logs and output files”,點進去之后右下角可以點開 “Other lo…

【Android Audio】Parameter Framework - pfw

Parameter Framework - Android AudioPolicy Engine 使用 libengineconfigurable.so 來取締默認安卓音頻引擎 libenginedefault.so,因為默認安卓音頻引擎是通過代碼來決定策略,然而 libengineconfigurable 采用讀取pfw類型的文件來實現音頻策略配置。 …

服務器虛擬化技術深度解析:醫藥流通行業IT架構優化指南

一、服務器虛擬化的定義與原理 (一)技術定義:從物理到虛擬的資源重構 服務器虛擬化是通過軟件層(Hypervisor)將物理服務器的CPU、內存、存儲、網絡等硬件資源抽象為邏輯資源池,分割成多個相互隔離的虛擬機…

babel-runtime 如何縮小打包體積

🤖 作者簡介:水煮白菜王,一位前端勸退師 👻 👀 文章專欄: 前端專欄 ,記錄一下平時在博客寫作中,總結出的一些開發技巧和知識歸納總結?。 感謝支持💕💕&#…

劍指Offer(數據結構與算法面試題精講)C++版——day7

劍指Offer(數據結構與算法面試題精講)C版——day7 題目一:最多刪除一個字符得到回文題目二:回文子字符串的個數題目三:刪除倒數第k個節點 題目一:最多刪除一個字符得到回文 這里我們可以在經典的字符串回文…

2025年常見滲透測試面試題(題目+回答)

網絡安全領域各種資源,學習文檔,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具,歡迎關注。 目錄 常見面試題 一、滲透測試經歷與技術復盤 二、高頻漏洞類型與攻防體系 三、滲透工具鏈與技術特性 四、…

大數據與人工智能之大數據架構(Hadoop、Spark、Flink)

一、核心特性與架構設計 1. Hadoop:分布式批處理的基石 核心組件: HDFS:分布式文件系統,支持大規模數據存儲。MapReduce:基于“分而治之”的批處理模型,適合離線分析。 架構特點: 批處理主導&…

從IoT到AIoT:智能邊界的拓展與AI未來趨勢預測

文章目錄 引言:從連接萬物到感知萬物1. AIoT的本質:將智能嵌入萬物2. AIoT的推動力量與挑戰2.1 推動力量2.2 關鍵挑戰 3. 五大AIoT未來趨勢預測趨勢一:邊緣智能將成為主流架構趨勢二:AI模型將向自適應與多任務演進趨勢三&#xff…

從本地新建文件夾到拉取遠程倉庫 dev 分支的完整步驟

《從本地新建文件夾到拉取遠程倉庫 dev 分支的完整步驟》 下面為你詳細介紹從本地新建文件夾開始,將遠程倉庫的 dev 分支拉取到本地的具體步驟: 1. 創建新文件夾 在本地電腦上新建一個文件夾,作為存放項目代碼的目錄。你可以通過圖形界面操…

python/pytorch雜聊

Dataset 是否需要自己定義:如果你使用的數據集不是 PyTorch 提供的標準數據集(如 MNIST、CIFAR-10 等),那么你需要繼承 torch.utils.data.Dataset 類并實現兩個方法:__len__() 和 __getitem__()。__len__() 應該返回數…

PHP 安全 E-mail

PHP 安全 E-mail 引言 隨著互聯網的普及和電子商務的發展,電子郵件成為了人們日常生活中不可或缺的通信工具。PHP作為一種廣泛使用的服務器端腳本語言,也經常被用于發送和接收電子郵件。然而,在PHP中處理電子郵件時,安全性問題不容忽視。本文將深入探討PHP安全發送電子郵…

【夜話系列】DelayQueue延遲隊列(下):實戰應用與面試精講

?? 本文是DelayQueue系列的下篇,聚焦實戰應用場景和性能優化。通過多個真實案例,帶你掌握DelayQueue在項目中的最佳實踐和性能調優技巧。 ?? 系列專欄推薦: JAVA集合專欄 【夜話集】JVM知識專欄數據庫sql理論與實戰小游戲開發文章目錄 一、DelayQueue實戰應用1.1 訂單超…

Redis(筆記)

簡介: 常用數據類型: 常用操作命令: Redis的Java客戶端: 操作字符串類型的數據: 操作Hash類型的數據: 操作列表類型的數據: 操作集合類型的數據: 操作有序集合類型數據: 通用命令…

PhotoShop學習05

1.選區基礎知識 選區,就是選定一些區域,我們對圖片的更改只在選區內生效,這樣可以精細調整圖片的部分而不會影響整體。它的快捷鍵是M。 我們用點擊鼠標后滑動就會出現虛線框,虛線框內的就是我們選定的區域。這時我們再滑動就會創…

使用Redission實現分布式鎖

分布式鎖在分布式系統中非常重要,主要用于解決多個進程/服務并發訪問共享資源時的數據一致性問題。在日常開發中常用于: 1. 防止重復操作(冪等性控制) 場景:用戶重復提交訂單、重復支付、重復點擊等。 示例&#xff1…

VScode 畫時序圖(FPGA)

1、先安裝插件: 2、然后就可以編寫一個.js文件,如下: {signal: [{name: clk, wave: p.......|..},{name: rstn, wave: 01......|..},{name: din_vld, wave: 0.1.0...|..},{name: din, wave: "x.x...|..", data: ["D0", …