MySQL(8)什么是主鍵和外鍵?

主鍵(Primary Key)和外鍵(Foreign Key)是關系數據庫中用于定義和維護表之間關系的重要概念。以下是詳細的解釋、示例代碼和操作步驟。

主鍵(Primary Key)

定義

主鍵是表中的一個或多個字段,其值唯一地標識表中的每一行。主鍵的主要作用是確保表中的每一行具有唯一性,并且主鍵列不能包含 NULL 值。

特性
  1. 唯一性:主鍵中的值必須唯一。
  2. 非空性:主鍵列不能包含 NULL 值。
  3. 自動索引:在大多數數據庫系統中,主鍵會自動創建一個索引,以提高查詢速度。
示例

我們創建一個名為 users 的表,并將 id 列設置為主鍵:

CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

執行示例:

mysql> CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Query OK, 0 rows affected (0.02 sec)

外鍵(Foreign Key)

定義

外鍵是一個或多個字段,其值在另一張表的主鍵或唯一鍵中存在。外鍵用于建立和維護兩個表之間的關系,確保數據的一致性和完整性。

特性
  1. 引用完整性:外鍵用于確保引用的行在另一張表中存在。
  2. 級聯操作:可以設置級聯刪除或更新,以確保在父表中修改或刪除數據時,子表中的數據同步更新或刪除。
示例

假設我們有一個 orders 表,其中 user_id 列是外鍵,引用 users 表中的 id 列。這表示每個訂單都與一個用戶相關聯。

CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
);

執行示例:

mysql> CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
);
Query OK, 0 rows affected (0.02 sec)

操作示例

以下是一個完整的示例,包括創建數據庫、添加主鍵和外鍵以及插入數據的過程:

-- 連接到 MySQL 服務器
mysql -u root -p-- 創建數據庫
CREATE DATABASE mydatabase;-- 選擇數據庫
USE mydatabase;-- 創建 users 表并設置主鍵
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);-- 創建 orders 表并設置外鍵
CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,order_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,user_id INT,FOREIGN KEY (user_id) REFERENCES users(id)
);-- 插入數據到 users 表
INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com');
INSERT INTO users (username, email) VALUES ('bob', 'bob@example.com');-- 插入數據到 orders 表
INSERT INTO orders (user_id) VALUES (1);
INSERT INTO orders (user_id) VALUES (2);

使用圖形化工具管理主鍵和外鍵

使用 MySQL Workbench
  1. 創建主鍵

    • 打開 MySQL Workbench 并連接到 MySQL 服務器。
    • 在左側的導航窗格中,右鍵點擊要修改的表(例如 users),選擇 “Alter Table…”。
    • 在彈出的窗口中,選擇要設置為主鍵的列(例如 id),勾選 “PK”(Primary Key)復選框,然后點擊 “Apply”。
  2. 創建外鍵

    • 打開 MySQL Workbench 并連接到 MySQL 服務器。
    • 在左側的導航窗格中,右鍵點擊要修改的表(例如 orders),選擇 “Alter Table…”。
    • 在彈出的窗口中,切換到 “Foreign Keys” 選項卡,點擊 “Add Foreign Key” 按鈕。
    • 設置外鍵名稱,選擇引用的表和列(例如 users(id)),然后點擊 “Apply”。

總結

主鍵和外鍵是關系型數據庫中用于確保數據完整性和一致性的重要機制。通過主鍵,可以唯一標識表中的每一行;通過外鍵,可以建立和維護表之間的關系。在實際操作中,可以通過 SQL 語句或圖形化工具來管理主鍵和外鍵。

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

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

相關文章

任意復雜度的 JSON 數據轉換為多個結構化的 Pandas DataFrame 表格

以下是一個 完整、結構清晰、可運行的 Python 工具,用于將任意復雜度的 JSON 數據轉換為多個結構化的 Pandas DataFrame 表格。該工具支持嵌套對象、嵌套數組,并通過主鍵和外鍵建立表之間的關聯關系。 if __name__ "__main__":# 示例 JSON 數…

【SSL部署與優化?】??HTTP/2與HTTPS的協同效應

HTTP/2與HTTPS的協同效應:為何HTTP/2強制要求TLS 1.2? HTTP/2是HTTP協議的現代升級版,旨在通過多路復用、頭部壓縮等技術提升性能。然而,HTTP/2的設計與部署與HTTPS(TLS加密)緊密相關,甚至強制…

爬蟲請求頻率應控制在多少合適?

爬蟲請求頻率的控制是一個非常重要的問題,它不僅關系到爬蟲的效率,還涉及到對目標網站服務器的影響以及避免被封禁的風險。合理的請求頻率需要根據多個因素來綜合考慮,以下是一些具體的指導原則和建議: 一、目標網站的政策 查看網…

使用Visual Studio將C#程序發布為.exe文件

