mysql主鍵自增怎麼處理,MySql 設定ID主鍵自增,從0開始,請問怎麼設

時間 2021-10-14 22:23:54

1樓:愛可生雲資料庫

列的自增屬性,一般用來設定整數列根據一定步長逐步增長的值,類似於其他資料庫的序列。不過這裡的「序列」是基於特定一張表的。關於自增屬性的相關特性如下:

1. 控制自增屬性效能的變數:innodb_autoinc_lock_mode

innodb_autoinc_lock_mode=0

代表傳統模式,也就是說,在對有自增屬性的欄位插入記錄時,會持續持有一個表級別的自增鎖,直到語句執行結束為止。比如說下面兩條語句,sql 1 在執行期間,一直持有對錶 f1 的表級自增鎖,接下來 sql 2 執行時鎖超時。

innodb_autoinc_lock_mode=1

代表連續模式,和傳統模式差不多,不同的點在於對於簡單的插入語句,比如 sql 2,只在分配新的 id 過程中持有一個輕量級的互斥鎖(執行緒級別,而不是事務級別),而不是直到語句結束才釋放的表鎖。

代表交錯模式。這個模式下放棄了自增表鎖,產生的值會不連續。不過這是效能最高的模式,多條插入語句可以併發執行。mysql 8.0 預設就是交錯模式。

那針對複製安全來說,以上三種模式,0 和 1 對語句級別安全,也就是產生的二進位制日誌複製到任何其他機器都資料都一致;2 對於語句級別不安全;三種模式對二進位制日誌格式為行的都安全。

2. 控制自增屬性的步長以及偏移量

一般用在主主複製架構或者多源複製架構裡,主動規避主鍵衝突。

auto_increment_increment 控制步長

auto_increment_offset 控制偏移量

3. 對於要立刻獲取插入值的需求

就是說要獲取一張表任何時候的最大值,應該時刻執行以下 sql 3 ,而不是 sql 2。sql 2 裡的函式 last_insert_id() 只獲取上一條語句最開始的 id,只適合簡單的 insert。

4. 自增列溢位現象

自增屬性的列如果到了此列資料型別的最大值,會發生值溢位。比如變更表 f1 的自增屬性列為 tinyint。

sql 2 顯式插入最大值 127, sql 3 就報錯了。所以這點上建議提前規劃好自增列的欄位型別,提前瞭解上限值。

5. 自增列也可以顯式插入有符號的值

那針對這樣的,建議在請求到達資料庫前規避掉。

2樓:

方法一: 如果曾經的資料都不需要的話,可以直接清空所有資料,並將自增欄位恢復從1開始計數

truncate table 表名

方法二: dbcc checkident (』table_name』, reseed, new_reseed_value) 當前值設定為 new_reseed_value。如果自建立表後沒有將行插入該表,則在執行 dbcc checkident 後插入的第一行將使用 new_reseed_value 作為標識。

否則,下一個插入的行將使用 new_reseed_value + 1。如果 new_reseed_value 的值小於標識列中的最大值,以後引用該表時將產生 2627 號錯誤資訊。

方法二不會清空已有資料,操作比較靈活,不僅可以將自增值歸零,也適用於刪除大量連續行後,重新設定自增值並插入新的資料;或從新的值開始,當然不能和已有的衝突。

$sql="delete from $table_vote";

mysql_query($sql, $link);

$sql="alter table $table_vote auto_increment=1";

mysql_query($sql, $link);

3樓:_____至尊寶

問題描述清楚,需要自增還是不需要

mysql 設定id主鍵自增,從0開始,請問怎麼設?

4樓:小熙

有時候我們在測試**的時候,刪除測試資料導致id不是從0開始,那如果想id是從0開始怎麼辦呢?

mysql預設自增id是從1開始了,但當我們如果有插入表或使用delete刪除id之後id就會不會從1開始了.

使用mysql時,通常表中會有一個自增的id欄位,但當我們想將表中的資料清空重新新增資料時,希望id重新從1開始計數,用以下兩種方法均可.

通常的設定自增欄位的方法,建立**時新增:

create table table1(id int auto_increment primary key,...)

5樓:

在建表語句中加入

id int identity(0,1) not null,

mysql 的語句是

id mediumint not null auto_increment, 你的

已經有了啊

6樓:匿名使用者

就我所知這個好像無法實現,就算你自己編譯mysql恐怕也很難。因為last_insert_id()這個內建的函式返回最近一次插入的自增長id,當沒有符合條件的id時,它返回0,所以如果自增長從0開始的話,這個返回值就很難判定到底是插入了一條自增長id為0的記錄還是沒有符合條件的記錄了。

7樓:匿名使用者

autoincrement本身就是從1開始計數

mysql不支援臨時表怎麼辦,如何修改mysql臨時表記憶體表的大小限制

內部臨時表有兩種型別 一種是heap臨時表,這種臨時表的所有資料都會存在記憶體中,對於這種表的操作不需要io操作。另一種是ondisk臨時表,顧名思義,這種臨時表會將資料儲存在磁碟上。ondisk臨時表用來處理中間結果比較大的操作。如果heap臨時表儲存的資料大於max heap table siz...

蝦塘增養機打起來泡沫多要怎麼處理

不知道你的情況嚴不嚴重,有的南美白對蝦塘,一開氧滿堂都是白沫兒,水面都遮住了,人工去撈肯定效率不高,只有讓風自然地將沫兒吹響塘一邊,並停止充氧,這時候在集中處理。另外可能就是水體不夠肥,或者開氧時間太長了。可以試著選用微管充氧機,效果很好。1.處理方法 對蝦養殖中期,飼料質量影響水質,沒有定期平衡菌...

離職時工作群會怎麼處理,辭職過後,工作群是自己退群還是等群主移出?

離職之後,自己的工作群就可以選擇退出了。很多人的一生是會有很多不同的工作的,很多人在辭職之後,都會保留自己的工作群,這樣的做法其實並不對。離職,就代表著和公司沒有了關係,自己的行為不會給公司帶來價值,自己的言語不會為公司造成影響了,這樣的話,還保留這工作群是沒有任何的意義的。在公司工作,是需要很大的...