年と番号で構成される自動増分ID番号を作成する方法、例:「2012-0001」別のデータを入力すると、「2012-0002」に自動増分されます。
ありがとう!
年と番号で構成される自動増分ID番号を作成する方法、例:「2012-0001」別のデータを入力すると、「2012-0002」に自動増分されます。
ありがとう!
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;
...そしてさらに一歩進んでください(sproc内で準備されたステートメントを使用する方法を知る時が来たと思いました)...
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 |
+------+----+
そのためには、プログラムを作成する必要があります。Strawberry のソリューションは、SQL 側で何をする必要があるかを示していますが、ユーザーが 2012-0001 を入力すると、クエリ文字列が "WHERE年=2012 AND id=0001"
テーブルにハイフンを含む列を自動インクリメントできるかどうかを尋ねている場合、答えはノーです。