MySQL custom primary key generator

前端 未结 3 1833
梦如初夏
梦如初夏 2021-01-27 04:14

I have written an invoice module for our reservation system.

So when I create a new invoice, I automatically generate a primary key through MySQL.

However for th

相关标签:
3条回答
  • 2021-01-27 04:35

    You can make two fields in your, year and id.

    Make one primary key on both fields, giving id the auto_increment option. For each unique value of year, id will be counting up. For example:

    2012    1
    2012    2
    2012    3
    2013    1
    

    And you can concat them when selecting: SELECT CONCAT(year,id) AS primary FROM table

    Inserting will be:

    INSERT INTO table SET year = YEAR(NOW())

    you don't have to specify id.

    0 讨论(0)
  • 2021-01-27 04:35

    You should use a procedure or a trigger. The particular query that builds your newInvoiceId should be something like this:

    SELECT CONCAT(YEAR(now()),count(*)+1) as newInvoiceId
    FROM table
    WHERE InvoiceId like CONCAT(YEAR(now()),'%');
    

    The only part where i'm not 100% confident is the CONCAT(YEAR(now()),'%')

    0 讨论(0)
  • 2021-01-27 04:42

    A warning against naive year/week like 2012/01. YEAR(NOW()) being wrong.

    Better use YEARWEEK(NOW()). Gives a number like 201201

    The following shows that year is not necessarily year-of-week-number:

    mysql> SELECT YEARWEEK('1987-01-01');
           -> 198652
    

    For the rest having year and week in one single int, is in fact simpler.

    int year = yearweek / 100;
    int week = yearweek % 100;
    
    0 讨论(0)
提交回复
热议问题