Mysql 在数据库中使用字符串组合自动增加表id

Mysql 在数据库中使用字符串组合自动增加表id,mysql,database,Mysql,Database,我们知道,任何表的id都是整数类型的,并且该表中的自动增量也可以。但我的问题是,我想增加字符串和整数的组合。例如 字符串:ABC是唯一id的起始代码 我的表的第一个Id应该是主键和 ie ABC10001,ABC10002,。。。。。等等 不使用另一个键作为自动增量。请不要使用两种类型的唯一键。您不能在一列中执行此操作,除非您在插入前指定一个触发器,该触发器将预先填充它,让您完全自行避免自动增量自行处理的任何竞争条件。auto_increment只能用于整数或浮点列 在我看来,“要求”PK有一个

我们知道,任何表的id都是整数类型的,并且该表中的自动增量也可以。但我的问题是,我想增加字符串和整数的组合。例如 字符串:ABC是唯一id的起始代码

我的表的第一个Id应该是主键和

ie ABC10001,ABC10002,。。。。。等等


不使用另一个键作为自动增量。请不要使用两种类型的唯一键。

您不能在一列中执行此操作,除非您在插入前指定一个
触发器,该触发器将预先填充它,让您完全自行避免自动增量自行处理的任何竞争条件。auto_increment只能用于整数或浮点列

在我看来,“要求”PK有一个特定的格式,“只是让它自动递增”是相互排斥的

这并不意味着你不能在选择上“伪造”:

SELECT CONCAT('ABC1',LPAD(id,5,'0')) FROM tablename;

除了Wrikken的响应之外,您还可以从db中选择“下一个”值:

SELECT LPAD( max( substr( id, 5 ) ) +1, 4, '0' ) FROM tablename

然后在下一个insert语句中使用此值。

实现此操作是个坏主意。你将不得不手动计算出下一个值,然后你将受到比赛条件的影响。这可能会导致严重的数据完整性问题,如果不完全正确,则无法修复这些问题。但是,如果您只想显示带有客户机名称的数字,这是可能的,但对于客户机,数字不会按顺序排列。(我以客户机为例,我真的不知道您的前缀是什么意思),因此如果ABC001、DEF002、ABC003是可以接受的,那么只需连接即可从您的自动真实id获取数字。

为什么主键需要前缀?在查询或显示时,您不能将其添加到应用程序层吗?这看起来非常类似于这个问题:据我所知,MySQL中的自动递增字母数字键是不可能的。您必须编写自己的序列生成器,可能是在触发器中。但这似乎是一个疯狂的解决方案!主键本身是一个唯一的键,但即使我希望以字符串的形式跟踪唯一的键。假设一个employee表包含一个雇员的记录,从1开始,但我想从EMP-0001开始,像这样…使它再次唯一和可读。这不是一个可接受的“原样”解决方案,需要更多来防止竞争条件。伙计,你节省了我的时间。非常感谢