【问题标题】:MySQL AUTO DECREMENT instead of AUTO INCREMENT, is it possible?MySQL AUTO DECREMENT 而不是 AUTO INCREMENT,有可能吗?
【发布时间】:2017-11-08 15:24:20
【问题描述】:

我想在一张桌子上有自动生成的负键。

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

我需要这个,因为我必须创建一个镜像表以在 UNION 中使用原始表并“了解”哪些记录来自原始表,哪些记录来自镜像表。

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

【问题讨论】:

  • 另一种方法是将范围移动id - MAX_INT,这样你就会得到-MAX_INT+1 .. 0,或者只是前缀-
  • @lad2025 如果我运行 ALTER TABLE ic_soggetti_aux AUTO_INCREMENT = - MAXINT 我会收到错误消息:#1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“-MAXINT”附近使用正确的语法
  • 很遗憾,您错过了我的观点。我在想INSERT INTO table_x SELECT id, cola, colb FROM src UNION ALL SELECT -id, cola, cob FROM src 这样1 会变成-1 等等。或者,而不是 -id,您可以按最大 INT 移动,所以 id - 2^32 所以 1 -> -2^32+1 等等

标签: mysql auto-increment


【解决方案1】:

不要这样做。

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 中使用原始表并“了解”哪些记录来自原始表,哪些记录来自镜像表。 p>

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

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

【讨论】:

    猜你喜欢
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2019-09-29
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    相关资源
    最近更新 更多