目錄
MySQL 主鍵
MySQL  索引(Index)
首頁 資料庫 mysql教程 mysql中主鍵是索引嗎

mysql中主鍵是索引嗎

Dec 27, 2021 pm 05:40 PM
mysql 主鍵 索引

mysql中主鍵不是索引。主鍵全名為“主鍵約束”,是對錶中資料的一種約束,它是表的一個特殊字段,該字段能唯一標識該表中的每條信息;而索引是一種特殊的數據庫結構,由數據表中的一列或多列組合而成,可以用來快速查詢資料表中有某一特定值的記錄。

mysql中主鍵是索引嗎

本教學操作環境:windows7系統、mysql8版本、Dell G3電腦。

MySQL 主鍵

在 MySQL 中,主鍵(PRIMARY KEY)的完整稱呼是“主鍵約束”,是 MySQL 中使用最為頻繁的約束。一般情況下,為了方便 DBMS 更快的查找到表中的記錄,都會在表中設定一個主鍵。

約束是指對資料表中資料的一種約束,能夠幫助資料庫管理員更好地管理資料庫,並且能夠確保資料庫中資料的正確性和有效性。

主鍵是表格的一個特殊字段,該字段能唯一標識該表中的每個資訊。例如,學生資訊表中的學號是唯一的。

主鍵分為單一欄位主鍵和多字段聯合主鍵,本節將分別講解這兩種主鍵約束的建立、修改和刪除。

使用主鍵應注意以下幾點:

  • 每個表只能定義一個主鍵。

  • 主鍵值必須唯一標識表中的每一行,且不能為 NULL,即表中不可能存在具有相同主鍵值的兩行資料。這是唯一性原則。

  • 一個欄位名稱只能在聯合主鍵欄位表中出現一次。

  • 聯合主鍵不能包含不必要的多餘欄位。當刪除聯合主鍵的某一欄位後,如果剩下的欄位所構成的主鍵仍然滿足唯一性原則,那麼這個聯合主鍵是不正確的。這是最小化原則。

在建立表格時設定主鍵約束

在建立資料表時設定主鍵約束,既可以為表中的一個欄位設定主鍵,也可以為表中多個欄位設定聯合主鍵。但是不論使用哪一種方法,在一個表中主鍵只能有一個。以下分別講解設定單字段主鍵和多字段聯合主鍵的方法。

1)設定單一欄位主鍵

在 CREATE TABLE 語句中,透過 PRIMARY KEY 關鍵字來指定主鍵。

在定義欄位的同時指定主鍵,語法格式如下:

<字段名> <数据类型> PRIMARY KEY [默认值]
登入後複製

範例1

在test_db 資料庫中建立tb_emp3 資料表,其主鍵為id,SQL 語句和運行結果如下。

mysql> CREATE TABLE tb_emp3
    -> (
    -> id INT(11) PRIMARY KEY,
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT
    -> );
Query OK, 0 rows affected (0.37 sec)

mysql> DESC tb_emp3;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)
登入後複製

或是在定義完所有欄位之後指定主鍵,語法格式如下:

[CONSTRAINT <约束名>] PRIMARY KEY [字段名]
登入後複製

範例2

在test_db 資料庫中建立tb_emp4  資料表,其主鍵為id ,SQL 語句和運行結果如下。

mysql> CREATE TABLE tb_emp4
    -> (
    -> id INT(11),
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> PRIMARY KEY(id)
    -> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_emp4;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(25) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)
登入後複製

2)在建立表格時設定聯合主鍵

所謂的聯合主鍵,就是這個主鍵是由一張表中多個欄位組成的。

例如,設定學生選課資料表時,使用學生編號做主鍵還是用課程編號做主鍵呢?如果用學生編號做主鍵,那麼一個學生就只能選擇一門課程。如果用課程編號做主鍵,那麼一門課程只能有一個學生來選。顯然,這兩種情況都是不符合實際情況的。

實際上設計學生選課表,要限定的是一位學生只能選擇同一課程一次。因此,學生編號和課程編號可以放在一起共同作為主鍵,也就是聯合主鍵了。

主鍵由多個欄位聯合組成,語法格式如下:

PRIMARY KEY [字段1,字段2,…,字段n]
登入後複製

注意:當主鍵是由多個欄位組成時,不能直接在欄位名稱後面宣告主鍵約束。

例 3

建立資料表 tb_emp5,假設表中沒有主鍵 id,為了唯一確定一個員工,可以把 name、deptId 聯合起來作為主鍵,SQL 語句和運行結果如下。

mysql> CREATE TABLE tb_emp5
    -> (
    -> name VARCHAR(25),
    -> deptId INT(11),
    -> salary FLOAT,
    -> PRIMARY KEY(name,deptId)
    -> );
Query OK, 0 rows affected (0.37 sec)
mysql> DESC tb_emp5;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| name   | varchar(25) | NO   | PRI | NULL    |       |
| deptId | int(11)     | NO   | PRI | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.14 sec)
登入後複製

在修改表時新增主鍵約束