說明 .exe 是可執行文件(Executable File)的擴展名。這類文件包含計算機可以直接運行的機器代碼指令,通常由編程語言(如 C、C、C#、Python 等)編譯或打包生成。可以用于執行自動化操作(執行腳本或批處理操…

分布式1(cap base理論 鎖 事務 冪等性 rpc)

目錄 分布式系統介紹 一、定義與概念 二、分布式系統的特點 三、分布式系統面臨的挑戰 四、分布式系統的常見應用場景 CAP 定理 BASE 理論 BASE理論是如何保證最終一致性的 分布式鎖的常見使用場景有哪些? 1. 防止多節點重復操作 2. 資源互斥訪問 3. 分…

常見相機焦段的分類及其應用

相機焦段是指鏡頭的焦距范圍,決定了拍攝時的視角、畫面范圍和透視效果。不同焦段適合不同的拍攝場景和主題,以下是常見焦段的分類及其應用: 一、焦段的核心概念 焦距:鏡頭光學中心到成像傳感器的距離(單位&#xff1a…

H5S 視頻監控AWS S3 對象存儲

本文介紹一下如何使用S3對象存儲作為H5S 存儲空間進行錄像存儲 然后創建一個對象存儲,本文以minio 為例(實際項目親測天翼云): 首先安裝 s3fs 如果是redhat系列,使用如下命令 sudo yum install epel-release sudo yum install s3fs-fuse …

算法第十八天|530. 二叉搜索樹的最小絕對差、501.二叉搜索樹中的眾數、236. 二叉樹的最近公共祖先

530. 二叉搜索樹的最小絕對差 題目 思路與解法 第一想法: 一個二叉搜索樹的最小絕對差,從根結點看,它的結點與它的最小差值一定出現在 左子樹的最右結點(左子樹最大值)和右子樹的最左結點(右子樹的最小值…

Nginx 動靜分離在 ZKmall 開源商城靜態資源管理中的深度優化

在 B2C 電商高并發場景下,靜態資源(圖片、CSS、JavaScript 等)的高效管理直接影響頁面加載速度與用戶體驗。ZKmall開源商城通過對 Nginx 動靜分離技術的深度優化,將靜態資源響應速度提升 65%,帶寬成本降低 40%&#xf…

PostgREST:無需后端 快速構建RESTful API服務

在現代 Web 開發中,API 已成為連接前后端的核心橋梁,傳統的做法是通過后端框架來構建API接口,然后由前后端人員進行聯調。 PostgREST是基于無服務器的一種實現方案,允許開發者將PostgreSQL數據庫直接暴露為RESTful API&#xff0…

MySQL——九、鎖

分類 全局鎖表級鎖行級鎖 全局鎖 做全庫的邏輯備份 flush tables with read lock; unlock tables;在InnoDB引擎中,我們可以在備份時加上參數–single-transaction參數來完成不加鎖的一致性數據備份 mysqldump --single-transaction -uroot -p123456 itcast>…

基于 Kubernetes 部署容器平臺kubesphere

一 前言: k8s 大家都已經非常熟悉了,網上流傳著非常多的搭建部署文檔,有kubeadmin的有二進制的,還有基于第三方的部署工具的,反正是各種部署方法都有,k8s部署技術熱門可見一斑。但是不管哪種部署都需要了解…

RDD算子-行為算子

RDD 算子探秘:行為算子的深度解析與實戰應用? 在 Spark 的 RDD 編程模型中,轉換算子負責構建數據處理的邏輯流程,但真正觸發計算并產生最終結果的是行為算子(Action Operators)。與轉換算子的惰性求值特性不同&#…

Oracle — PL-SQL

介紹 Oracle PL/SQL是專為Oracle數據庫設計的過程化編程語言,深度融合SQL語句與結構化編程邏輯,旨在高效處理復雜數據操作與業務規則。其核心特征為“塊結構”,程序由聲明、執行、異常處理三部分組成,支持模塊化開發,顯…

高防ip支持哪些網絡協議

高防IP通常支持多種網絡協議,以提供全面的網絡安全防護。以下是一些主要支持的網絡協議及其相關說明: TCP協議(傳輸控制協議): TCP協議是最常見的傳輸協議,廣泛應用于互聯網通信。高防IP通過對TCP協議的防…

Flutter基礎()

導航欄 appBar: AppBar() title: const Text(搜索) //標題 backgroundColor: Colors.blue //背景顏色 centerTitle: true //標題居中leading 屬性 作用: 放置在應用欄左側的控件,通常是一個圖標按鈕,用于導航或打開菜單。 AppBar(le…

ESP系列單片機選擇指南:結合實際場景的最優選擇方案

前言 在物聯網(IoT)快速發展的今天,ESP系列單片機憑借其優異的無線連接能力和豐富的功能特性,已成為智能家居、智慧農業、工業自動化等領域的首選方案。本文將深入分析各款ESP芯片的特點,結合典型應用場景,幫助開發者做出最優選擇…

搭建Caffeine+Redis多級緩存機制

本地緩存的簡單實現方案有HashMap,CucurrentHashMap,成熟的本地緩存方案有Guava 與 Caffeine ,企業級應用推薦下面說下兩者的區別 1. 核心異同對比 特性Guava CacheCaffeine誕生背景Google Guava 庫的一部分(2011年)…

【Linux系統】第四節—詳解yum+vim

hello 我是云邊有個稻草人 Linux—本節課所屬專欄—歡迎訂閱—持續更新中~ 目錄 畫板—本節課知識點詳解 一、軟件包管理器 1.1 什么是軟件包 1.2 Linux軟件?態 1.3 yum具體操作 【查看軟件包】 【安裝軟件】 【卸載軟件】 【注意事項】 1.4 安裝源 二、vim 2.1 …

EasyRTC嵌入式音視頻通信SDK打造帶屏IPC全場景實時通信解決方案

一、方案概述? 在智能安防與物聯網快速發展的背景下,帶屏IPC(網絡攝像機)不僅承擔著視頻采集與監控的基礎功能,還逐漸向多樣化交互與智能化方向演進。EasyRTC作為一款強大的實時通信框架,具備低延遲、高穩定性、跨平…