目錄
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.手形按鈕?
?
功能:停止執行的查詢。 如果你正在運行一個查詢,該查詢正在檢索成千上萬的數據,它可以停止查詢而不是繼續等待。
應用場景:只在查詢時才有效,如果正常狀態下點擊,不會有任何事發生。