我們學了很多的東西,編程的學習之中更重要的是堅持。今天我們和大家分享的是什麼是外鍵約束,以及什麼是表的結構。我們廢話不多說,馬上開始我們今天的分享。開發工具:IDLE (Python 3.7 64-bit或者32-bit) , pycharm(professional的版本), Ubuntu,xshell6(註:不需要3.7版本的也行,只需要Python3的版本都可以)1.什麼是MySQL(資料庫)?
mysql是關係型資料庫,關係資料庫,是建立在關係模型基礎上的資料庫,現實世界中的各種實體,以及實體之間的各種聯繫,均用關係模型(table)來表示。
關係模型就是指二維表格模型,因而一個關係型資料庫就是由二維表及其之間的聯繫組成的一個數據組織。實體:就是數據對象 (可以是有類型的,也可以是無類型的).E-R圖(實體關係模型)
E-R圖也稱實體-聯繫圖(Entity Relationship Diagram),提供了表示實體類型、屬性和聯繫的方法,用來描述現實世界的概念模型。
用「矩形框」表示實體型,矩形框內寫明實體名稱;用「橢圓圖框」表示實體的屬性,並用「實心線段」將其與相應關係的「實體型」連接起來;用」菱形框「表示實體型之間的聯繫成因,在菱形框內寫明聯繫名。並用」實心線段「分別與有關實體型連接起來,同時在」實心線段「旁標上聯繫的類型(1:1,1:n或m:n)。2.外鍵約束
外鍵約束FOREIGN KEY,保持數據一致性,完整性實現一對一或一對多關係。因為一個表只存一類信息。用外鍵來做參照,保證數據的一致性,可以減少數據冗餘。外鍵約束的要求:1.數據表的存儲引擎只能為InnoDB;
2.外鍵列和參照列數據類型一致;
3.外鍵必須關聯到鍵上面去,一般情況是關聯到,另一張表的主鍵。
刪除外鍵
新建外鍵
3.外鍵的實際運用
一對多的關係創建一個學院表
學生表中的學院id只能由我們的學院id產生。
注意:只要在INSERT INTO `student`(`s_name`,`dept_id`) VALUES('張三',1); 插入數據的時候報錯,系統就會默認當前那個一個順序的數據自動失效,再繼續插入數據的的時候,排序往後一位排序。
一對多的實現就是在學生表(student)中的dept_id這裡,添加一個外鍵constraint SD_id foreign key(dept_id) references department(d_id)關聯到我們學院表department中的(d_id int primary key AUTO_INCREMENT,)的id裡面。
這就代表著只有學院表(department)中有的數據,你才能在(constraint SD_id foreign key(dept_id) references department(d_id))中才能插入數據,不然你就無法插入數據,這樣就實現了一對多的關係。
4.一對一的關係
舉個例子:學生表中有學號、姓名、學院,但學生還有些比如電話,家庭住址等比較私密的信息,這些信息不會放在學生表當中,會新建一個學生的詳細信息表來存放。這時的學生表和學生的詳細信息表兩者的關係就是一對一的關係,因為一個學生只有一條詳細信息。用外鍵加主鍵的方式來實現這種關係。
主鍵映射主鍵的方法就可以實現一對一的關係。
一對一是怎麼實現的呢?注意看示範,我們在插入值的時候是按照學生表(student)中的s_id int primary key AUTO_INCREMENT, 中的主鍵(s_id)來插入數據的,我們的學生詳細信息表(student_details),是將 `id` INT PRIMARY KEY, 它的id作為主鍵,這樣FOREIGN KEY (`id`) REFERENCES `student`(`s_id`)將外鍵與學生表的主鍵對應起來,使得數據唯一,實現功能。
5.多對多的關係
舉例子:學生要報名選修課,一個學生可以報名多門課程,一個課程有很多的學生報名,那麼學生表和課程表兩者就形成了多對多關係。對於多對多關係,需要創建第三張關係表,關係表中通過外鍵加主鍵的形式實現這種關係。
FOREIGN KEY (`s_id`) REFERENCES `student` (`s_id`), 這使得只有學生表中的數據(學生)才可以選擇課程表中的課程。
FOREIGN KEY (`crs_id`) REFERENCES `course` (`id`) ,這樣使得只有課程表中存在的數據(課程),你才可以選擇,防止有人搗亂。
6.查詢中一些較為常見的函數
求最大年齡: mysql> SELECT MAX(`age`) FROM `student_details`;求最小年齡: mysql> SELECT MIN(`age`) FROM `student_details`;求和: mysql> SELECT SUM(`age`) FROM `student_details`;求平均數: mysql> SELECT AVG(`age`) FROM `student_details`;四捨五入: mysql> SELECT ROUND(AVG(`age`)) FROM `student_details`;統計:mysql> select count(s_id) from student;查看當前時間: mysql> SELECT NOW();
今天就和大家分享到這吧!希望大家對大家學習MySQL有一些幫助,今天的內容不太多請記得將小編的示範多練習幾次就好了。學習編程是一件孤單的心事,大家加油!小編也在一直在學習的路上,大家一起進步。