控制自增屬性的步長(zhǎng)以及偏移量 一般用在主主復(fù)制架構(gòu)或者多源復(fù)制架構(gòu)里,主動(dòng)規(guī)避主鍵沖突。
為蘇尼特右等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及蘇尼特右網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、蘇尼特右網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
這是數(shù)據(jù)庫(kù)主鍵自增的固然性質(zhì)所決定的,數(shù)據(jù)刪除后,主鍵還是會(huì)繼續(xù)增加的,即主鍵使用過(guò)一次將不會(huì)再次使用。
解決方案:將主鍵設(shè)置為自動(dòng)增長(zhǎng)??梢栽跀?shù)據(jù)庫(kù)手動(dòng)將相關(guān)表設(shè)置ID為自增長(zhǎng) 手動(dòng)將表設(shè)置為自增長(zhǎng)有弊端,建議在annotation里邊的POJO類使用注解方式設(shè)置自增長(zhǎng)。mysql的數(shù)據(jù)庫(kù)如圖所示設(shè)置。
首先,打開Mysql查詢器,連接上相應(yīng)的mysql連接。鼠標(biāo)右擊需要清空自增ID的表,選擇“設(shè)計(jì)表”,再將選項(xiàng)卡切換到“設(shè)置”欄,會(huì)發(fā)現(xiàn)雖然清空了表,但是自動(dòng)遞增的數(shù)值仍然沒有變回1。
這是因?yàn)槟阍O(shè)置的主鍵自增策略中就是每次增二。其實(shí)在建表語(yǔ)句中主鍵字段設(shè)置autoincrement就可以了,當(dāng)然建表以后也可以使用alte語(yǔ)句,實(shí)現(xiàn)自增一的效果。
可用函數(shù) mysql_insert_id() 獲取最新插入數(shù)據(jù)庫(kù)中數(shù)據(jù)的product_id。直接輸出 mysql_insert_id() 返回的是最新插入數(shù)據(jù)的ID ;如果你的product_id是 unsigned int,或者 bigint 的 。那么,可能是返回的是錯(cuò)誤的。
1、Mysql7及以下版本,innodb表的自增值保存在內(nèi)存中,重啟后表的自增值會(huì)設(shè)為max(id)+1,而myisam引擎的自增值是保存在文件中,重啟不會(huì)丟失。Mysql0開始,innodb的自增id能持久化了,重啟mysql,自增ID不會(huì)丟。
2、首先用Navicat打開我們的數(shù)據(jù)庫(kù),點(diǎn)擊打開表視圖。請(qǐng)點(diǎn)擊輸入圖片描述 然后右鍵點(diǎn)擊要設(shè)置自增字段的那個(gè)表,在彈出菜單上點(diǎn)擊‘Design Table’(即表設(shè)計(jì))。
3、自增屬性的列如果到了此列數(shù)據(jù)類型的最大值,會(huì)發(fā)生值溢出。比如變更表 f1 的自增屬性列為 tinyint。SQL 2 顯式插入最大值 127, SQL 3 就報(bào)錯(cuò)了。所以這點(diǎn)上建議提前規(guī)劃好自增列的字段類型,提前了解上限值。
4、這個(gè)選項(xiàng)的作用是暫時(shí)制止MySQL在該命令每插入一條新記錄和每修改一條現(xiàn)有之后立刻對(duì)索引進(jìn)行刷新,對(duì)索引的刷新將等到全部記錄插入/修改完畢之后再進(jìn)行。
5、在數(shù)據(jù)庫(kù)應(yīng)用,我們經(jīng)常要用到唯一編號(hào),以標(biāo)識(shí)記錄。在MySQL中可通過(guò)數(shù)據(jù)列的AUTO_INCREMENT屬性來(lái)自動(dòng)生成。可在建表時(shí)可用“AUTO_INCREMENT=n”選項(xiàng)來(lái)指定一個(gè)自增的初始值。
6、然后重啟數(shù)據(jù)庫(kù)后,auto-increment 計(jì)數(shù)器的值變?yōu)?3,也就是 user 表里的自增列 ID 的最大值 2 加 1。此時(shí)在插入數(shù)據(jù)時(shí),自增 ID 會(huì)從 3 開始自增。
1、在創(chuàng)建表的時(shí)候可以設(shè)置,方法如下,用一下sql語(yǔ)句。create table tableName(id int identity(1,1) primary key,data varchar(50))解釋:其中identity(1,1)代表自增,第一個(gè)1代表從1開始計(jì)數(shù),第二個(gè)1代表每次增長(zhǎng)1。
2、在連接1中向A表插入一條記錄,A表包含一個(gè)auto_increment類型的字段。在連接2中向A表再插入一條記錄。
3、不過(guò)對(duì)于AUTO來(lái)說(shuō),是根據(jù)不同的數(shù)據(jù)庫(kù)選擇最合適的自增主鍵生成策略。如果使用MySQL,則主鍵要定義AUTO_INCREMENT,如果是Oracle,則要?jiǎng)?chuàng)建Sequence來(lái)實(shí)現(xiàn)自增。
4、你可以在執(zhí)行完insert語(yǔ)句后,馬上執(zhí)行select LAST_INSERT_ID()這個(gè)函數(shù)就可以獲取到剛增記錄的自增主鍵值了。
5、雙擊紅框中選項(xiàng),填好相應(yīng)配置,進(jìn)入后點(diǎn)擊如圖所示先創(chuàng)建數(shù)據(jù)庫(kù)(此操作必須在MySQL已經(jīng)啟動(dòng)情況下)左下角SCHEMAS底下就是你的數(shù)據(jù)庫(kù)名字,先雙擊拉出TABLE,在TABLE上右鍵創(chuàng)建新表。解決方案:將主鍵設(shè)置為自動(dòng)增長(zhǎng)。
6、你第一次執(zhí)行insert后,再立刻執(zhí)行一條“select last_insert_id() as aa,這個(gè)aa就是你insert的id值。這個(gè)語(yǔ)句是針對(duì)當(dāng)前線程的,如果別人也insert了內(nèi)容,互相不會(huì)干擾??梢园踩氖褂?。
在MySQL中可通過(guò)字段的AUTO_INCREMENT屬性來(lái)自動(dòng)生成。
解決方案:將主鍵設(shè)置為自動(dòng)增長(zhǎng)??梢栽跀?shù)據(jù)庫(kù)手動(dòng)將相關(guān)表設(shè)置ID為自增長(zhǎng) 手動(dòng)將表設(shè)置為自增長(zhǎng)有弊端,建議在annotation里邊的POJO類使用注解方式設(shè)置自增長(zhǎng)。mysql的數(shù)據(jù)庫(kù)如圖所示設(shè)置。
注:我測(cè)試了一下使用UTF8編碼,varchar的最大長(zhǎng)度為21854字節(jié)。在mysql 0.45版本,數(shù)據(jù)庫(kù)編碼utf8下進(jìn)行測(cè)試:varchar最長(zhǎng)定義為21785。也就是說(shuō)不論字母、數(shù)字、漢字,只能放21785個(gè)。
就我所知這個(gè)好像無(wú)法實(shí)現(xiàn),就算你自己編譯mysql恐怕也很難。
從零蛋娃娃的回復(fù)中得到啟示,解決問題。重新表述需求: id自增長(zhǎng),同時(shí)需要一個(gè)鍵uniquekey是唯一鍵。解決方法就是:把id在索引中設(shè)置索引類型為任意一個(gè)類型,比如normal,然后unique就可以設(shè)置為主鍵了。
大象推薦這種方式管理主鍵,很方便,集中式管理表的主鍵,而且更換數(shù)據(jù)庫(kù)不會(huì)造成很大的問題。
1、使用 PHP mysql_insert_id() 函數(shù) 定義和用法 mysql_insert_id() 函數(shù)返回上一步 INSERT 操作產(chǎn)生的 ID。 如果上一查詢沒有產(chǎn)生 AUTO_INCREMENT 的 ID,則 mysql_insert_id() 返回 0。
2、如果不考慮多連接影響而只是獲取下一條自增id可以這樣做: select max(id) 獲取最大id 然后加1。
3、在連接1中向A表插入一條記錄,A表包含一個(gè)auto_increment類型的字段。在連接2中向A表再插入一條記錄。
4、如何在MYSQL插數(shù)據(jù)ID自增的方法。如下參考:在添加字段之前,第一個(gè)應(yīng)該首先檢查當(dāng)前tb1表的結(jié)構(gòu),如下圖所示。實(shí)例字段列添加到表,如下所示。再次看表結(jié)構(gòu)和比較之前和之后的情況添加字段,如下圖所示。
5、SELECT LAST_INSERT_ID()說(shuō)明,即使是在并行的時(shí)候,多個(gè)程序都在插入,仍然能獲得自己的ID,因?yàn)槊總€(gè)連接的會(huì)話號(hào)是不同的。
6、每插入一條都會(huì)有一個(gè)mysql_insert_id();不管你批不批量,插入完成后,會(huì)返回最后一條的mysql_insert_id();如果中間插入失敗,就返回失敗之前的那一條id。