如何更改主键以基于列具有不同的Auto_Increment

时间:2014-07-15 11:49:09

标签: mysql sql

我有一张名为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时,是否可以这样做以及如何做?

2 个答案:

答案 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)

无法实现双向自动增量,但您可以使用以下逻辑手动实现此方案

首次参赛:

  • 在将值插入表格之前
  • 检查独立的值
  • 如果为0,则插入0 Else 1000

对于下一个条目:

  • 在将值插入表格之前
  • 检查独立的值
  • 如果为0,则使用where standalone = 0
  • 获取id列的最大值
  • 否则,如果为1,则使用where standalone = 1
  • 获取id列的最大值
  • 然后将id增加1并将其插入表