gpt4 book ai didi

mysql - 如果一列已经是 auto_increment,如何使第二列递增?

转载 作者:行者123 更新时间:2023-11-28 23:25:11 24 4
gpt4 key购买 nike

我的表中有三列(ID、Receipt_no、Name)。ID 是主键自动递增所以 ID 将从 1 开始,同样认为我必须设置 receipt_no 所以它也将从 1 开始。是否可能?

我正在使用 phpmyadmin。

提前致谢。

-- Table structure for table `temp`
--

CREATE TABLE IF NOT EXISTS `temp` (
`Id` int(11) NOT NULL,
`Receipt_no` int(11) NOT NULL,
`Name` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


ALTER TABLE `temp`
ADD PRIMARY KEY (`Id`), ADD UNIQUE KEY `Receipt_no` (`Receipt_no`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `temp`
--
ALTER TABLE `temp`
MODIFY `Id` int(11) NOT NULL AUTO_INCREMENT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

最佳答案

为安全测试创建一个数据库:

create schema Hybreeder;
use Hybreeder;

架构:

CREATE TABLE `temp` (
`Id` int(11) AUTO_INCREMENT PRIMARY KEY,
`Receipt_no` int(11) NOT NULL,
`Name` varchar(20) NOT NULL,
UNIQUE KEY `unq_Receipt_no` (`Receipt_no`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- The following table would be useful system wide for all
-- your special incrementor needs whatever they may be
-- Especially great for those looking for Prefixes to
-- add to PK's like an id such as ABC00001
create table sequences
( id int auto_increment primary key,
sectionType varchar(200) not null,
nextSequence int not null,
unique key(sectionType)
) ENGINE=InnoDB;

-- Prime it with some "sections" (we had to call them something)
insert sequences (sectionType,nextSequence) values
('Chassis',1),('Engine Block',1),('Carburetor',1),('Receipt',1001);

存储过程:

DROP PROCEDURE if exists getNextSequence;
DELIMITER $$ -- Note: delete this line for PHPMyAdmin (you don't need it)
CREATE PROCEDURE getNextSequence(p_sectionType varchar(200))
BEGIN
-- pass in as a parameter the "section" for next inc, such as "Chassis"
START TRANSACTION;
SELECT nextSequence into @mine_to_use from sequences where sectionType=p_sectionType FOR UPDATE;
UPDATE sequences set nextSequence=nextSequence+1 where sectionType=p_sectionType;
COMMIT; -- get and release INTENTION LOCK ASAP
SELECT @mine_to_use as yourSeqNum; -- return as a 1 column, 1 row resultset
END;
$$ -- Note: delete this line for PHPMyAdmin (you don't need it)
DELIMITER ; -- Note: delete this line for PHPMyAdmin (you don't need it)

您的客户端程序将调用存储过程并处理结果集以获得下一个要使用的数字,例如:

call getNextSequence("Receipt");
+------------+
| yourSeqNum |
+------------+
| 1001 |
+------------+

再次调用它:

call getNextSequence("Receipt");
+------------+
| yourSeqNum |
+------------+
| 1002 |
+------------+

它现在有一个 1 行 1 列的结果集,列名称为 yourSeqNum

让我们用伪代码将 NNNNN 称为变量。

INSERT temp(`Receipt_no`,`Name`) VALUES (NNNNN,'Fred'); -- again this is pseudocode

IdAUTO_INCREMENT 列,所以我们在上面的列列表中跳过它。它由 MySQL 自动处理。

为什么是伪代码?因为这里没有讲到你的前端语言是什么PHP,Python,Java,不知道你是怎么处理那个结果集得到变量NNNNN的。我并没有写下所有内容!

您接下来的任务只是修改上面将序列号放入变量的部分,并在 INSERT 语句中使用它。

清理:

DROP SCHEMA Hybreeder;

现在有些人会说这整件事看起来很傻,因为 NNNNN 总是比 Id 大 1000,那有什么意义呢?如果您有多个接收部分序列表的消费者,比如其他流程或其他公司,那么情况就不是这样了。

请跟随Here的叙述了解我在上面忽略的更多技术方面。

关于mysql - 如果一列已经是 auto_increment,如何使第二列递增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39683204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com