MySQL 主鍵詳解:作用與使用方法

????????在 MySQL 數據庫中,主鍵(Primary Key) 是表結構設計中最重要的約束之一。它不僅是數據唯一性的保障,也是多表關聯、查詢優化的核心工具。本文將從 主鍵的作用主鍵的用法 兩個方面進行講解,并配合代碼示例幫助理解

一、主鍵的作用

1. 唯一標識記錄

主鍵的主要作用是唯一標識表中的每一行數據

  • 主鍵列的值必須 唯一(Unique)

  • 主鍵列的值不能 為空(NOT NULL)

示例

CREATE TABLE users (id INT PRIMARY KEY,        -- 主鍵username VARCHAR(50),email VARCHAR(100)
);INSERT INTO users (id, username, email) VALUES
(1, 'Alice', 'alice@example.com'),
(2, 'Bob',   'bob@example.com');

此時 id 作為主鍵,不能重復,也不能為 NULL
如果你執行:

INSERT INTO users (id, username, email) VALUES (1, 'Charlie', 'charlie@example.com');

會報錯:

Duplicate entry '1' for key 'PRIMARY'
2. 保證數據完整性

????????主鍵約束能有效防止重復數據出現,從而保證數據的一致性

示例

CREATE TABLE customers (email VARCHAR(100) PRIMARY KEY,name  VARCHAR(50)
);

此時任何兩行都不能有相同的 email,避免一個郵箱重復注冊。

3. 作為外鍵的目標

????????主鍵是外鍵關聯的基礎。其他表的外鍵字段通常引用某個表的主鍵,從而建立 一對多多對多 關系。

示例

CREATE TABLE orders (order_id INT PRIMARY KEY,user_id  INT,FOREIGN KEY (user_id) REFERENCES users(id)
);

????????這樣 orders.user_id 必須是 users.id 中已存在的值,防止出現無效的訂單記錄

4. 提高查詢性能

????????在 InnoDB 存儲引擎中,主鍵會自動創建 聚簇索引(Clustered Index),數據存儲會按主鍵順序組織
查詢時,如果條件中包含主鍵,MySQL 可以直接定位到目標行,而無需全表掃描

示例

SELECT * FROM users WHERE id = 2;

會直接通過主鍵索引定位到目標行,速度非常快。

二、主鍵的使用方法

1. 創建表時定義主鍵
CREATE TABLE products (product_id INT PRIMARY KEY,name       VARCHAR(100),price      DECIMAL(10,2)
);
2. 創建表后添加主鍵
ALTER TABLE products
ADD PRIMARY KEY (product_id);
3. 復合主鍵(多個列組成主鍵)

當單一字段不足以唯一標識一行數據時,可以使用 復合主鍵

CREATE TABLE order_items (order_id INT,product_id INT,quantity INT,PRIMARY KEY (order_id, product_id)
);

此時 order_idproduct_id 的組合必須唯一。

4. 自增主鍵(AUTO_INCREMENT)

讓主鍵自動遞增,避免手動輸入 ID:

CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(50),email VARCHAR(100)
);
5. 刪除主鍵
ALTER TABLE products
DROP PRIMARY KEY;

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

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

相關文章

lib.dom.d.ts

lib.dom.d.ts 是一個 TypeScript 類型聲明文件,它是 TypeScript 標準庫的一部分,用于定義瀏覽器 DOM(文檔對象模型)相關的類型和接口。這個文件為開發者提供了瀏覽器中所有內置的 DOM 類型的定義,包括 localStorage、d…

Spring 工具類:StopWatch

StopWatch 是 Spring 框架提供的一個簡單而強大的計時工具類,用于測量代碼塊的執行時間。它特別適合在開發階段進行性能分析、調試和優化。 基本使用方法 // 創建 StopWatch 實例(可指定 ID) StopWatch stopWatch new StopWatch("性能分…

解決 VSCode 運行 Python 時 ModuleNotFoundError: No module named ‘open_webui‘ 問題

目錄 1. 問題原因分析 2. 解決思路 3. 解決步驟 3.1 打開或創建 .vscode/launch.json 3.2 添加調試配置 3.3 配置說明 3.4 運行測試 4. 總結 在使用 VSCode 調試 Python 項目時,我們經常會遇到類似下面的錯誤: Exception has occurred: ModuleN…

Python基礎-數據結構

數據結構 Python提供了四種主要的內置數據結構:列表(List)、元組(Tuple)、字典(Dictionary)和集合(Set)。每種數據結構都有其特定的用途和特性。 Python數據結構概覽&…

NLP學習之Transformer(1)

初識 Transformer (1) 1.簡介 1.1主要特點: self-attention: 自注意力機制,Transformer的核心是自注意力機制,它允許模型在處理某個位置的輸入時,能夠直接與其他位置的輸入交互,而不…

C語言筆記6:C高級 part1

1.gcc 編譯器 編譯流程 預處理-》編譯》匯編》鏈接》 E 預處理的命令 S 編譯匯編代碼 -c匯編階段命令 -o 輸出對應的文件GDB調試工具2.作用域存儲分類// C高級部分知識多, 加上這周 我學的知識量有點爆炸。家里又有事情,這周末要回老家 爭取下周補齊吧。…

A12預裝app

