自增MySQL小数问题

Auto increment MySQL decimal number problems

我正在构建一个应用程序,该应用程序将有一个 table 个具有自动增量 id INT 字段的客户端。然后我有一个 HTML “案例”表单,用户必须从下拉列表中选择一个客户端,然后添加一些关于“案例”的信息,这些信息将进入另一个 table.

这意味着客户端的 ID 为 1,2,3 等等。我希望这种情况在从下拉列表中选择的客户端的 ID 号上添加一个十进制数。因此,对于 Client 2 + 1:2.1、2.2 等等。客户编号 3、3.1、3.2 等

将提交的案例添加到 SQL 的最佳方式是什么?我看看我是否为案例 ID 字段选择了十进制,我得到的数字 3.4 为 3.400,因为我选择了十进制 4,3 (MySQL) 进行测试。我需要这样的小数,因为案例的数量可以达到数百个,我不能 trim 那个。我正在努力解决 MySQL 字段的类型以及如何解决这个问题。 我会很感激一些指导。

我唯一能想到的就是传一个client的值,然后做id + "." + 1,并将其存储为十进制 1,1 (MySQL),该自动增量是否会自动增加到 1.2 等等?

不要这样做。这是我能给你的最好的建议。

您正在尝试使用 80 年代所谓的“智能代码”。

它们过时是有充分理由的。开发成本非常高,不可维护,范围有限,随你便。远离它们,改用普通的外键。它们为您提供应用程序增长时所需的所有灵活性。

MySQL 自动递增机制只递增整数。抱歉,这就是它的实现方式。

在 MySQL 中设计 Case table 的最佳方式是:

CREATE TABLE Cases (
  case_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  client_id INT NOT NULL,
  ...other attributes of the case...
  FOREIGN KEY (client_id) REFERENCES Client (client_id)
);

它将有一个用于 table 的自动递增计数器,所有客户端都需要共享这个数字。这意味着对于给定的客户,案例编号并不总是连续的,并且每个客户的案例编号不会从 1 开始。抱歉,这就是 MySQL 中自动递增的工作方式。

问题 asked many times 有一些变体,"how can I make an auto-increment that renumbers for each group?" 您可以阅读 MAX(case_id) 给定客户的问题,您需要为其插入案例,然后使用在您的 INSERT 中最大 case_id + 1。换句话说,忘记使用自增功能,自己计算id。

执行此操作时必须锁定 table 以避免竞争条件;两个并发用户可以同时插入,并读取相同的 MAX(case_id) 值并尝试插入相同的值。

你使用十进制数的计划会出问题。

  • 如果有一天您有一个客户的案例超过 999 怎么办?您必须重新格式化所有案例 ID,不仅针对具有 1000 个案例的客户,而且针对 所有 客户。任何对您在纸质声明和报告中发送的案例 ID 的引用都将失效。

  • 您将如何执行 SQL 查询来搜索给定客户的所有案例?如果您在自己的列中有 client_id,它将是一个类似于 SELECT ... FROM Case WHERE client_id = 3 的查询,但是如果您必须执行一个类似于 ... WHERE case_id BETWEEN 3.000 AND 3.999 的查询,那么它就不那么清晰并且更难优化。向您为该项目雇用的新程序员解释也更难。如果最终将 id 格式扩展到小数点后 4 位,则必须重写所有这些 SQL 查询。