MYSQL中的auto_increment_increment和auto_increment_offset
来源:互联网 发布:手机按键连发软件 编辑:程序博客网 时间:2024/06/14 04:16
这两个参数在MYSQL中大致有两个作用
- 控制自增列AUTO_INCREMENT的行为
- 用于MASTER-MASTER之间的复制,防止出现重复值
############################
auto_increment_increment和auto_increment_offset用于主服务器-主服务器(master-to-master)复制,并可以用来控制AUTO_INCREMENT列的操作。两个变量均可以设置为全局或局部变量,并且假定每个值都可以为1到65,535之间的整数值。将其中一个变量设置为0会使该变量为1。如果试图将这些变量设置为大于65,535或小于0的值,则会将该值设置为65,535。如果向将auto_increment_increment或auto_increment_offset设置为非整数值,则会给出错误,并且变量的实际值在这种情况下保持不变。
这两个变量影响AUTO_INCREMENT列的方式:
o auto_increment_increment控制列中的值的增量值。例如:
o mysql> SHOW VARIABLES LIKE 'auto_inc%';
o +--------------------------+-------+
o | Variable_name | Value |
o +--------------------------+-------+
o | auto_increment_increment | 1 |
o | auto_increment_offset | 1 |
o +--------------------------+-------+
o 2 rows in set (0.00 sec)
o
o mysql> CREATE TABLE autoinc1 (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
o Query OK, 0 rows affected (0.04 sec)
o
o mysql> SET @auto_increment_increment=10;
o Query OK, 0 rows affected (0.00 sec)
o
o mysql> SHOW VARIABLES LIKE 'auto_inc%';
o +--------------------------+-------+
o | Variable_name | Value |
o +--------------------------+-------+
o | auto_increment_increment | 10 |
o | auto_increment_offset | 1 |
o +--------------------------+-------+
o 2 rows in set (0.01 sec)
o
o mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
o Query OK, 4 rows affected (0.00 sec)
o Records: 4 Duplicates: 0 Warnings: 0
o
o mysql> SELECT col FROM autoinc1;
o +-----+
o | col |
o +-----+
o | 1 |
o | 11 |
o | 21 |
o | 31 |
o +-----+
o 4 rows in set (0.00 sec)
(注明如何使用SHOW VARIABLES来获取这些变量的当前值)。
o auto_increment_offset确定AUTO_INCREMENT列值的起点。假定在与前面的例子的相同的会话中执行下面的命令:
o mysql> SET @auto_increment_offset=5;
o Query OK, 0 rows affected (0.00 sec)
o
o mysql> SHOW VARIABLES LIKE 'auto_inc%';
o +--------------------------+-------+
o | Variable_name | Value |
o +--------------------------+-------+
o | auto_increment_increment | 10 |
o | auto_increment_offset | 5 |
o +--------------------------+-------+
o 2 rows in set (0.00 sec)
o
o mysql> CREATE TABLE autoinc2 (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
o Query OK, 0 rows affected (0.06 sec)
o
o mysql> INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL);
o Query OK, 4 rows affected (0.00 sec)
o Records: 4 Duplicates: 0 Warnings: 0
o
o mysql> SELECT col FROM autoinc2;
o +-----+
o | col |
o +-----+
o | 5 |
o | 15 |
o | 25 |
o | 35 |
o +-----+
o 4 rows in set (0.02 sec)
o
如果auto_increment_offset的值大于auto_increment_increment的值,则auto_increment_offset的值被忽略。
如果其中一个或两个变量被更改了,然后更改插入到包含AUTO_INCREMENT列的表中的新行,结果可能看上去有问题,由于计算AUTO_INCREMENT系列值时没有考虑列内已经存在的值,并且插入的下一个值是列内最小的值,大于AUTO_INCREMENT列内已有的最大值。换句话说,数值的计算方法为:
auto_increment_offset+ N * auto_increment_increment
其中N为系列内的正整数值[1,2,3,...]。例如:
mysql> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 10 |
| auto_increment_offset | 5 |
+--------------------------+-------+
2 rows in set (0.00 sec)
mysql> SELECT col FROM autoinc1;
+-----+
| col |
+-----+
| 1 |
| 11 |
| 21 |
| 31 |
+-----+
4 rows in set (0.00 sec)
mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT col FROM autoinc1;
+-----+
| col |
+-----+
| 1 |
| 11 |
| 21 |
| 31 |
| 35 |
| 45 |
| 55 |
| 65 |
+-----+
8 rows in set (0.00 sec)
auto_increment_increment和auto_increment_offset所示的值可以生成系列5 +N * 10,即,[5,15,25,35,45,...]。在INSERT前col列内最大的值为31,AUTO_INCREMENT数列的下一个值为35,因此col中插入的值从该点开始,结果如SELECT查询所示。
一定要记住不可能将这两个变量的结果限制到一个表中,因此不会替代其它数据库管理系统提供的序列;这些变量控制MySQL服务器上all表AUTO_INCREMENT列的所有行为。如果某个变量设为全局变量,则只有通过局部设置将全局值更改和覆盖后或mysqld重启后其作用方可改变;如果局部设置,则新值影响所有表的AUTO_INCREMENT列,在这个会话期间当前用户在这些表中插入了新行,除非在会话期间更改了这些值。
auto_increment_increment的默认值为1。
auto_increment_offset的默认值为1。
##################################
当将多个服务器配置为复制主服务器时,使用auto_increment时应采取特殊步骤以防止键值冲突,否则插入行时多个主服务器会试图使用相同的auto_increment值。
服务器变量auto_increment_increment和auto_increment_offset可以帮助协调多主服务器复制和AUTO_INCREMENT列。每个变量有一个默认的(并且是最小的)值1,最大值为65,535。
将这些变量设置为非冲突的值,当在同一个表主插入新行时,多主服务器配置主的服务器将不会与AUTO_INCREMENT值冲突。
这两个变量这样影响AUTO_INCREMENT列:
· auto_increment_increment控制列值增加的间隔。例如:
· mysql> SHOW VARIABLES LIKE 'auto_inc%';
· +--------------------------+-------+
· | Variable_name | Value |
· +--------------------------+-------+
· | auto_increment_increment | 1 |
· | auto_increment_offset | 1 |
· +--------------------------+-------+
· 2 rows in set (0.00 sec)
·
· mysql> CREATE TABLE autoinc1 (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
· Query OK, 0 rows affected (0.04 sec)
·
· mysql> SET @auto_increment_increment=10;
· Query OK, 0 rows affected (0.00 sec)
·
· mysql> SHOW VARIABLES LIKE 'auto_inc%';
· +--------------------------+-------+
· | Variable_name | Value |
· +--------------------------+-------+
· | auto_increment_increment | 10 |
· | auto_increment_offset | 1 |
· +--------------------------+-------+
· 2 rows in set (0.01 sec)
·
· mysql> INSERT INTO autoinc1 VALUES (NULL), (NULL), (NULL), (NULL);
· Query OK, 4 rows affected (0.00 sec)
· Records: 4 Duplicates: 0 Warnings: 0
·
· mysql> SELECT col FROM autoinc1;
· +-----+
· | col |
· +-----+
· | 1 |
· | 11 |
· | 21 |
· | 31 |
· +-----+
· 4 rows in set (0.00 sec)
(这里注明如何使用SHOW VARIABLES以获得这些变量的当前值)。
· auto_increment_offset确定AUTO_INCREMENT列值的起点。影响到在复制设置主可以有多少主服务器(例如将该值设置为10表示设置可以支持10个服务器)。
考虑下面的命令,假定在前面所示示例中的相同的会话中执行这些命令:
mysql> SET @auto_increment_offset=5;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 10 |
| auto_increment_offset | 5 |
+--------------------------+-------+
2 rows in set (0.00 sec)
mysql> CREATE TABLE autoinc2 (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
Query OK, 0 rows affected (0.06 sec)
mysql> INSERT INTO autoinc2 VALUES (NULL), (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT col FROM autoinc2;
+-----+
| col |
+-----+
| 5 |
| 15 |
| 25 |
| 35 |
+-----+
4 rows in set (0.02 sec)
- MYSQL中的auto_increment_increment和auto_increment_offset
- mysql auto_increment_increment和auto_increment_offset
- Mysql设置auto_increment_increment和auto_increment_offset
- MySQL auto_increment_increment,auto_increment_offset 用法
- mysql中的锁和mysql的安全问题
- mysql 中的升序和降序
- MySql中的char和varchar
- MySQL中的commit和rollback
- mysql 中的升序和降序
- mysql 中的升序和降序 .
- php中的mysql和mysqli
- mysql中的插入和更新
- Mysql中的LOCATE 和 SUBSTRING
- Mysql中的TIMESTAMPDIFF和TIMESTAMPADD
- mysql中的timestamp和date
- mysql 中的MyISAM 和 InnoDB
- MySQL中的备份和恢复
- Mysql中的contact和group_contact
- 目前正在学习PIC18系列 mcu
- 算法
- Tomcat安装与配置
- 在oracle 9i下在线重定义表
- wizd media server for syabas-based players
- MYSQL中的auto_increment_increment和auto_increment_offset
- current_session_context_class
- 如何将任意文件编译为.o文件?
- 迷宫 DFS 递归 解法
- C/C++ 流媒体服务器
- 控制寄存器 cr0,cr2,cr3
- C语言学习笔记(8)
- 路径分析,可以拖动上面的节点,动态修改
- 有点意思的C/C++问题及解答:21-25