MySQL AUTO DECREMENT而不是AUTO INCREMENT,是否可能?

时间:2017-11-08 15:24:20

标签: mysql auto-increment

我想在桌面上设置否定的自动生成密钥。

而不是Keys:1,2,3,..,X 我想要键:-1,-2,-3,..., - X

我需要这个,因为我必须创建一个镜像表,在UNION中使用原始和'理解'哪些记录来自原始表,哪些记录来自镜像表。

你认为这是个好主意吗? 是否有一种简单的方法来获得负自动减少键?或者我必须使用触发器吗?

1 个答案:

答案 0 :(得分:3)

不要这样做。

https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html说:

  
      
  • 为AUTO_INCREMENT列指定负值

         

    在所有锁定模式(0,1和2)中,如果为AUTO_INCREMENT列指定负值,则不会定义自动增量机制的行为。

  •   

换句话说,走这条路就是混乱。

MySQL支持一个选项auto_increment_increment,您可以使用该选项定义每次递增时的递增方式,但该值必须大于0。

mysql> set session auto_increment_increment = -1;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+----------------------------------------------------------+
| Level   | Code | Message                                                  |
+---------+------+----------------------------------------------------------+
| Warning | 1292 | Truncated incorrect auto_increment_increment value: '-1' |
+---------+------+----------------------------------------------------------+

mysql> select @@auto_increment_increment;
+----------------------------+
| @@auto_increment_increment |
+----------------------------+
|                          1 |
+----------------------------+

您解释了为什么要这样做:

我需要这个,因为我必须创建一个镜像表,在UNION中使用原始和'理解'哪些记录来自原始表,哪些记录来自镜像表。

使用另一列来指示行来自哪个表:

SELECT 'original' AS WhichTable, column1, column2, column3 
FROM MyOriginalTable
UNION ALL
SELECT 'mirror', column1, column2, column3 
FROM MyMirrorTable;