本文目錄一覽:
- 1、Mysql資料庫自增長如何設置?
- 2、mysql自增語句
- 3、mysql如何設置ID自增
- 4、雪花演算法與Mysql自增的優缺點
- 5、mysql資料庫主鍵設置了自增,但是,我把刪除了一些數據,隨後加的數據為什麼會自增ID會接著已經刪除了的
- 6、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