mysql資料庫中自增(mysql資料庫設置自增語句)

本文目錄一覽:

Mysql資料庫自增長如何設置?

在MySQL中可通過欄位的AUTO_INCREMENT屬性來自動生成。

mysql資料庫表主鍵自增長的sql語句

1、不控制主鍵的起點

create table emb_t_dictBusType

(

   emb_c_busTypeID      int not null auto_increment,

   emb_c_busTypeEnName  varchar(255) not null,

   emb_c_busTypeZhName  varchar(255) not null,

   primary key(emb_c_busTypeID)  

)engine=INNODB  default charset=gbk;

2、控制主鍵的起點

create table emb_t_dictBusType

(

   emb_c_busTypeID      int not null auto_increment,

   emb_c_busTypeEnName  varchar(255) not null,

   emb_c_busTypeZhName  varchar(255) not null,

   primary key(emb_c_busTypeID)  

)engine=INNODB auto_increment=1001 default charset=gbk;

mysql自增語句

如果希望在每次插入新記錄時,自動地創建主鍵欄位的值。可以在表中創建一個 auto-increment 欄位。MySQL 使用 AUTO_INCREMENT 關鍵字來執行 auto-increment 任務。默認地AUTO_INCREMENT 的開始值是 1,每條新記錄遞增 1。

mysql如何設置ID自增

設置自增列

MYSQL的自增列一定要是有索引的列,設置種子值要在表的後面設置

–mysql

— 設置自增ID從N開始

CREATE TABLE empautoinc(

ID INT PRIMARY KEY AUTO_INCREMENT

) AUTO_INCREMENT = 100 ; –(設置自增ID從100開始)

insert into empautoinc(id) values(null);

Query OK, 1 row affected (0.00 sec)

mysql select * from empautoinc;

+—–+

| ID |

+—–+

| 100 |

+—–+

1 row in set (0.00 sec)

show table status like ’empautoinc’G;

*************************** 1. row ***************************

Name: empautoinc

Engine: InnoDB

Version: 10

Row_format: Compact

Rows: 1

Avg_row_length: 16384

Data_length: 16384

Max_data_length: 0

Index_length: 0

Data_free: 0

Auto_increment: 101

Create_time: 2016-10-27 01:50:32

Update_time: NULL

Check_time: NULL

Collation: utf8_general_ci

Checksum: NULL

Create_options:

Comment:

1 row in set (0.00 sec)

設置自增列的步長,可以分為全局級別和會話級別

如果是會話級別,那麼當用戶新建一個會話的時候,那麼步長又回到了全局級別,所以mysql的步長跟sqlserver的步長有很大的不同

mysql不能設置為 表級別 的步長

私信666領取資料

雪花演算法與Mysql自增的優缺點

雪花演算法與Mysql自增的優缺點分別是:

雪花演算法優點是:

1、不會重複。

2、有序,不會造成空間浪費和胡亂插入影響性能。

3、生成很快特別是比UUid快得多。

4、相比UUid更小。

缺點是:時間回撥造成錯亂。

Mysql自增的優點是:

1、存儲空間小。

2、插入和查詢性能高。

缺點是:

1、int的範圍可能不夠大。

2、當要做數據遷移的時候,會很麻煩,主鍵容易衝突。

3、id自增,自身的業務增長情況很容易被別人掌握。

4、自增在高並發的情況下性能不好。

生成id的代碼是:

自增和UUid差異的原因是:mysql資料庫一般我們會採用支持事務的Innodb,在Innodb中,採用的是B+數索引。Innodb的存儲結構,是聚簇索引。對於聚簇索引順序主鍵和隨機主鍵的對效率的影響很大。

自增是順序主鍵存儲,查找和插入都很方便(插入會按順序插到前一個的後面),但UUid是無序的,通過計算獲得的hashcode也會是無序的(是按照hashcode選擇存儲位置)。

所以對於他的查找效率很低,而且因為他是無序的,他的插入有可能會插到前面的數據中,會造成很多其他的操作,很影響性能或者很多存儲空間因為沒有順序的存儲而被空缺浪費。

mysql資料庫主鍵設置了自增,但是,我把刪除了一些數據,隨後加的數據為什麼會自增ID會接著已經刪除了的

這是資料庫主鍵自增的固然性質所決定的,數據刪除後,主鍵還是會繼續增加的,即主鍵使用過一次將不會再次使用。

例如:這個表中有10條數據,主鍵為1-10不間斷的數字,那刪除第十條數據,繼續插入的話,id則會變成11,而不是10。通俗的說就是主鍵使用過一次將不會再次使用。

每次插入則不需要為主鍵設置參數,資料庫會根據設置的遞增條件,自動給出主鍵值。則第一次插入後主鍵為1,第二次為2,依次遞增。

擴展資料:

Mysql、SqlServer主鍵自動增長的設置方法:

1、在mysql中把主鍵定義為自動增長標識符類型

如果把表的主鍵設為auto_increment類型,資料庫就會自動為主鍵賦值。例如:

create table customers(id int auto_increment primary key not null, name varchar(15));insert into customers(name) values(“name1”),(“name2”);

2、在MS SQLServer中,如果把表的主鍵設為identity類型,資料庫就會自動為主鍵賦值。例如:

create table customers(id int identity(1,1) primary key not null, name varchar(15));insert into customers(name) values(“name1”),(“name2”);identity包含兩個參數,第一個參數表示起始值,第二個參數表示增量。

參考資料來源:百度百科-主鍵約束

mysql 自增插入

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

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. 自增列也可以顯式插入有符號的值

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

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/257712.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-15 12:46
下一篇 2024-12-15 12:46

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Python3支持多行語句

    Python3是一種高級編程語言,開發人員可以輕鬆地使用該語言編寫簡單到複雜的代碼。其中Python3支持多行語句,方便開發人員編寫複雜的代碼,提高代碼的可讀性和可維護性。 一、使…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python for循環語句列印九九乘法表

    本篇文章將詳細介紹如何使用Python的for循環語句列印九九乘法表。列印九九乘法表是我們初學Python時經常練習的一項基礎操作,也是編寫Python程序的基本能力之一。 1、基…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • Python中while語句和for語句的區別

    while語句和for語句是Python中兩種常見的循環語句,它們都可以用於重複執行一段代碼。然而,它們的語法和適用場景有所不同。本文將從多個方面詳細闡述Python中while語…

    編程 2025-04-29
  • Python中自定義函數必須有return語句

    自定義函數是Python中最常見、最基本也是最重要的語句之一。在Python中,自定義函數必須有明確的返回值,即必須要有return語句。本篇文章將從以下幾個方面對此進行詳細闡述。…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29

發表回復

登錄後才能評論