Trigger in My SQL

karthik80c
karthik80c used Ask the Experts™
on
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.
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
ste5anSenior Developer

Commented:
Please rephrase your question. Post a concise and complete example. Include sample data..
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

Author

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.
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?

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial