表明:zbbook
字段:zbSerial(主键,字符型),name,content,lastTime,state要求:zbSerial编号规则:ZBYYYYMMDDNNN,'ZB'固定,YYYYMMDD是当前时间,NNN是3位流水号
例如:ZB20090926001,ZB20090926002,ZB20090926003如何实现?

解决方案 »

  1.   

    mysql> select concat('ZB',replace(curdate(),'-',''),'001');
    +----------------------------------------------+
    | concat('ZB',replace(curdate(),'-',''),'001') |
    +----------------------------------------------+
    | ZB20090926001                                |
    +----------------------------------------------+
    1 row in set (0.00 sec)
      

  2.   

    mysql> select concat('ZB',replace(curdate(),'-',''),id) from test;
    +-------------------------------------------+
    | concat('ZB',replace(curdate(),'-',''),id) |
    +-------------------------------------------+
    | ZB20090926001                             |
    | ZB20090926002                             |
    | ZB20090926003                             |
    +-------------------------------------------+
    3 rows in set (0.00 sec)mysql> select * from test;
    +-----+
    | id  |
    +-----+
    | 001 |
    | 002 |
    | 003 |
    +-----+
    3 rows in set (0.00 sec)
      

  3.   

    mysql> create table test(id int(3) zerofill auto_increment not null ,primary key
    (id) );
    Query OK, 0 rows affected (0.16 sec)
      

  4.   

    可以用触发器实现。mysql> create table zbbook(zbSerial char(13) default '' primary key,name varchar(10),content varchar(10),lastTime date,state varchar(10));
    Query OK, 0 rows affected (0.09 sec)mysql> delimiter |
    mysql>
    mysql> CREATE TRIGGER tr_zbbook_bi BEFORE INSERT ON zbbook
        ->   FOR EACH ROW BEGIN
        ->          declare n int;
        ->          select IFNULL(max(right(zbSerial,3)),0) into n from zbbook where mid(zbSerial,3,8)=DATE_FORMAT(CURDATE(),'%Y%m%d');
        ->          set NEW.zbSerial=concat('ZB',DATE_FORMAT(CURDATE(),'%Y%m%d'),right(1001+n,3));
        ->   END;
        -> |
    Query OK, 0 rows affected (0.03 sec)mysql>
    mysql> delimiter ;
    mysql> insert into zbbook(name,content,lastTime,state) values('A1','AAAA1',CURDATE(),'N1');
    Query OK, 1 row affected (0.08 sec)mysql> select * from zbbook;
    +---------------+------+---------+------------+-------+
    | zbSerial      | name | content | lastTime   | state |
    +---------------+------+---------+------------+-------+
    | ZB20090926001 | A1   | AAAA1   | 2009-09-26 | N1    |
    +---------------+------+---------+------------+-------+
    1 row in set (0.00 sec)mysql> insert into zbbook(name,content,lastTime,state) values('A2','AAAA2',CURDATE(),'N2');
    Query OK, 1 row affected (0.06 sec)mysql> select * from zbbook;
    +---------------+------+---------+------------+-------+
    | zbSerial      | name | content | lastTime   | state |
    +---------------+------+---------+------------+-------+
    | ZB20090926001 | A1   | AAAA1   | 2009-09-26 | N1    |
    | ZB20090926002 | A2   | AAAA2   | 2009-09-26 | N2    |
    +---------------+------+---------+------------+-------+
    2 rows in set (0.00 sec)mysql> insert into zbbook(name,content,lastTime,state) values('A3','AAAA3',CURDATE(),'N3');
    Query OK, 1 row affected (0.03 sec)mysql> select * from zbbook;
    +---------------+------+---------+------------+-------+
    | zbSerial      | name | content | lastTime   | state |
    +---------------+------+---------+------------+-------+
    | ZB20090926001 | A1   | AAAA1   | 2009-09-26 | N1    |
    | ZB20090926002 | A2   | AAAA2   | 2009-09-26 | N2    |
    | ZB20090926003 | A3   | AAAA3   | 2009-09-26 | N3    |
    +---------------+------+---------+------------+-------+
    3 rows in set (0.00 sec)mysql>
      

  5.   

    ACMAIN_CHM你好,where mid(zbSerial,3,8)=DATE_FORMAT(CURDATE(),'%Y%m%d')是什么意思啊,搞不懂?
      

  6.   


    你这种问法很难回答,因为不知道你是连 where 是什么意思都不了解,还是仅不了解 = 的作用,或者说函数。建议你贴出你自己的理解,然后让别人看一下对不对,或者指出你哪部分理解地不对。 函数部分,你可以参考一下官方文档。http://dev.mysql.com/doc/refman/5.1/zh/functions.html
    12. 函数和操作符
    12.1. 操作符
    12.1.1. 操作符优先级
    12.1.2. 圆括号
    12.1.3. 比较函数和操作符
    12.1.4. 逻辑操作符
    12.2. 控制流程函数
    12.3. 字符串函数
    12.3.1. 字符串比较函数
    12.4. 数值函数
    12.4.1. 算术操作符
    12.4.2. 数学函数
    12.5. 日期和时间函数
    12.6. MySQL使用什么日历?
    12.7. 全文搜索功能
    12.7.1. 布尔全文搜索
    12.7.2. 全文搜索带查询扩展
    12.7.3. 全文停止字
    12.7.4. 全文限定条件
    12.7.5. 微调MySQL全文搜索
    12.8. Cast函数和操作符
    12.9. 其他函数
    12.9.1. 位函数
    12.9.2. 加密函数
    12.9.3. 信息函数
    12.9.4. 其他函数
      

  7.   

    select IFNULL(max(right(zbSerial,3)),0) into n from zbbook where mid(zbSerial,3,8)=DATE_FORMAT(CURDATE(),'%Y%m%d');
    这句话是你写的,哈哈,我就截取了where后面的,不懂where后面的是什么意思,我试了,把where的部分去掉后(就是把where mid(zbSerial,3,8)=DATE_FORMAT(CURDATE(),'%Y%m%d')这句去掉)效果一样。