主鍵約束不僅可以在建立表的同時創建,也可以在修改表時添加。但是要注意的是,設定成主鍵約束的欄位中不允許有空值。

在修改資料表時新增主鍵約束的語法格式如下:

ALTER TABLE <数据表名> ADD PRIMARY KEY(<字段名>);
登入後複製

檢視 tb_emp2 資料表的表結構,SQL 語句和執行結果如下所示。

mysql> DESC tb_emp2;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   |     | NULL    |       |
| name   | varchar(30) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.14 sec)
登入後複製

範例 4

修改資料表 tb_emp2,將欄位 id 設為主鍵,SQL 語句和執行結果如下。

mysql> ALTER TABLE tb_emp2
    -> ADD PRIMARY KEY(id);
Query OK, 0 rows affected (0.94 sec)
Records: 0  Duplicates: 0  Warnings: 0
mysql> DESC tb_emp2;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(11)     | NO   | PRI | NULL    |       |
| name   | varchar(30) | YES  |     | NULL    |       |
| deptId | int(11)     | YES  |     | NULL    |       |
| salary | float       | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
4 rows in set (0.12 sec)
登入後複製

通常情況下,當在修改表時要設定表中某個欄位的主鍵約束時,要確保設定成主鍵約束的欄位中值不能夠有重複的,並且要保證是非空的。否則,無法設定主鍵約束。

MySQL  索引(Index)

#索引是一種特殊的資料庫結構,由資料表中的一列或多列組合而成,可以用來快速查詢資料表中有某一特定值的記錄。

透過索引,查詢資料時不用讀完記錄的所有信息,而只是查詢索引列。否則,資料庫系統將讀取每筆記錄的所有資訊進行比對。

可以把索引比喻為新華字典的音序表。例如,要查「庫」字,如果不使用音序,就需要從字典的 400 頁中逐頁來找。但是,如果提取拼音出來,構成音序表,就只需要從 10 多頁的音序表中直接找到。這樣就可以大大節省時間。

索引的優缺點

索引有其明顯的優勢,也有其不可避免的缺點。

優點

索引的優點如下:

  • 透過建立唯一索引可以保證資料庫表中每一行資料的唯一性。

  • 可以為所有的 MySQL 欄位類型設定索引。

  • 可以大幅加快資料的查詢速度,這是使用索引最主要的原因。

  • 在實現資料的參考完整性方面可以加速表與表之間的連接。

  • 在使用分組和排序子句進行資料查詢時也可以顯著減少查詢中分組和排序的時間

缺點

增加索引也有許多不利的方面,主要如下:

  • 建立和維護索引組要耗費時間,並且隨著資料量的增加所耗費的時間也會增加。

  • 索引需要佔磁碟空間,除了資料表佔資料空間以外,每個索引還要佔一定的實體空間。如果有大量的索引,索引檔案可能比資料檔案更快達到最大檔案尺寸。

  • 當資料表中的資料增加、刪除和修改的時候,索引也要動態維護,這樣就降低了資料的維護速度。

使用索引時,需要綜合考慮索引的優點和缺點。

索引可以提高查詢速度,但會影響插入記錄的速度。因為,在有索引的表中插入記錄時,資料庫系統會依照索引進行排序,這樣就降低了插入記錄的速度,插入大量記錄時的速度影響會更加明顯。在這種情況下,最好的方法是先刪除表中的索引,然後插入數據,插入完成後,再建立索引。

【相關推薦:mysql影片教學

#

以上是mysql中主鍵是索引嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MySQL:世界上最受歡迎的數據庫的簡介 MySQL:世界上最受歡迎的數據庫的簡介 Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL的位置:數據庫和編程 MySQL的位置:數據庫和編程 Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

apache怎麼連接數據庫 apache怎麼連接數據庫 Apr 13, 2025 pm 01:03 PM

Apache 連接數據庫需要以下步驟:安裝數據庫驅動程序。配置 web.xml 文件以創建連接池。創建 JDBC 數據源,指定連接設置。從 Java 代碼中使用 JDBC API 訪問數據庫,包括獲取連接、創建語句、綁定參數、執行查詢或更新以及處理結果。

為什麼要使用mysql?利益和優勢 為什麼要使用mysql?利益和優勢 Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

docker怎麼啟動mysql docker怎麼啟動mysql Apr 15, 2025 pm 12:09 PM

在 Docker 中啟動 MySQL 的過程包含以下步驟:拉取 MySQL 鏡像創建並啟動容器,設置根用戶密碼並映射端口驗證連接創建數據庫和用戶授予對數據庫的所有權限

MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

centos7如何安裝mysql centos7如何安裝mysql Apr 14, 2025 pm 08:30 PM

優雅安裝 MySQL 的關鍵在於添加 MySQL 官方倉庫。具體步驟如下:下載 MySQL 官方 GPG 密鑰,防止釣魚攻擊。添加 MySQL 倉庫文件:rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm更新 yum 倉庫緩存:yum update安裝 MySQL:yum install mysql-server啟動 MySQL 服務:systemctl start mysqld設置開機自啟動

See all articles