【问题标题】:Auto increment in mysql by more than 1mysql中的自动增量超过1
【发布时间】:2022-10-25 15:37:24
【问题描述】:

我有一个使用 sql 数据库运行的发票系统。 每次创建新发票时,发票编号都会增加 1。

所以发票编号为 5000,接下来是 5001,然后是 5002,依此类推。 我希望下一个发票编号增加一个不同的数字,比如 15。

所以发票号是 5000,然后是 5015,然后是 5030 等等。

是否可以更改 phpmyadmin 中的某些内容来实现这一点。

TIA

【问题讨论】:

  • 警告!税务人员会认为这很奇怪,所以要仔细看看
  • RiggsFolly 所说的非常正确,如果你工作的公司得到定期检查。这将受到质疑,因为您将丢失发票编号。并且可以进行进一步调查。
  • 虽然税务人员会认为这很奇怪,但除非您做了其他事情,否则调查将以“没什么问题”结束。这不是我会做的事情,但它并不违法。只是……奇怪。

标签: mysql phpmyadmin


【解决方案1】:

试试这个,请注意这是全球性的,而不仅仅是一张桌子。如果您只想在一个表上发生这种情况,请创建一个存储过程来设置 id 而不是自动递增。

SET @@auto_increment_increment=2;
SET @@auto_increment_offset=2;

文档: https://dev.mysql.com/doc/refman/8.0/en/replication-options-source.html#sysvar_auto_increment_increment

您也可以让子查询决定发票编号应该是什么,而不是自动递增。我怀疑这段代码应该写在发票软件本身中(在你的情况下,这可能是不可能的,此时我的顶级示例是唯一的方法)但如果你可以编辑软件,你只需要选择存在的最高发票,然后 + 2 - 然后将其存储在您提供的列中。

【讨论】:

  • 只是出于好奇,说SP如何工作?他们是否需要选择最后一个 ID,然后在使用 Insert 之前添加 15?
  • @Demeteor 是的,准确地说。那时您不会使用自动增量,但正如您所说,是根据最后一个 ID 计算的 ID。所以基本上你在 id 上做一个选择最大值,然后使用那个值 + 2 来存储,就像你在软件本身中做的改变一样。 - 同样,如果你愿意,你可以保持 ID 不变,只需创建一个名为 invoice_number 的新列,而不是使用 invoice_id 或类似的东西并显示它 - 使用上面的计算。
  • 好吧,干杯!我没有问最初的问题,但是当我有机会时,我发现学习很有趣
  • 当然,总是很好学习。我在上面的回答是否回答了你的问题?关于 auto_increment_increment 和 auto_increment_offset,还是你还有问题?
  • 我不是最初提出这个问题的人^^,但对我来说,这很清楚
【解决方案2】:

我知道您可以修改 mySQL 中的步骤,但这是一个全局更改,会影响所有表。我建议您保留数据原样并使用视图将值乘以 15。
显然你将替换列描述有许多列,包含真实信息、日期、客户等。

create table invoice_data(
id int primary key AUTO_INCREMENT,
description varchar(100)
);
create view invoices as
select
15 * id as invoice_number,
description
from invoice_data;
insert into invoice_data (description) values
('invoice 1 information'),('invoice 2 information');
select * from invoices;
invoice_number | description          
-------------: | :--------------------
            15 | invoice 1 information
            30 | invoice 2 information

db<>小提琴here

【讨论】:

    【解决方案3】:

    你可以用两列来做到这一点。一个ID 具有正常自动增量,一个InvoiceNumber 具有默认值(ID * 15):

    ALTER TABLE `definitions`
        ADD COLUMN `InvoiceNumber` INT NOT NULL DEFAULT (ID * 15) AFTER `DisplayOrder`;
    

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多