是否可以在递增字段前添加字母或其他字符?

时间:2014-07-07 01:43:53

标签: python mysql django django-models

我想要做的是让我的主键字段(或其他字段,只要它接受自动递增)自动递增,前面有一个字母。例如:

我希望能够在一个表中使pk等于A1,A2,A3,如果我选择,则在另一个表中选择B1,B2,B3。这可能与django? MySQL的?只要字段自动递增,该字段就不必是主键字段。请告诉我。

2 个答案:

答案 0 :(得分:0)

MySQL中没有任何内容可以自动为您执行此操作。你确实有几个选择。

选项1(更好的选项):

使用两个单独的字段,然后在提取信息时将它们组合起来:

CREATE TABLE MyTable (
  id int unsigned not null auto_increment,
  id_adder char(1) not null
)

然后使用以下所有其他字段来获得所需的结果:

SELECT CONCAT(id_adder, CAST(id AS CHAR)) AS FullPK FROM MyTable

选项2:

您可以根据输入的最后一个值得到下一个值:

CREATE TABLE MyTable (
  id varchar(15),
  OtherField varchar(30),
  UNIQUE (id)
)

插入内容可能如下所示:

INSERT INTO MyTable (id, OtherField)
SELECT CONCAT('A', CAST(CAST(RIGHT(id, LENGTH(id) - 1) AS UNSIGNED) + 1 AS CHAR)),
       'Other Field Value'
FROM MyTable
ORDER BY id DESC
LIMIT 1

答案 1 :(得分:0)

单独使用自动递增字段是不可能的。您可以在每个表中设置另一个列,其中一个字母标识表,具有自动递增列,然后将该键组合为两者。您也可以使用触发器进行设置。

但是,这并不完全有意义,因为单个表格中不需要这封信。

我怀疑你正试图解决另一个问题,即在不同的表中有一个实体的多个“类型”(比如一个联系人表,一个用于电子邮件,一个用于邮件,一个用于电话联系) 。如果是这样,另一种方法是使用自动递增id的所有内容的主表,然后在子表中使用此id,以1-1关系定义。