資料庫設計範式
目前資料庫設計有五種範式, 一般我們資料庫只需要滿足前三項即可
第一範式: 確保每列都保持原子性
什麼是原子性? 意思就是不可再分的,例如下
聯繫方式有QQ,微信, 電話等等, 顯然此列不滿足原子性, 如果是單獨的QQ或電話等,則只有一個, 滿足第一範式
第二範式: 要有主鍵,要求其他欄位都依賴於主鍵
為什麼主鍵這麼重要?我們可以這樣理解, 如果把錶當作一個隊伍, 那麼主鍵就是這個隊伍的隊旗
• 沒有主鍵就沒有唯一性,沒有唯一性在集合中就定位不到這行記錄,所以要主鍵。
其他欄位為什麼需要依賴主鍵呢?因為如果不依賴主鍵,就無法確定它們的位置。更重要的是,其他字段組成的這行記錄和主鍵表示的是同一個東西,而主鍵是唯一的,它們只需要依賴於主鍵,也就成了唯一的。
第三範式: 第三範式就是要消除傳遞依賴,方便理解,可以看做是「消除冗餘」
這個要怎麼理解呢? 看下述例子
如果我們一張表設計成上面這樣, 大致看很正常, 但我們把這張表拆分開來
如果這樣做的話, 是不是條理清晰了很多, 我們直接通過商品編號來關聯這兩張表, 無論在哪方面,都比全部擠在一張表要優於很多
外鍵
我們知道有主鍵, 主鍵相當於表的標識, 那麼外鍵呢?
● 外鍵:引用另外一個資料表的某筆記錄。
● 外鍵列型別與主鍵列型別一致,資料表之間的關聯/ 引用關係是依靠特定的主鍵( primary key )與外鍵(foreign key)建立起來的
語法:
我們在上面第三範式的例子中說到, 消除冗餘, 透過某一列來關聯兩個表, 那麼這一個連接起兩個表的列我們一般就會設定為外鍵但是, 如果我們需要兩個表關聯查詢, 也是不一定去使用外鍵約束的新增外鍵限制
#刪除外檢鍵 ALTER TABLE 表名DROP FOREIGN KEY 外鍵約束名
ALTER TABLE 表名ADD [CONSTRAINT 約束名稱] FOREIGN KEY( 外鍵列)
#ALTER TABLE 表名ADD [CONSTRAINT 約束名] FOREIGN KEY( 外鍵列)
REFERENCES 關聯表( 主鍵);
- 如果兩個表關聯查詢, 我們並沒有去添加外鍵約束, 我們把這種稱為弱引用
- 如果添加了外鍵約束,那麼它就是強引用
-- 创建学生表 CREATE TABLE student( id INT PRIMARY KEY AUTO_INCREMENT, num INT, NAME VARCHAR(20), sex CHAR(1), gradeId INT -- 从表外键列 ) -- 创建年级表 CREATE TABLE grade( -- 主表主键列 id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) ) -- 添加外键约束 ALTER TABLE student ADD CONSTRAINT fk_grade FOREIGN KEY(gradeId) REFERENCES grade(id)主表建立並新增資料:
#Select 結果from 表1 ,表2 where 表1.column1 = 表2.column2內連接有等值連接, 非等值連接, 自連接, 這裡我們主要討論自連接笛卡爾乘積現象:表1有m行,表2有n行,結果=m*n什麼是自連結呢, 就是自己關聯自己, 自己和自己做笛卡爾積, 這麼說可能不好理解, 舉例說明如下:###
我们平时在淘宝网购填地址的时候, 都是采用选择的方式, 先选择省,然后是省下面的市, 接着是市下面的区(县) ,它们都是在数据库中存着, 如何去实现这个功能呢 ?
有人可能会说, 建三张表相互关联即可 , 但实际是 , 我们采用自连接的方式 , 一张表即可实现
CREATE TABLE demo( -- 建立demo表 id INT PRIMARY KEY, NAME VARCHAR(50), pid INT )
往表中填入数据, pid为关联上一级的id
-- 自连接 -- 在多表关系中我们需要定义别名来区分 SELECT d1.name,d2.name,d3.name FROM demo d1 INNER JOIN demo d2 ON d1.id=d2.pid --自连接条件 INNER JOIN demo d3 ON d2.id=d3.pid --自连接条件 WHERE d3.id=6101011 -- 查询条件
结果 :
外连接
外连接又分为左外连接与右外连接
先看左外连接 :
语法
select 结果 from 表1 left join 表 2 on 表1.column1 = 表 2.column2
左连接和内连接有什么不同呢? 通过两幅图我们就可以看出 ,内连接是取了两张表的共同部分 , 而左连接是取了左边表的全部(包括两张表的共同部分)
也就是说, 不仅查询两张表的共同部分, 并且左边表会被全部查询出来
我们通过上面外键所建的表来演示 , 为了演示方便,我们为student表再添加一列数据
可以看到, 此时第五列并没有去关联grade表
-- 左外连接查询 SELECT * FROM student s LEFT JOIN grade g ON s.gradeId= g.id
查询结果如下 :
那么说到这, 右外连接也就不难理解了 , 每次都会完整的查询右边的表
同样我们再为grade添加一条无关联的数据
语法 :
select 结果 from 表1 right join 表2 on 表1.column1 = 表2.column2
-- 右外连接查询 SELECT * FROM student s RIGHT JOIN grade g ON s.gradeId= g.id
查询结果 :
可以看到, 右表被完全查询
以上是MySQL多表關聯查詢實例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

