如何使用特定字母开始主键?

时间:2014-09-10 10:41:24

标签: java mysql swing

这里我使用MySQL,我希望我的主键以字母开头,比如D000。然后每当我输入一个新记录时,主键自动递增如下:

D001 D002 D003。

我该怎么做?

5 个答案:

答案 0 :(得分:1)

您不能AUTO_INCREMENT类型为VARCHAR的列。

您可以做的是将其设为BIGINTAUTO_INCREMENT,并且只要您需要String,就可以将其添加到您的字母'D'中,例如:

Long dbKey = ...;
String key = "D" + dbKey;

您可以为此创建一个存储过程,将“自动递增”字符串设置为此列的默认值,但这不值得麻烦。使用数字总是比使用字符串更快,更有效。

答案 1 :(得分:0)

不确定为什么需要它,但您可以在获取数据后添加DString id = "D" + autoIncId;)。

你不能在自动增量字段中插入一个字符串或任何东西,我无法看到它有用(所有记录都有一个D,所以没有人)。

如果要声明行默认值,可以添加名为DEFAULT的布尔列。

while(rs.next()){
    String id = rs.getBoolean("DEFAULT")?"D":"ND";
    id+=rs.getLong(1);
}

修改

根据您的评论,我了解您要选择最大ID并为其添加1。然后可以在数据库中使用自动增量字段,它必须是数字类型(INTEGER,BIGINT ...)。

请忘记将“D”添加到主键,它根本无法正常工作。自动增量采用最后插入的ID并将其加1。如果您的上一个ID是“D3”,则添加1与将“4”添加到“苹果”具有相同的含义。您使用的是不同类型。

SQL或任何其他编程语言无法理解如果向“D3”添加1,它应该变为“D4”。你需要做的是摆脱那个D(我仍然不明白的目的)。

答案 2 :(得分:0)

我不确定我的问题是否正确,但不应该做以下工作?

CREATE TRIGGER myTrigger
  BEFORE INSERT
  ON myTable
  FOR EACH ROW
BEGIN
  SET NEW.myCustomId = COALESCE('D', RPAD('0',3,NEW.id)); 
END

对于这种情况,您需要一个“普通”主键列..

答案 3 :(得分:0)

两个想法。

  • (无用的恕我直言)我认为Maria DB有虚拟列,虽然MySQL我认为没有。但你有观点。所以你可以制作一个普通的INT,AUTOINCREMENT,并在视图中有一个计算列连接你的密钥。

  • 可以为不同的表使用不同的 数字范围

    ALTER TABLE debtors   AUTO_INCREMENT=10000;
    ALTER TABLE creditors AUTO_INCREMENT=30000;
    ALTER TABLE guests    AUTO_INCREMENT=50000;
    

    这无疑是一种蹩脚的解决方案,但可能会这样做。 我认为这样的区别可能就是你的目标。

答案 4 :(得分:0)

哟可能会自行承担这种失常:

INSERT INTO table (id, a, b, c) 
      VALUES ( fn_get_key( LAST_INSERT_ID("table_name ") +1), "a", "b", "c");

其中fn_get_key是一个将数字转换为所需字符串并将执行的函数:

ALTER TABLE table_name AUTO_INCREMENT = start_value;

无论如何我不推荐你的方法。数字字符串更快,更容易排序。您始终可以创建一个视图来转换ID或使用逻辑o从“D001”键更改为“1”。对于执行ID的关键和单一性将更加困难和更加昂贵