如何在表上插入一个数字,该数字是来自相同FK加1的记录数。
说明: 有一张表格将保存阶段数(1,2,3 ...)。 创建新阶段时,我想使列号为已存在的阶段数的总和。
我尝试使用COUNT
在planId 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
答案 0 :(得分:0)
您可以在INSERT
上使用trigger来实现此目的:
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)
这将在number
的值上的INSERT
之前找到idPlan
的最大值,将其递增1,然后插入该值。如果没有iDPlan
值的条目,则COALESCE(MAX(number),0)
将返回0,因此将插入1。
例如在一个空表中
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