Go Back   CodingForums.com > :: Server side development > MySQL

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 10-08-2012, 03:58 PM   PM User | #1
nani_nisha06
Regular Coder

 
Join Date: Oct 2012
Location: mother land --india
Posts: 159
Thanks: 37
Thanked 2 Times in 2 Posts
nani_nisha06 is an unknown quantity at this point
Need help on creating ticket ID

Hi friends,

I want to create a field in the MYSQL which should be auto increment and have started from ABCD000001 and so on.......


Please help me !!!


Regards,
Nani

Last edited by nani_nisha06; 10-09-2012 at 09:18 AM..
nani_nisha06 is offline   Reply With Quote
Old 10-08-2012, 05:19 PM   PM User | #2
Fou-Lu
God Emperor


 
Fou-Lu's Avatar
 
Join Date: Sep 2002
Location: Saskatoon, Saskatchewan
Posts: 15,752
Thanks: 4
Thanked 2,468 Times in 2,437 Posts
Fou-Lu is a name known to allFou-Lu is a name known to allFou-Lu is a name known to allFou-Lu is a name known to allFou-Lu is a name known to allFou-Lu is a name known to all
You can't, auto increment only works on numbers. They are literally surrogate keys.
Perhaps a better approach would be to use a char(36) and run against a UUID(). UUID will generate a 128bit hex encoded string. The documentation suggests is uses a UUID version 2, but it also specifies it uses random numbers on any OS that isn't freebsd based. Otherwise it is random replaced which is more appropriate of a version 4, even though it doesn't resign it as a version 4 UUID.
UUID is supposed to give you global unique numbers, but with the above mention that doesn't actually guarantee it now. Since its the key, it will inform you if it fails and you can try again.
Fou-Lu is offline   Reply With Quote
Old 10-08-2012, 06:51 PM   PM User | #3
nani_nisha06
Regular Coder

 
Join Date: Oct 2012
Location: mother land --india
Posts: 159
Thanks: 37
Thanked 2 Times in 2 Posts
nani_nisha06 is an unknown quantity at this point
Quote:
Originally Posted by Fou-Lu View Post
You can't, auto increment only works on numbers. They are literally surrogate keys.
Perhaps a better approach would be to use a char(36) and run against a UUID(). UUID will generate a 128bit hex encoded string. The documentation suggests is uses a UUID version 2, but it also specifies it uses random numbers on any OS that isn't freebsd based. Otherwise it is random replaced which is more appropriate of a version 4, even though it doesn't resign it as a version 4 UUID.
UUID is supposed to give you global unique numbers, but with the above mention that doesn't actually guarantee it now. Since its the key, it will inform you if it fails and you can try again.
Fou-Lu,

Also suggest on the below thread.


http://www.codingforums.com/showthread.php?t=275489

Regards,
Nani
nani_nisha06 is offline   Reply With Quote
Old 10-08-2012, 08:44 PM   PM User | #4
Old Pedant
Supreme Master coder!

 
Old Pedant's Avatar
 
Join Date: Feb 2009
Posts: 23,569
Thanks: 62
Thanked 4,058 Times in 4,027 Posts
Old Pedant is a name known to allOld Pedant is a name known to allOld Pedant is a name known to allOld Pedant is a name known to allOld Pedant is a name known to allOld Pedant is a name known to all
But another answer is to simply use TWO fields and then a VIEW when you SELECT from the table.

For example:
Code:
CREATE TABLE tickets_base (
    prefix CHAR(4),
    ticketcount INT AUTO_INCREMENT,
    name VARCHAR(50),
    PRIMARY KEY ( prefix, ticketcount )
);
And then
Code:
CREATE VIEW tickets 
AS
SELECT CONCAT(prefix, RIGHT( CONVERT( 1000000 + ticketcount, CHAR ), 6 ) ) AS ticket, name
FROM tickets_base;
So when you add records, you always use INSERT into ticket_base, for example
Code:
INSERT INTO tickets_base ( prefix, ticketcount, name )
VALUES( 'ABCD', NULL, 'Abigail Adams' );
But when you GET a record you always SELECT from the view:
Code:
SELECT * FROM tickets WHERE name LIKE 'Abigail%'
And that will return you
Code:
ABCD000073  Abigail Adams
__________________
An optimist sees the glass as half full.
A pessimist sees the glass as half empty.
A realist drinks it no matter how much there is.
Old Pedant is online now   Reply With Quote
Users who have thanked Old Pedant for this post:
nani_nisha06 (10-09-2012)
Old 10-09-2012, 09:15 AM   PM User | #5
nani_nisha06
Regular Coder

 
Join Date: Oct 2012
Location: mother land --india
Posts: 159
Thanks: 37
Thanked 2 Times in 2 Posts
nani_nisha06 is an unknown quantity at this point
Old Pedant Sir,

The above procedure worked like a charm but, I did small change in the create table, As below.

Code:
CREATE TABLE tickets_base (
    prefix CHAR(4),
    ticketcount INT AUTO_INCREMENT,
    name VARCHAR(50),
    PRIMARY KEY ( prefix), KEY (ticketcount) 
);  

//Because You can have an auto-Incremental column that is not the PRIMARY KEY, as long as there is an index (key) on it:
nani_nisha06 is offline   Reply With Quote
Old 10-09-2012, 01:51 PM   PM User | #6
guelphdad
Super Moderator


 
guelphdad's Avatar
 
Join Date: Mar 2006
Location: St. Catharines, Ontario Canada
Posts: 2,629
Thanks: 4
Thanked 147 Times in 138 Posts
guelphdad will become famous soon enoughguelphdad will become famous soon enough
Your solution however is not as good as OP's solution.
with the two column primary key, you will only have to enter the info in the prefix column and the autoincrement will start at 1 and increase for each prefix so you will end up with

ABC 1
ABC 2
DEF 1
DEF 2
DEF 3
GHI 1

and for your solution you will just have the autoincrement column increase indefinitely, it won't start at 1 for each of your different values in the prefix column, whereas his will.
guelphdad is offline   Reply With Quote
Reply

Bookmarks

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 11:58 PM.


Advertisement
Log in to turn off these ads.