0

我有一个客户希望将 MSSQL DB 移植到 MYSQL。ID都是负整数,我需要创建一些带有负整数的MySQL表,从-200000000开始,然后像每条新记录一样增加+1

4

1 回答 1

0

您不能使用带有负数的自动递增字段。来自MySQL 文档

如果用户为列分配负值或者该值变得大于指定整数类型中可以存储的最大整数,则不会定义自动增量机制的行为。

我建议将您想要的 ID + 200000000 存储在 MySQL 中。但想必你已经想到了,只想将负数存储为 ID。您的客户必须生成 ID,并且您必须确保 ID 生成对并发问题是安全的。这是一种解决方案(免责声明:尚未对其进行测试,对于许多并发用户来说可能不是很有效):

LOCK TABLE MyTable READ; -- Make sure no one else can use the table
SELECT MAX(ID) FROM MyTABLE; -- Find out what the current ID is
INSERT INTO MyTable(ID, OtherColumn) VALUES(-100, "x"); -- Derive the ID from the previous value
UNLOCK TABLES; -- Allow others to use table again

MyTable.ID专栏必须签名。

于 2013-04-07T02:45:19.593 回答