MySQL AUTO DECREMENT而不是AUTO INCREMENT,这可能吗?

MySQL AUTO DECREMENT instead of AUTO INCREMENT, is it possible?

我想在 table.

上自动生成负键

代替键:1,2,3,..,X 我想要键:-1,-2,-3,...,-X

我需要这个,因为我必须创建一个镜像 table 以便在 UNION 中与原始文件一起使用 'understand' 哪些记录来自原始文件 table 哪些记录来自原始文件 table镜子 table.

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

不要这样做。

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

  • Assigning a negative value to the AUTO_INCREMENT column

    In all lock modes (0, 1, and 2), the behavior of the auto-increment mechanism is not defined if you assign a negative value to the AUTO_INCREMENT column.

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

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 |
+----------------------------+

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

我需要这个,因为我必须创建一个镜像 table 以便在 UNION 中与原始 'understand' 一起使用,其中记录来自原始 table 和哪些来自镜子table.

使用另一列来指示 table 行来自:

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