Trigger in My SQL

I have a website where the Users enter the product information by Single entry or through the batch upload of CSV file. In both cases the records get inserted to the same table which is in My SQL database.
The information is then retrieved and shown in the website too.  There is a product id column which has 20 characters. But when we are displaying it in the website we show only the first 10 records. As the next 10 are critical and is not displayed. Though the product ID is a unique column the first 10 characters are not unique. So I will be attaching product id +0001 when the information is displayed outside. So I prefer to insert a column in the existing table. The column will get update with product id +0001 on the first entry. Whenever there is a duplicate record gets inserted in the product id by matching the first 10 characters the sequence should be predicted +0002.
So I need a trigger and sequence code in mysql for this. Please help.
karthik80cAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

ste5anSenior DeveloperCommented:
Please rephrase your question. Post a concise and complete example. Include sample data..
0
Phil DavidsonCommented:
Is the product ID numeric or alphanumeric?  You want a trigger to fire on an insert to the table or an update to the table or both events?  When you say "attaching +0001," do you mean to append to the value of product ID four characters of "0001"?  I want to make sure you aren't talking about prepending it or mathematically adding the value of 0001 to the ID.

This gives information about creating triggers:

http://dev.mysql.com/doc/refman/5.0/en/create-trigger.html
0
karthik80cAuthor Commented:
Dear Phil
The product ID is alphanumeric.
The situation is like this

Product : Apple
Product ID : UID903456790090

Product : Orange
Product ID :UID903456790093

These two products have the first 10 character same.
I am displaying only the first 10 to the customer for some reason.
When I am displaying it if the customer calls in and says the product ID he will be able to say only the first 10
So my search string on the database will retrieve two records.
So am planning to attach a sequence to the product ID with 0001 for the first record and any duplicate product ID for the first 10 character will have it 0002. I will be creating a separate column for this sequence and while displaying it in the website I will be attaching them.
0
Phil DavidsonCommented:
There will be a third column have the 0001 and 0002 etc. values.  I don't think you want the trigger to fire on insert but not update.

Let's assume your table is called coolTable and the column for the 0001 and 0002 values is called appendVal.

create trigger coolEE AFTER INSERT on coolTable
for each row
SET new.appendVal = 
select LPAD('(select max(appendVal) from coolTable 
where new.ProductID = ProductID) + 1)', 4, '000')

Open in new window



Notes:
LPAD is a function based on the concept of "left padding" a numeric value with 0s.  This way you get the desired leading zeroes.

There is a max function which is an aggregate function.  This can be a problem with performance if you have a high workload on your database server.  Lots of triggers can degrade performance too.  So this is ok for a smaller environment.  But this wouldn't work for a high volume OLTP database.

ANSI_NULLS need to be set to off because the trigger relies on nulls participating in the arithmetic as zeroes.  Upon not finding an appendVal associated with the productID (e.g., the first insertion of a row with such a productID), the max function will return a null.  

I believe this satisfies what you want.  How do you like this response?
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
MySQL Server

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.