MySQL 表的自增欄位 預判功能innodb_autoinc_lock_mode
在 5.1.22之後,innodb對於可以預判行數的insert語句,innodb使用一個輕量級的互斥量,而不是表級鎖。
但有可能會造成自增欄位的值不連續。
注:如果使用新的自增互斥方式,對於replication應該避免使用INSERT ... ON DUPLICATE KEY UPDATE語句。
設定新自增互斥方式:透過配置選項:innodb_autoinc_lock_mode:調整鎖策略:
innodb_autoinc_lock_mode = 0 (“traditional” lock mode:全部使用表鎖)
innodb_autoinc_lock_mode = 1 (預設)(“consecutive” lock mode:可預判行數時使用新方式,不可時使用表鎖)
innodb_autoinc_lock_mode = 2 (“interleaved” lock mode:全部使用新方式,不安全,不適合replication)
##建立自增欄位
方法1、建立:
mysql> create table c(id int auto_increment,name varchar(20),primary key(id));
Query OK, 0 rows affected (0.52 sec)
mysql> desc c;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.03 sec)
方法2、修改:
mysql> create table cc (id int,name varchar(20));
Query OK, 0 rows affected (0.42 sec)
mysql> alter table cc change id id int primary key auto_increment;
Query OK, 0 rows affected (1.12 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc cc;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.11 sec)
mysql> insert into cc(id,name) values(1,'a'),(NULL,'b'),(NULL,'c'),(5,'d');
mysql> select * from cc;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 5 | d |
+----+------+
4 rows in set (0.00 sec)
注:只有int型別且為primary key 才可以使用auto_increment.
##對存在記錄的表的列修改為自增列
mysql> create table ccc (id int,name varchar(20));
Query OK, 0 rows affected (0.27 sec)
mysql> insert into ccc(id,name) values(1,'a'),(NULL,'b'),(NULL,'c'),(5,'d');
Query OK, 4 rows affected (0.53 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from ccc;
+------+------+
| id | name |
+------+------+
| 1 | a |
| NULL | b |
| NULL | c |
| 5 | d |
+------+------+
4 rows in set (0.00 sec)
mysql> alter table ccc change id id int primary key auto_increment;
Query OK, 4 rows affected (1.04 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> desc ccc;
+-------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | YES | | NULL | |
+-------+-------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
mysql> insert into ccc(id,name) values(1,'a'),(NULL,'b'),(NULL,'c'),(5,'d');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
mysql> insert into ccc(id,name) values(6,'aa'),(NULL,'ab'),(NULL,'ac'),(10,'ad')
;
Query OK, 4 rows affected (0.07 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from ccc;
+----+------+
| id | name |
+----+------+
| 1 | a |
| 2 | b |
| 3 | c |
| 5 | d |
| 6 | aa |
| 7 | ab |
| 8 | ac |
| 10 | ad |
+----+------+
8 rows in set (0.00 sec)
mysql>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27126919/viewspace-2125137/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MyBatis實現MySQL表欄位及結構的自動增刪MyBatisMySql
- oracle中如何指定表欄位自增Oracle
- oracle和mysql設定自增欄位OracleMySql
- 給mybatis新增自動建表,自動加欄位的功能MyBatis
- 基於MySQL自增ID欄位增量掃描研究MySql
- SQL Server 自增欄位重置SQLServer
- MySQL自增鎖模式innodb_autoinc_lock_mode引數詳解MySql模式
- 觸發器—一個表插入資料時其他欄位同步自增長欄位觸發器
- mysql表最多欄位數MySql
- sql判斷表中是否有此欄位SQL
- MySQL修改欄位預設值MySql
- mysql資料表插入資料後,獲取自增欄位值的方法MySql
- 一文詳解MySQL如何同時自增自減多個欄位MySql
- mysql如何判斷是否存在某個欄位MySql
- 5_MySQL 表的欄位約束MySql
- mysql表操作(alter)/mysql欄位型別MySql型別
- MySQL多個timestamp欄位自動新增預設值的問題MySql
- MySQL 更新一個表裡的欄位等於另一個表某欄位的值MySql
- [原創] mysql表欄位多少限定MySql
- SQLServer中如何刪除欄位的自增標識SQLServer
- mysql修改表、欄位、庫的字符集MySql
- SQL Server中根據某個欄位,ID欄位自動增長的實現SQLServer
- PostgreSQL10.0preview功能增強-兩段式索引(約束欄位+附加欄位)SQLView索引
- MyBatis-Plus-實用的功能自動填充欄位MyBatis
- Laravel Tips:指定自增欄位起始值Laravel
- SQL Server 自增欄位歸零等問題SQLServer
- MySQL 更新同一個表不同欄位MySql
- mysql修改表欄位學習筆記MySql筆記
- innodb引擎對自增欄位(auto_increment)的處理REM
- ORACLE9I中建立自增欄位的方法(轉)Oracle
- MySQL欄位預設值設定詳解MySql
- mysql建立表的時候對欄位和表新增COMMENTMySql
- oracle中判斷欄位是否存在和新增表結構Oracle
- Oracle 基本操作之 建立自增欄位方法-ORACLE SEQUENCEOracle
- SQL Server 2005裡設定自增欄位SQLServer
- Oracle建立自增欄位方法-ORACLE SEQUENCE的簡單介紹Oracle
- oracle刪除表欄位和oracle表增加欄位Oracle
- 更改MySql表和欄位區分大小寫MySql