mysql复合主键优缺点_提问关于 mysql得联合主键和复合主键的问题
這個問題要是問外國開發者,TA們能一臉懵逼。
在英文語境中只有 Composite Primary Key(也有叫 Compound Primary Key 的),就是一個表中如果是多個字段組成一個主鍵,那么這個主鍵就被稱為這玩意兒。
至于這玩意兒你翻譯成“聯合主鍵”、“組合主鍵”、“混合主鍵”還是“復合主鍵”,都特么是一回事兒。
結果到了中文編程界,不知道是哪位神仙起的頭兒,非得編個“聯合主鍵”和“復合主鍵”的區別出來。再加上中文編程界有一大特點,就是博客或者問答習慣性東抄西搬,結果錯的知識也能流傳廣泛甚至成為“主流”。
搬一個“流傳最廣”的對于“聯合主鍵”和“復合主鍵”區別的文章:
“聯合主鍵”還是單一主鍵,只不過往往用在關聯表里,一個關聯表里會涉及到多個其他表的主鍵組合形成一條數據,你既可以為它們設置一個“復合主鍵”、也可以再新加一個自增列設為“聯合主鍵”。
舉例:
--- 學生表
CREATE TABLE `student` (
`student_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`student_id`) USING BTREE
);
--- 科目表
CREATE TABLE `subject` (
`subject_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
PRIMARY KEY (`subject_id`) USING BTREE
);
--- 分數表,用所謂的“復合主鍵”
CREATE TABLE `score` (
`student_id` int(10) unsigned NOT NULL,
`subject_id` int(10) unsigned NOT NULL,
`value` int(10) unsigned NOT NULL,
PRIMARY KEY (`student_id`, `subject_id`) USING BTREE
);
--- 分數表,用所謂的“聯合主鍵”
CREATE TABLE `score` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`student_id` int(10) unsigned NOT NULL,
`subject_id` int(10) unsigned NOT NULL,
`value` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `un`(`student_id`, `subject_id`) USING BTREE
);
寫在最后:
再次重申,這種概念是中文編程界(或者說是中文編程博客界)人為造出的。
上面的例子看看就得了,根本就是胡編一個 聯合主鍵 的定義出來,你會發現它其實就是一個最簡單的自增主鍵,只不過表的邏輯上 student_id + subject_id 是唯一的,id 就成了所謂的二者的 聯合主鍵。
總結
以上是生活随笔為你收集整理的mysql复合主键优缺点_提问关于 mysql得联合主键和复合主键的问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在线平面图设计教程
- 下一篇: 防护DDoS还仅局限于网络层吗?还这么想