我在一个项目中工作。在我的项目数据库中,我有学生和培训师。我需要对学生ID和培训师ID使用带字母数字的自动增量。 例如: 学生ID应自动增加为STU1,STU2 .... 培训师ID应自动增加为TRA1,TRA2 .... 我使用MySQL作为我的数据库。 如果可能,请为其他数据库提供解决方案,如oracle,Sql server。
答案 0 :(得分:0)
MySQL没有任何内置功能来处理这个问题。如果要在自动递增的id的前面添加的值始终相同,那么您根本不需要它,只需将它添加到SELECT语句的前面:
SELECT CONCAT('STU', CAST(student_id AS CHAR)) AS StudentID,
CONCAT('TRA', CAST(trainer_id AS CHAR)) AS TrainerID
FROM MyTable
否则以下内容适用于您:
CREATE TABLE MyTable (
student_id int unsigned not null auto_increment,
student_id_adder char(3) not null
trainer_id int unsigned not null auto_increment,
trainer_id_adder char(3) not null
)
将它们组合在一起的SELECT可能如下所示:
SELECT CONCAT(student_id_adder, CAST(student_id AS CHAR)) AS StudentID,
CONCAT(trainer_id_adder, CAST(trainer_id AS CHAR)) AS TrainerID
FROM MyTable
答案 1 :(得分:0)
你在这里混合了两个不同的概念。自动增量功能适用于基于ID的数据库表。
您可以构建一个学生表,其中每个学生都可以获得一个ID,该ID可以是数字或其他内容,并且可能会打印在学生卡中。这样的表格看起来像这样:
表学生
...
可以使用student_card_id存在其他表。现在有人说这很好。学生通过他们的卡ID识别,这些将永远不会改变。他们使用此自然键作为表中的主键。但是,其他人说每个表应该有一个技术ID,所以如果有一天你决定使用不同的学号(例如STUDENT01而不是STU01),那么你就不必更新所有引用表中的代码。您可以使用此处显示的其他技术ID:
表学生
您可以将ID用作主键,并应使用自动增量功能。因此,学生STU01可能具有技术ID 18654;它无所谓,因为它只是一个技术参考。学生卡仍将包含STU01。学生甚至不知道他们的数据库记录编号为18654。
不要混淆这两个概念。确定您的表是基于ID还是基于自然键。在任何一种情况下,您都必须考虑一种生成学生卡号码的方法。我建议你为此写一个函数。