您好,登錄后才能下訂單哦!
這篇文章主要講解了“MySQL語句中的主鍵和外鍵怎么使用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MySQL語句中的主鍵和外鍵怎么使用”吧!
在數據庫表中,如果有一組字段能夠唯一確定一條記錄,則可以把它們設計成表的主鍵字段。
例子:如果要創建一個人的信息表(字段:姓名,年齡,籍貫,工作單位......),那么身份證號是唯一能確定你這個人的,所以身份證號是主鍵。
主鍵字段名 primary key
原則上使用一個字段做主鍵,而且推薦使用沒有業務含義的字段做主鍵,比如:id等。
主鍵字段的類型和長度由主鍵值的生成方式來決定:
1.4.1)
自增:借助數據庫自身主鍵生成機制
數值型 長度由數據量來決定
創建:主鍵字段名 primary key not null auto_increment
特點:
優點:開發效率高,因為其可以自動編號且按順序存放便于檢索占用空間小,可以節省開發人員時間。
缺點: 運行效率低且不靈活,因為其自動增長,在手動要插入或導入指定ID的數據時會很麻煩且如果數據量過大那么越到后面,數據庫自增主鍵的時間會變長導致查詢數據庫的操作變慢。如果有合并表的操作時,有概率還會出現主鍵的重復。
1.4.2)
assighed:程序員手動生成主鍵值,唯一非空,算法.
hi/low:數值型 長度由數據量決定
UUID:字符串 長度是32位
public class UUIDUtil {//java中自帶UUID的算法 public static String getUUID(){ return UUID.randomUUID().toString().replaceAll("-", ""); } }
特點:
優點:主鍵值生成很靈活且能夠保證在任何情況下都具有唯一性,數據遷移方便。
缺點:占用空間大,很難記憶,會降低性能。
1.4.4)
聯合主鍵:由多個字段的類型和長度決定
通常用于在兩個表之間建立關系。外鍵的主要用途是維持實體的兩個獨立實例之間的數據完整性。
alert table 主鍵表名 add constraint FK_ID(外鍵名稱) foreign key(外鍵字段名) references 外表表名(主鍵字段名)
補充:
在創建表的時候,表和表之間可能會存在的業務關系(關聯關系),這時會產生外鍵。
關聯關系中存在的關系類型:
1對1:一張表(A)中的一條記錄只能對應另一張表(B)中的一條記錄,另一張表(B)中的一條記錄也只能對應一張表(A)中的一條記錄。
eg:軟工2777班和班長,公民和身份證。(商品表和該商品的描述表)
1對多:一張表(A)中的一條記錄可以對應另一張表(B)中的多條記錄,另一張表(B)中的一條記錄只能對應一張表(A)中的一條記錄。
eg:商品的分類表和商品表示一對多的關系,一個商品分類下可以有多個商品,學生和班級
多對多:(有兩張表,A表中的一條數據對應B表中的多條,同時,B表中的一條對應A表中的多條)
eg:客戶表和部門表。
關聯查詢(同時利用外鍵查詢多張表中的數據)
關聯查詢的類型:
內連接:查詢所有符合條件的數據,并且要求結果在兩張表中都有相對應的記錄
左外連接:查詢左側表中所有符合條件的數據,即使在右側表中沒有相對應的記錄
右外連接:查詢右側表中所有符合條件的數據,即使在左側表中沒有相對應的記錄
2.3.1)在一對多中:
例子:A(1)---------B(n)
父表 子表
tbl_student tbl_class
id name class_id id name
1001 zs 111 111 class1
1002 ls 111 222 class2
1003 ww 222
1004 zl
//查詢所有姓張的學生的id,name和所在班級name select s.id,s.name,c.name as className from tbl_student s join tbl_class c on s.class_id=c.id//假如外鍵不可以為空 where s.name like 'z%'
張表中有相對應的記錄,使用內連接。 ,假如需要查詢左側表中所有符合條件的記錄,使用左外連接.
2.3.2)在一對一中:
tbl_person tbl_card
id name id name
1001 zs 1001 card1
特點:
a)共享主鍵:(不推薦)
添加數據:先添加先產生的表,再后產生的表記錄
刪除數據:先刪除后產生的表記錄,再刪除先產生的表記錄
查詢數據:無需進行連接查詢:
//查詢zhangsan的駕照信息 1001 select * from tbl_card where id='1001'
2.3.3)多對多:
tbl_student tbl_course
id name id name
1001 zs 111 java
1002 ls 222 mysql
tbl_student_course_relation
student_id course_id
1001 111
1001 222
1002 111
1002 222
特點:
添加數據時,先添加父表記錄(tbl_student,tbl_course),再添加子表(tbl_student_course_relation)記錄;
刪除數據時,先刪除子表記錄(tbl_student_course_relation),再刪除父表記錄(tbl_student,tbl_course)
查詢數據時,可能會進行關聯查詢:
//查詢所有姓張的學生的id,name,和所選課程的name select s.id,s.name,c.name as courseName from tbl_student s join tbl_student_course_relation scr on s.id=scr.student_id join tbl_course c on scr.course_id=c.id where s.name like 'z%'
感謝各位的閱讀,以上就是“MySQL語句中的主鍵和外鍵怎么使用”的內容了,經過本文的學習后,相信大家對MySQL語句中的主鍵和外鍵怎么使用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。