在A12上預裝應用,出現了一個異常。在此記錄問題描述:在A12上預裝應用按照A13的預裝方案報錯,mk文件如下:LOCAL_PATH : $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE_TAGS : optional LOCAL_MODULE : Tideen_PTT LOCAL_MODU…

termios 線程 poll epoll進化 二叉AVL紅黑樹

struct termios tio 是什么 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <termios.h>#define SERIAL_PORT "/dev/ttyS0" #define BUF_SIZE 256int main(v…

C++設計模式:類間關系

類封裝了數據和行為&#xff0c;是面向對象的重要組成部分&#xff0c;它是具有相同屬性、操作、關系的對象集合的總稱。在系統中&#xff0c;每個類都具有一定的職責&#xff0c;職責指的是類要完成什么樣子的功能&#xff0c;要承擔什么樣子的義務。一個類可以有多種職責&…

MSYS2+CMake配置C/C++開發環境

目錄一、MSYS2是什么1.1 核心架構與組件??1.1.1 背景介紹1.1.1.1 Cygwin1.1.1.2 MinGW和Mingw-w641.1.1.3MSYS和MSYS21.1.2 技術基礎??1.1.3 多環境支持??1.2 核心功能??1.2.1 類Unix開發環境??1.2.2 開發工具鏈??1.2.3 軟件倉庫與包管理??二、安裝和配置2.1 配置…

Vue 3 + TypeScript:package.json 示例 / 詳細注釋說明

一、示例 / 詳細注釋說明 {// 項目基礎信息"name": "vite-project", // 項目名稱&#xff08;建議使用 kebab-case 格式&#xff09;"private": true, // 標記為私有項目&#xff0c;避免意外發布到 npm"version": "1.0.…

SpatialVLM和SpatialRGPT論文解讀

目錄 一、SpatialVLM 1、概述 2、方法 3、實驗 二、SpatialRGPT 1、概述 2、方法 3、訓練方法 4、實驗 一、SpatialVLM 1、概述 SpatialVLM是最早的依賴傳統VLMs實現3D空間推理能力的論文&#xff0c;在24年1月由DeepMind團隊提出&#xff0c;當時對比的還是GPT4v&am…

理解GPU架構:基礎與關鍵概念

GPU 基礎概述&#xff1a;從圖形渲染到 AI 與高性能計算的核心 Graphics Processing Units&#xff08;GPU&#xff09;已從專用的圖形渲染硬件演進為 AI、科學計算與高性能任務的中堅力量。本文將介紹 GPU 架構的基礎知識&#xff0c;包括其組成部分、內存層次結構&#xff0c…

訂單狀態定時處理(Spring Task 定時任務)

訂單狀態定時處理 如果最后一秒剛好支付了咋辦?如何補償? 需要將支付狀態和訂單狀態一起考慮,或者直接使用狀態機 Spring Task 是Spring框架提供的任務調度工具,可以按照約定的時間自動執行某個代碼邏輯。 **定位:**定時任務框架 **作用:**定時自動執行某段Java代碼 …

職得AI簡歷-免費AI簡歷生成工具

本文轉載自&#xff1a;職得AI簡歷-免費AI簡歷生成工具 - Hello123工具導航 ** 一、核心功能解析 職得 AI 簡歷是 AI 驅動的智能求職平臺&#xff0c;通過深度學習算法分析百萬優質簡歷數據&#xff0c;提供從簡歷生成到面試準備的全流程服務&#xff0c;顯著提升求職競爭力。…

8.14 機器學習(1)

機器學習基礎一、什么是機器學習定義&#xff1a;讓計算機利用大量數據在特定任務上持續改進性能的過程&#xff0c;可以讓任務完成的更好。機器學習的領域很多。二、機器學習基本術語數據集、樣本、特征&#xff08;屬性&#xff09;、屬性空間、向量表示、訓練集&#xff08;…

給電腦升級內存,自檢太慢,以為出錯

公司電腦是16G內存&#xff0c;用虛擬機時非常吃力。于是跟領導說&#xff0c;買了32G內存和1T SSD。電腦有兩個SATA數據線&#xff0c;SATA電源頭只有一個。于是買了幾個1轉2&#xff0c;順利接上。把原來的16G拔下&#xff0c;換上32G內存。結果開機沒反應。心里就有點嘀咕&a…

Effective C++ 條款43:學習處理模板化基類內的名稱

Effective C 條款43&#xff1a;學習處理模板化基類內的名稱核心思想&#xff1a;模板化基類&#xff08;templatized base classes&#xff09;中的名稱在派生類模板中默認不可見&#xff0c;需要通過this->前綴、using聲明或顯式基類限定來引入。這是因為編譯器在解析模板…

Mybatis簡單練習注解sql和配置文件sql+注解形式加載+配置文件加載

項目結構 d:\test\runjar\data\static\data\mybatis_helloworld\Mybatis\ ├── lib\ │ ├── asm-3.3.1.jar │ ├── c3p0-0.9.1.2.jar │ ├── cglib-2.2.2.jar │ ├── commons-logging-1.1.1.jar │ ├── ehcache-core-2.6.8.jar │ ├── javassi…

抗日勝利80周年 | HTML頁面

飛翔的和平鴿&#xff1b;屹立的人民英雄紀念碑&#xff1b;倒下的日本國旗&#xff1b;旋轉的金色勛章無不代表著我們勝利了&#xff01;&#xff01;&#xff01;HTML源代碼&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta cha…