相关疑难解决方法(0)

如何在一张表中有两个自动增量列?

我有一个 MySQL 表,其中包含有关公司发票的信息。但是,这家公司有两个分公司,每个分公司都有独特的开票顺序;可以说是“意甲”和“意甲”。但是,这是一家公司,我不想创建两个发票表。相反,我想为一张表设置两个不同的自动增量。我知道这在技术上是不可能的,但我想这是其他人以前解决过的一个问题,所以我想知道这个问题是否有一个众所周知的“解决方案”?

我现在正在做的不是使用主键作为发票编号(这将是理想的),而是使用带有发票 ID 的辅助列,该列是手动递增的(嗯,使用 PHP 脚本,但它仍然不是自动的),通过检查该特定系列的最新发票。

这是我目前的设置:

CREATE TABLE `invoices` (
  `id` mediumint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
  `invoicenumber` mediumint unsigned NOT NULL,
  `branch` enum('A','B') NOT NULL,
  `date` date NOT NULL,
  `client` varchar(100) NOT NULL
) COMMENT='' ENGINE='InnoDB';
Run Code Online (Sandbox Code Playgroud)

要检查延迟发票,我运行:

SELECT MAX(invoicenumber+1) AS new_invoice_number FROM invoices WHERE branch = 'A'

mysql database-design

9
推荐指数
1
解决办法
2万
查看次数

MySQL在没有自动增量的情况下获取下一个唯一值

我有一个 MySQL 数据库 (InnoDB),我正在开发它用于跟踪我组织的工作订单。有多个“站点”,每个站点的工作订单号从 100 开始。

WorkorderID    SiteID    SiteWorkorderNum
     1           1            100
     2           1            101
     3           2            100
Run Code Online (Sandbox Code Playgroud)

WorkorderID是自动增量字段。
SiteIDSiteWorkorderNum都设置为唯一约束。

每当即将为特定站点插入新工作订单时,应用程序都会检查登录者的站点 ID 的 max(SiteWorkorderNum) 并将该值返回到插入语句。我想避免的问题是,同一站点的两个用户是否同时输入新的工作订单。

我有几个可能的解决方案,但我想看看是否有更好的方法,因为每个方法都有其缺点,但我确信一个会比另一个更好,当然我对新想法持开放态度。

1)锁定表以保证在我们检索并插入我们的值之前没有其他用户检索 SiteWorkorderNum 值(但是假设我们每分钟有成千上万的用户试图输入工作订单,表锁定不会减慢速度吗? )

2)不要锁定表,检索下一个可用的 SiteWorkorderNum 并尝试插入到数据库中,如果我收到一个唯一约束错误,请捕获该错误并重试,直到我成功。(这可能会释放表,但再次假设我们在同一站点有数千个用户,多个数据库调用是否会有点低效?)

我是否对这些解决方案中的任何一个“可能”影响性能过于偏执?当然,我没有成千上万的用户,但我想在这个设计中应用最佳实践,以防我曾经在一个流量很高的项目上工作。

mysql constraint auto-increment locking

7
推荐指数
1
解决办法
2万
查看次数

如何在 MySQL phpmyadmin 中使用 2 个自增列

是否可以使用 2 个自动增量值?

  • 一个从0开始
  • 另4000400起

请帮我

mysql phpmyadmin auto-increment

6
推荐指数
2
解决办法
5万
查看次数

在主键之后创建带有附加列的索引是否有意义?

我正在查看我们的 MySQL 5.7.16 数据库,我注意到有些索引使用主键作为索引中的第一列,然后是其他列。直观上,这对我来说似乎没有意义,因为索引总是通过使用第一列将其缩小到一行。但是,我不确定是否有任何特殊情况需要使用这种索引。在任何情况下这都会提高性能吗?

mysql performance index

4
推荐指数
1
解决办法
1493
查看次数