如何在同一个序列中插入一个序列号?

ct2axkht  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(393)

如何在表中插入一个数字,即来自同一fk的记录数加1。
一个解释:有一个表可以容纳相数(1,2,3…)。当一个新的阶段被创建时,我想让列的编号是已经存在的阶段的编号的总和。
我试过用count
在平面204上,将有3个阶段。在html表单上,我只想得到名字和年份。用户不负责阶段的编号。当它被添加时,它是一个连续的数字。

INSERT INTO 
        phase (
        idPlan,
        name,
        number,
        constructionYear
        )
        VALUES (
        204,
        'jj',
         HERE IS THE SEQUENTIAL NUMBER,
        2001
        )

CREATE TABLE `phase` (
 `idPhase` int(11) NOT NULL AUTO_INCREMENT,
 `idPlan` int(11) NOT NULL,
 `number` int(11) NOT NULL,
 `constructionYear` year(4) NOT NULL,
 `name` varchar(100) DEFAULT NULL,
 PRIMARY KEY (`idPhase`),
 KEY `idPlan` (`idPlan`),
 KEY `idPlan_2` (`idPlan`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
xxb16uws

xxb16uws1#

您可以通过打开触发器来实现这一点 INSERT :

CREATE TRIGGER `phase_insert`
BEFORE INSERT ON `phase` FOR EACH ROW 
SET NEW.number = (SELECT COALESCE(MAX(number),0)+1 FROM phase WHERE idPlan=NEW.idPlan)

这将找到 numberINSERT 关于 idPlan 将其递增1,然后插入该值。如果没有 iDPlan 价值观 COALESCE(MAX(number),0) 将返回0,因此将插入1。
e、 在一张空table上

INSERT INTO phase (idPlan, name, number, constructionYear)
    VALUES (204, 'jj', 0, 2001), (204, 'xx', 0, 2002);
SELECT * FROM phase

输出:

idPhase     idPlan  number  constructionYear    name
3           204     1       2001                jj
4           204     2       2002                xx

相关问题