这里我使用MySQL,我希望我的主键以字母开头,比如D000。然后每当我输入一个新记录时,主键自动递增如下:
D001 D002 D003。
我该怎么做?
答案 0 :(得分:1)
您不能AUTO_INCREMENT
类型为VARCHAR
的列。
您可以做的是将其设为BIGINT
和AUTO_INCREMENT
,并且只要您需要String
,就可以将其添加到您的字母'D'
中,例如:
Long dbKey = ...;
String key = "D" + dbKey;
您可以为此创建一个存储过程,将“自动递增”字符串设置为此列的默认值,但这不值得麻烦。使用数字总是比使用字符串更快,更有效。
答案 1 :(得分:0)
不确定为什么需要它,但您可以在获取数据后添加D
(String 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的关键和单一性将更加困难和更加昂贵