前言
本文主要介紹了關(guān)于MySQL主鍵為0與主鍵自排約束的關(guān)系,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細的介紹吧。
開始不設(shè)置主鍵表的設(shè)計如下:


如果id的位置有好幾個0的話:設(shè)置主鍵并且自動排序時,0會從1開始遞增;


Insert 進去 id = 0的數(shù)據(jù),數(shù)據(jù)會從實際的行數(shù)開始增加,和從0變化不一樣;



現(xiàn)在主鍵是沒有0的,如果把某個id改成0的話,0不會變!直接會進行排序;


再insert一個id=0的看看,居然還是跟剛才一樣直接跟行數(shù)相關(guān)!


再重置一下自動排序,看看這個0會不會有變化,先取消自排;


再加上自排,果然跟想的一樣,0要變成1了,錯誤提示說的是主鍵有重復(fù)的1所以不讓自排,

修改之后,果真可以了,0變成1了,


小結(jié)
我覺得也就這幾種情況吧,無符號的情況應(yīng)該沒什么區(qū)別,還有什么沒有考慮的希望大家給我留言,可以告訴我你是怎么想的,我也很想知道,現(xiàn)在拋磚引玉我把我的總結(jié)和想法寫一下:
對我來說,0在數(shù)據(jù)庫里很特殊。
使用limit查看指定范圍數(shù)據(jù)的時候這時候表就會是從0開始往下排的順序,但是insert添加一行數(shù)據(jù)的時候反而是跟行數(shù)有關(guān)系,這時候又是按照從1開始往下排的順序。如果使用主鍵自排約束以前表里有0,再設(shè)置完主鍵自排以后所有的0又不會根據(jù)行數(shù),而是直接按照自上而下的順序從1開始排。如果把表中的某個主鍵的數(shù)改成0,那直接就會進行排序放到正數(shù)前面,也就是說主鍵自排是允許有0存在的,那為什么本身存在的0要去修改成從1開始的遞增序列呢?哪怕沒加主鍵自排以前只有一個0,加了主鍵自排以后還是會變成1。
開始有0,增加主鍵自排約束,0依次變?yōu)?,2,3,4.......
開始沒0,增加主鍵自排約束,新添加的主鍵是0的行會根據(jù)行數(shù)自行變化,注意這里是新添加的行,使用的是insert。
開始沒0,把某個主鍵的數(shù)修改成0,這個0會直接在排好序了再在表里顯示出來。
說得簡單一點就是,增加主鍵自排約束后:
主鍵的值:修改成的0,可以存在,就是排個序。
新添加的0,不允許存在,要根據(jù)行號改變。
本身存在的0,不允許存在,要從1開始遞增變化。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:- MySQL外鍵約束常見操作方法示例【查看、添加、修改、刪除】
- MySQL刪除有外鍵約束的表數(shù)據(jù)方法介紹
- MySQL中的唯一性約束與NULL詳解
- 詳解MySQL中的外鍵約束問題
- MySQL 添加、修改、刪除表的列及約束等表的定義
- mysql創(chuàng)建Bitmap_Join_Indexes中的約束與索引
- 詳解mysql基本操作詳細(二)