如何在数据库中使用auto_increment作为字母数字值

时间:2014-07-07 10:06:44

标签: mysql sql oracle

我在一个项目中工作。在我的项目数据库中,我有学生和培训师。我需要对学生ID和培训师ID使用带字母数字的自动增量。 例如: 学生ID应自动增加为STU1,STU2 .... 培训师ID应自动增加为TRA1,TRA2 .... 我使用MySQL作为我的数据库。 如果可能,请为其他数据库提供解决方案,如oracle,Sql server。

2 个答案:

答案 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
  • 如first_name
  • 姓氏
  • ...

    可以使用student_card_id存在其他表。现在有人说这很好。学生通过他们的卡ID识别,这些将永远不会改变。他们使用此自然键作为表中的主键。但是,其他人说每个表应该有一个技术ID,所以如果有一天你决定使用不同的学号(例如STUDENT01而不是STU01),那么你就不必更新所有引用表中的代码。您可以使用此处显示的其他技术ID:

表学生

  • ID
  • student_card_id
  • 如first_name
  • 姓氏
  • ...

您可以将ID用作主键,并应使用自动增量功能。因此,学生STU01可能具有技术ID 18654;它无所谓,因为它只是一个技术参考。学生卡仍将包含STU01。学生甚至不知道他们的数据库记录编号为18654。

不要混淆这两个概念。确定您的表是基于ID还是基于自然键。在任何一种情况下,您都必须考虑一种生成学生卡号码的方法。我建议你为此写一个函数。