使用多线两列组合成一个触发器在MySQL
问题描述:
以下是我的表模式:使用多线两列组合成一个触发器在MySQL
+--------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| LicenceID | int(11) | NO | PRI | NULL | |
| PassingRTO | varchar(4) | NO | | NULL | |
| DLNO | int(15) | YES | | NULL | |
| DateOfIssue | date | NO | | NULL | |
| DateOfExpiry | date | NO | | NULL | |
| COV | varchar(6) | NO | | NULL | |
| DateOfBirth | date | NO | | NULL | |
| BloodGroup | varchar(3) | YES | | NULL | |
| FullName | varchar(50) | NO | | NULL | |
| FathersName | varchar(50) | YES | | NULL | |
| Address | varchar(150) | NO | | NULL | |
| PinCode | int(6) | NO | | NULL | |
| IssuingAuth | int(7) | NO | | NULL | |
| IDIA | int(11) | YES | | NULL | |
| Valid | tinyint(4) | NO | | NULL | |
+--------------+--------------+------+-----+---------+-------+
什么我想要做的是,当我插入新行,我希望我的DLNO作为PassingRTO + LicenceID和IDIA作为PassingRTO + IssuingAuth。
我尝试使用相同的 -
create trigger insert_combined
after insert on LicencesDB
for each row
BEGIN
set new.IDIA = concat(new.PassingRTO, new.IssuingAuth);
set new.DLNO = concat(new.PassingRTO,new.LicenceID);
END;
,但给了我一个错误 -
ERROR 1362(HY000):新行的更新是不允许在后 触发ERROR 1193( HY000):未知的系统变量“DLNO”错误1064 (42000):您的SQL语法有错误;检查手册中 对应于你的MySQL服务器版本正确的语法在行使用 附近“END” 1
现在我有两个问题,我们可以做这个触发器使用多行?我们不能在创建表本身时组合两列吗?像col1 = col2 + col3?
在此先感谢!
答
不;吨忘记改变MySQL的触发器DELIMITER
DELIMITER $$
create trigger insert_combined
after insert on LicencesDB
for each row
BEGIN
set new.IDIA = concat(new.PassingRTO, new.IssuingAuth);
set new.DLNO = concat(new.PassingRTO,new.LicenceID);
END $$
DELIMITER ;
答
请检查该链接。如果您想对正在输入的当前行进行更新,则不能使用after子句。
检查http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html 当你想在你的触发器使用
SET NEW.col_name = value
,请注意,你不能用用这个动作之后,并且必须使用它的动作之前。
因此,这将工作:
CREATE TRIGGER sdata_insert BEFORE INSERT ON `sometable`
FOR EACH ROW
BEGIN
SET NEW.guid = UUID();
END
;
这样就不会工作:
CREATE TRIGGER sdata_insert AFTER INSERT ON `sometable`
FOR EACH ROW
BEGIN
SET NEW.guid = UUID();
END
;
而且你也许可以做到这一点的代码本身甚至进入数据库之前。
对不起,我对分隔符没有任何意见,请您解释一下吗? – Shashank 2013-04-22 09:33:13
对不起我的坏..忘了改变列的dataType!现在工作好了! :) – Shashank 2013-04-22 10:46:50