我有一张名为q_locations的表。
CREATE TABLE `q_locations` (
`id` int(11) NOT NULL,
`name` varchar(300) NOT NULL,
`standalone` bit(1) NOT NULL DEFAULT b'0',
UNIQUE KEY `id` (`id`),
KEY `standalone` (`standalone`)
)
我想' id'从0开始递增,当standalone = 0时,从1000递增,当standalone = 1时,是否可以这样做以及如何做?
答案 0 :(得分:3)
这是可能的,但不是自动的。传统方法是使用触发器来设置值。
但是,我认为你不应该走这条路。自动递增的主键不应具有与之关联的含义。它不是其他信息的编码;它只是一个分配给一行的数字(通常是插入顺序,尽管可能有间隙)。
如果要枚举standalone
的值,请在查询中而不是在主键列中执行此操作。
编辑:
触发器看起来像:
DELIMITER $$
CREATE TRIGGER trigger_insert_q_locations
BEFORE INSERT ON q_locations
FOR EACH ROW
BEGIN
SELECT coalesce(max(id) + 1, (case when standalone = 0 then 0 else 1000 end)) into NEW.id
FROM q_locations
WHERE standalone = NEW.standalone;
END$$
请注意,这会处理insert
。如果在记录上更新了standalone
的值,则数据将不合适。
答案 1 :(得分:0)
无法实现双向自动增量,但您可以使用以下逻辑手动实现此方案
首次参赛:
对于下一个条目: