Java 如何使主键以特定字母开头?
这里我使用的是MySQL,我希望我的主键以字母开头,比如D000。然后每次输入新记录时,主键自动递增,如下所示: D001 D002 D003Java 如何使主键以特定字母开头?,java,mysql,swing,Java,Mysql,Swing,这里我使用的是MySQL,我希望我的主键以字母开头,比如D000。然后每次输入新记录时,主键自动递增,如下所示: D001 D002 D003 我该怎么做?您不能自动递增类型为VARCHAR的列 您可以做的是使其成为BIGINT和AUTO_INCREMENT,当您需要它作为String时,您可以用字母'D'将其作为前缀,如下所示: Long dbKey = ...; String key = "D" + dbKey; 您可以为此创建一个存储过程,将“自动递增”字符串设置为该列的默认值,但这并不
我该怎么做?您不能
自动递增
类型为VARCHAR
的列
您可以做的是使其成为BIGINT
和AUTO_INCREMENT
,当您需要它作为String
时,您可以用字母'D'
将其作为前缀,如下所示:
Long dbKey = ...;
String key = "D" + dbKey;
您可以为此创建一个存储过程,将“自动递增”字符串设置为该列的默认值,但这并不值得这么做。另外,处理数字总是比处理字符串更快、更高效。不确定为什么需要它,但您可以在获取数据后添加
D
(String id=“D”+autoIncId;
)
您不能在自动增量字段中插入字符串或任何内容,我看不出这是否有用(所有记录都有一个D,所以没有人有)
如果要声明行默认值,可以添加一个名为default
的布尔列
while(rs.next()){
String id = rs.getBoolean("DEFAULT")?"D":"ND";
id+=rs.getLong(1);
}
编辑
根据您的评论,我理解您希望选择max ID并向其中添加1。然后可以在数据库中使用自动增量字段,它必须是数字类型(INTEGER、BIGINT…)
请忘记将“D”添加到主键中,它将无法按您的意愿工作。自动增量获取最后一个插入的ID并向其添加1。如果您的最后一个id是“D3”,则添加1与添加4到“apple”具有相同的含义。您正在使用不同的类型
SQL或任何其他编程语言都无法理解,如果将1添加到“D3”中,它将变成“D4”。你需要做的是去掉这个D(我仍然不明白这个目的)。我不确定我是否正确回答了你的问题,但下面的方法是否应该奏效
CREATE TRIGGER myTrigger
BEFORE INSERT
ON myTable
FOR EACH ROW
BEGIN
SET NEW.myCustomId = COALESCE('D', RPAD('0',3,NEW.id));
END
对于这种情况,您需要一个“普通”主键列 两个想法
- (无用的IMHO)我认为Maria DB有虚拟列,但我认为MySQL没有。但你有自己的观点。因此,您可以创建一个正常的INT、AUTOINCREMENT,并且在视图中有一个与键相关的计算列
- 可以对不同的表使用不同的数字范围
诚然,这是一个站不住脚的解决方案,但或许可以。我认为这样的区别可能是你的目标ALTER TABLE debtors AUTO_INCREMENT=10000; ALTER TABLE creditors AUTO_INCREMENT=30000; ALTER TABLE guests AUTO_INCREMENT=50000;
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或使用逻辑将“D001”键更改为“1”。强制执行ids的外键和唯一性将更加困难和昂贵这封信的目的是什么?如果你想要一个自动递增,为什么在它之前需要一个字母?为什么?主键-pk不应与其他要求混合。当您必须在该表中插入第1001条记录时,会发生什么情况?也许您可以使用复合主键@CocoNess在这种情况下,自动增量是可用的。当我在查询id=D1,D2,D3中写入时,从test中选择max(id)作为id,id=id+1,然后它应该给出id=D4的结果。D1、D2、D3是记录。(是否可能是D1+1)不能向int添加字符串。“D1”是字符串(DB中的VARCHAR),不能向其添加1。您应该从DB中删除te D,并在java中添加它们。