【问题标题】:how to create AUTO increment ID number如何创建自动增量 ID 号
【发布时间】:2023-03-15 23:23:01
【问题描述】:

如何创建由年份和数字组成的自动增量ID号,例如:“2012-0001”如果我输入其他数据,它将自动增量为“2012-0002”。

谢谢!

【问题讨论】:

  • 自动增量ID是唯一的..所以如果001和002不同..那么添加年份的逻辑是什么?取而代之的是,您可以在额外的字段中保存年份,然后执行编码部分
  • 但我想包括年份..

标签: php mysql phpmyadmin


【解决方案1】:

使用 MyISAM,您可以做到这一点...

CREATE TABLE myisam_example(year INT NOT NULL,id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(year,id)) ENGINE=MyISAM;

INSERT INTO myisam_example VALUES (2012,NULL);
INSERT INTO myisam_example VALUES (2012,NULL);
INSERT INTO myisam_example VALUES (2012,NULL);
INSERT INTO myisam_example VALUES (2012,NULL);
INSERT INTO myisam_example VALUES (2012,NULL);
INSERT INTO myisam_example VALUES (2013,NULL);
INSERT INTO myisam_example VALUES (2013,NULL);
INSERT INTO myisam_example VALUES (2013,NULL);
INSERT INTO myisam_example VALUES (2013,NULL);
INSERT INTO myisam_example VALUES (2013,NULL);

SELECT * FROM myisam_example;
+------+----+
| year | id |
+------+----+
| 2012 |  1 |
| 2012 |  2 |
| 2012 |  3 |
| 2012 |  4 |
| 2012 |  5 |
| 2013 |  1 |
| 2013 |  2 |
| 2013 |  3 |
| 2013 |  4 |
| 2013 |  5 |
+------+----+

SELECT * 
  FROM myisam_example 
 WHERE CONCAT(year,'-',LPAD(id,5,0)) = '2012-00004';
+------+----+
| year | id |
+------+----+
| 2012 |  4 |
+------+----+

--对可怜的索引进行片刻的沉思

SET @sql = CONCAT('SELECT * FROM myisam_example WHERE CONCAT(year,\'-\',LPAD(id,5,0)) = ?');

PREPARE stmnt1 FROM @sql;                
SET @a = '2012-00004';
EXECUTE stmnt1 USING @a;
+------+----+
| year | id |
+------+----+
| 2012 |  4 |
+------+----+
DEALLOCATE PREPARE stmnt1;

...更进一步(因为我想是时候知道如何在存储过程中使用准备好的语句了)...

DROP PROCEDURE fetchid;
DELIMITER $$
CREATE PROCEDURE fetchid(IN a VARCHAR(10)) 
BEGIN
 SET @sql = CONCAT('SELECT * FROM myisam_example WHERE CONCAT(year,\'-\',LPAD(id,5,0)) = ?');
 PREPARE stmnt1 FROM @sql;                
 SET @a = a; 
 EXECUTE stmnt1 USING @a;
 DEALLOCATE PREPARE stmnt1;
END $$

DELIMITER ;

CALL fetchid('2012-00004');
+------+----+
| year | id |
+------+----+
| 2012 |  4 |
+------+----+

【讨论】:

  • 我想要的是当我在我的数据库中搜索一个条目时,我只输入 ID 号“2012-0001”
【解决方案2】:

你将不得不编写一个程序来做到这一点。 Strawberry 的解决方案向您展示了在 SQL 端需要做什么,但是您必须编写接口(非 sql)来分解输入,这样当用户输入 2012-0001 时,查询字符串会显示类似“WHERE年份=2012 和 id=0001"

如果您询问是否可以在表中包含一个可以包含连字符但自动递增的列,答案是否定的。

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 2018-12-13
    • 2022-09-29
    • 2012-12-23
    • 2017-08-25
    • 1970-01-01
    • 2016-08-09
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多