MySQL是一個開源的關係型數據庫管理系統,適用於數據存儲、管理、查詢和安全。 1.它支持多種操作系統,廣泛應用於Web應用等領域。 2.通過客戶端-服務器架構和不同存儲引擎,MySQL高效處理數據。 3.基本用法包括創建數據庫和表,插入、查詢和更新數據。 4.高級用法涉及復雜查詢和存儲過程。 5.常見錯誤可通過EXPLAIN語句調試。 6.性能優化包括合理使用索引和優化查詢語句。

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

InnoDB的鎖機制包括共享鎖、排他鎖、意向鎖、記錄鎖、間隙鎖和下一個鍵鎖。 1.共享鎖允許事務讀取數據而不阻止其他事務讀取。 2.排他鎖阻止其他事務讀取和修改數據。 3.意向鎖優化鎖效率。 4.記錄鎖鎖定索引記錄。 5.間隙鎖鎖定索引記錄間隙。 6.下一個鍵鎖是記錄鎖和間隙鎖的組合,確保數據一致性。

MySQL查询性能不佳的原因主要包括没有使用索引、查询优化器选择错误的执行计划、表设计不合理、数据量过大和锁竞争。1.没有索引导致查询缓慢,添加索引后可显著提升性能。2.使用EXPLAIN命令可以分析查询计划,找出优化器错误。3.重构表结构和优化JOIN条件可改善表设计问题。4.数据量大时,采用分区和分表策略。5.高并发环境下,优化事务和锁策略可减少锁竞争。

在數據庫優化中,應根據查詢需求選擇索引策略:1.當查詢涉及多個列且條件順序固定時,使用複合索引;2.當查詢涉及多個列但條件順序不固定時,使用多個單列索引。複合索引適用於優化多列查詢,單列索引則適合單列查詢。

要優化MySQL慢查詢,需使用slowquerylog和performance_schema:1.啟用slowquerylog並設置閾值,記錄慢查詢;2.利用performance_schema分析查詢執行細節,找出性能瓶頸並優化。

MySQL和SQL是開發者必備技能。 1.MySQL是開源的關係型數據庫管理系統,SQL是用於管理和操作數據庫的標準語言。 2.MySQL通過高效的數據存儲和檢索功能支持多種存儲引擎,SQL通過簡單語句完成複雜數據操作。 3.使用示例包括基本查詢和高級查詢,如按條件過濾和排序。 4.常見錯誤包括語法錯誤和性能問題,可通過檢查SQL語句和使用EXPLAIN命令優化。 5.性能優化技巧包括使用索引、避免全表掃描、優化JOIN操作和提升代碼可讀性。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

Dreamweaver Mac版
視覺化網頁開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3漢化版
中文版,非常好用