CREATE TABLE TT ( ID CHAR (8) NOT NULL, NM CHAR (10) DEFAULT '0' NOT NULL, PRIMARY KEY(ID));INSERT INTO tt (ID, NM) VALUES ('00000001', 'A')
INSERT INTO tt (ID, NM) VALUES ('00000002', 'B')
INSERT INTO tt (ID, NM) VALUES ('00000003', 'C')
INSERT INTO tt (ID, NM) VALUES ('00000004', 'D')+----------+----+
| ID | NM |
+----------+----+
| 00000001 | A |
| 00000002 | B |
| 00000003 | C |
| 00000004 | D |
+----------+----+UPDATE TT SET ID = ConCat(Elt(Length(ID+10),'0000000','000000','00000','0000','000','00','0',''),ID+10) WHERE ID =000000001+----------+----+
| ID | NM |
+----------+----+
| 00000011 | A |
| 00000002 | B |
| 00000003 | C |
| 00000004 | D |
+----------+----+
INSERT INTO tt (ID, NM) VALUES ('00000002', 'B')
INSERT INTO tt (ID, NM) VALUES ('00000003', 'C')
INSERT INTO tt (ID, NM) VALUES ('00000004', 'D')+----------+----+
| ID | NM |
+----------+----+
| 00000001 | A |
| 00000002 | B |
| 00000003 | C |
| 00000004 | D |
+----------+----+UPDATE TT SET ID = ConCat(Elt(Length(ID+10),'0000000','000000','00000','0000','000','00','0',''),ID+10) WHERE ID =000000001+----------+----+
| ID | NM |
+----------+----+
| 00000011 | A |
| 00000002 | B |
| 00000003 | C |
| 00000004 | D |
+----------+----+
| ID | NM |
+----------+----+
| 00000011 | A |
| 00000102 | B |
| 00000003 | C |
| 00000004 | D |
+----------+----+以 Char 型代替INT 型,就可以实现 0打头的数字
以后在更新时就要处理补0的问题,
用上面的两种 函数配合方式就能达到你的期望了呵呵,应该符合你的要求了吧!!
8.32
8.29
8.29
8.29
SELECT BENCHMARK(10000,ConCat(Repeat('0',8-Length(ID+100)),ID+100)) FROM TT;运行时间(秒)
8.35
8.33
8.32
8.33
环境
CPU CII 1000MHz呵呵,寻求更好的算法
其实,我问:
我通常用VARCHAR做ID的数据类型,但我觉得,我使用的ID也就只有0-9的十个字符,用8位来表示比较浪费,用4位表示0-9就够了。就省些。
所以,我问MySql中有没有这种数据类型。用4位二进制表示一个字符。
探索JSP的小菜鸟..望大家多多指教.因为我实在是太菜了.
同样Date\DateTime\等也不可以
只有数值型的才能设AUTO_INCREMENT属性
包括浮点型,