如何编写一个触发器来插入和更新唯一的varchar字段.....?

时间:2012-02-06 09:06:12

标签: mysql triggers

我有一个名为contact的表:

Create table contact (
    Contact_ID int PK NOT NULL,
    Name varchar(20),
    MMS_Contact_ID varchar(10) NOT NULL
)

当我插入前两行Contact_IDName时,我想自动更新第三行(MMS_Contact_ID)。像这样:

contact_ID    Name     MMS_Contact_ID
--------------------------------------           
1               A        MMSC000001

当插入第二条记录(id = 2和Name = B)时,怎么办? MMS_Contact_ID会自动更新为MMSC000002吗?

我认为触发器可以帮助我解决这个问题,但是如何?

2 个答案:

答案 0 :(得分:0)

这样的事情:

create trigger trupdcont before insert on contact for each row

set new.MMS_Contact_ID := 'MMSC' + LPAD(convert(varchar, new.Contact_ID), 6, '0');

在插入之前,触发器会将max contact_idupdate第三列检查为"MMSC" + max(contact_id)+1(由LPAD指定的跟踪零)。

答案 1 :(得分:0)

调整@ aF的答案,我认为select是a)不必要的b)竞争条件,所以:

create trigger trupdcont after insert on contact for each row
set new.MMS_Contact_ID := 'MMSC' + LPAD(convert(varchar, new.contact_ID), 6, '0');

AFTER INSERT触发器已经具有自动递增ID