En utilisant MyISAM, vous pouvez le faire ...
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 |
+------+----+
- contemplation tranquille un moment pour l'indice pauvre
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;
... et en prenant un peu plus loin (coz I qu'il était temps que je savais comment utiliser les commandes préparées à l'intérieur sprocs) ...
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 |
+------+----+
Les identifiants d'incrémentation automatique sont uniques. Si 001 et 002 sont différents, quelle est la logique derrière l'ajout de l'année? au lieu de cela, vous pouvez enregistrer l'année dans un champ supplémentaire et ensuite effectuer la partie de codage – swapnesh
mais je veux inclure l'année .. – user2038163