這個問題很刁鑽!
答案是錯的。
的確在mysql資料庫innodb引擎裡面,主鍵的確就是聚集索引。
但是myisam引擎裡面主鍵也不是聚集索引。
另外在sql server中還可以顯示的指定聚集索引。
create table student
( stud_id int identity(1,1) not null,
stud_name nvarchar(20) not null,
constraint pk_student primary key nonclustered (stud_id)
);
聚集索引決定了資料庫的物理儲存結構,而主鍵只是確定**邏輯組織方式。這兩者不可混淆!
對於innodb,主鍵毫無疑問是乙個聚集索引。但是當乙個表沒有主鍵,或者沒有乙個索引,innodb會如何處理呢。請看如下規則:
1.如果乙個主鍵被定義了,那麼這個主鍵就是作為聚集索引
2. 如果沒有主鍵被定義,那麼該錶的第乙個唯一非空索引被作為聚集索引
3. 如果沒有主鍵也沒有合適的唯一索引,那麼innodb內部會生成乙個隱藏的主鍵作為聚集索引,這個隱藏的主鍵是乙個6個位元組的列,改列的值會隨著資料的插入自增。
4.自增主鍵會把資料自動向後插入,避免了插入過程中的聚集索引排序問題。聚集索引的排序,必然會帶來大範圍的資料的物理移動,這裡面帶來的磁碟io效能損耗是非常大的。 而如果聚集索引上的值可以改動的話,那麼也會觸發物理磁碟上的移動,於是就可能出現page**,表碎片橫生。所以不應該修改聚集索引。
C語言的一些知識點,主要是指標的一些知識
c語言中指標是變數 所以它有如下特點 1.所佔記憶體大小 4個位元組 2.作用域 3.儲存區域 而指標又有步長,當指標進行表示式運算時。其步長跟所定義指標的型別相關 如 char p 步長為1 int p 步長為4 所以在進行不同步長指標賦值時,會出現資料錯誤。延伸出另外乙個知識點 大端位元組序與小...
什麼是面向切面程式設計AOP 知識點彙總
最近在學這方面的內容,讀到的這段話我感覺說的很清楚了 這種在執行時,動態地將 切入到類的指定方法 指定位置上的程式設計思想就是面向切面的程式設計。面向切面程式設計 aop是aspect oriented program的首字母縮寫 我們知道,物件導向的特點是繼承 多型和封裝。而封裝就要求將功能分散到...
git知識點 下一章是git的安裝方法
git config global 配置 mkdir 建立版本庫 cd 進入這個版本庫 pwd 檢視版本庫所在的目錄 git init這個命令將這個版本庫變成git可以管理的倉庫,標誌就是裡面會出現乙個 git 的隱藏檔案 git add 檔名 將檔案新增到暫存區 緩衝區 git commit m ...