我有一个主列id AUTO_INCRMENT
的项目表。每个项目都有一个 type
(为了举例,类型可以是 apple
orange
或 banana
)和一些列数据
。如何创建一个列迭代
,在插入新项目时该列将成为该特定类型项目的递增值/id?
此外,由于表格已经填充了数据,我如何更新现有数据以遵循该模式(按 time_added
的顺序)。
CREATE TABLE IF NOT EXISTS `items` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`iteration` int(11) NOT NULL,
`type` smallint(6) NOT NULL,
`data` binary(16) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE `items`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `unique_iteration` (`type`,`data`) USING BTREE;
最佳答案
您需要针对您的 items
表设置一个触发函数:
DELIMITER //
CREATE TRIGGER item_insert BEFORE INSERT ON items
FOR EACH ROW
BEGIN
IF (NEW.iteration IS NULL OR NEW.iteration=0) THEN
SET NEW.iteration = (SELECT 1+MAX(iteration) FROM items WHERE type=NEW.type);
END IF;
END; //
DELIMITER ;
关于mysql - MySQL 中重复列自动递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33396367/