如何解决或避免使用多个自动增量列的MySQL?

如何解决或避免使用多个自动增量列的MySQL?,mysql,auto-increment,multiple-columns,Mysql,Auto Increment,Multiple Columns,我在数据库设计上投入了很多精力,但我想我是的 现在意识到我犯了一个重大错误 背景:(如果不需要背景,请跳到“问题”。) DB支持网站模板的自定义CMS层。用户 模板仅限于打开和关闭页面,而不是创建 他们自己的“新”页面。此外,许多图元是不可编辑的 因此,如果一个页面有一段文本,我希望他们能够编辑, 我会“手动”为它分配一个静态ID: <h2><%= CMS.getDataItemByID(123456) %></h2> 然后,呈现的文本将是: <h2&

我在数据库设计上投入了很多精力,但我想我是的 现在意识到我犯了一个重大错误

背景:(如果不需要背景,请跳到“问题”。)

DB支持网站模板的自定义CMS层。用户 模板仅限于打开和关闭页面,而不是创建 他们自己的“新”页面。此外,许多图元是不可编辑的

因此,如果一个页面有一段文本,我希望他们能够编辑, 我会“手动”为它分配一个静态ID:

<h2><%= CMS.getDataItemByID(123456) %></h2>
然后,呈现的文本将是:

<h2>The answer to the universe is 42.</h2>
问题:

这意味着,每次创建事件时,我都需要创建 CMSData表中的以下行

+------------+-----------------+-----------------------------+
| CMSData_id | CMSData_data_id | CMSData_CMSDataType_type_id |
+------------+-----------------+-----------------------------+
|          x |               y |                           6 | (Event)
|        x+1 |             y+1 |                           5 | (Date)
|        x+2 |             y+2 |                           1 | (Title)
|        x+3 |             y+3 |                           3 | (Description)
+------------+-----------------+-----------------------------+
但是,有一个问题。在MySQL中,只能有一个自动递增字段

如果我查询CMSData_data_id的最大值,只需向其中添加1,则 有可能存在比赛条件,而其他人首先抓住了它

首先,这个问题通常是如何解决或避免的

谢谢


Eric

在写入表之前锁定表怎么样?这样,当您在CMSData表中插入一行时,可以获得最后一个id

另一个建议是不要有递增的id,而是一个唯一生成的id,比如guid等等


在写入表之前锁定表怎么样?这样,当您在CMSData表中插入一行时,可以获得最后一个id

另一个建议是不要有递增的id,而是一个唯一生成的id,比如guid等等


id应该是无意义的,除非是唯一的。无论由4个ID组成的块是否连续,您的设计都应该有效


重新设计您的实现,以单独添加部件,而不是以4块的形式添加。这样做可以从整体上简化事情,并提高您的可伸缩性。

id应该是无意义的,除非是唯一的。无论由4个ID组成的块是否连续,您的设计都应该有效


重新设计您的实现,以单独添加部件,而不是以4块的形式添加。这样做可以简化整个过程,并提高可伸缩性。

可以强制x等于y吗?id应该是无意义的,除非是唯一的。无论由4个ID组成的块是否连续,您的设计都应该有效。重新设计您的实现,以单独添加部分,而不是作为一块4。波希米亚-我重新设计了模式。花费了我很多时间,但正确的做法总是最快的方法。发表你的评论和回答,我可以接受。我添加了我的评论作为回答,以防你想接受。是否强制x等于y?id应该是无意义的,除非是唯一的。无论由4个ID组成的块是否连续,您的设计都应该有效。重新设计您的实现,以单独添加部分,而不是作为一块4。波希米亚-我重新设计了模式。花费了我很多时间,但正确的做法总是最快的方法。发表你的评论和回答,我可以接受。我添加了我的评论作为回答,以防你想接受。干杯
Data Item:  Table:
--------------------------------------------------
Date        CMSDates
Title       CMSStrings (As show above)
Description CMSTexts   (MySQL TEXT data type.)
--------------------------------------------------
+------------+-----------------+-----------------------------+
| CMSData_id | CMSData_data_id | CMSData_CMSDataType_type_id |
+------------+-----------------+-----------------------------+
|          x |               y |                           6 | (Event)
|        x+1 |             y+1 |                           5 | (Date)
|        x+2 |             y+2 |                           1 | (Title)
|        x+3 |             y+3 |                           3 | (Description)
+------------+-----------------+-----------------------------+