是否可以为表的插入和更新事件触发mysql触发器?
我知道我可以做到以下几点
CREATE TRIGGER my_trigger
AFTER INSERT ON `table`
FOR EACH ROW
BEGIN
.....
END //
CREATE TRIGGER my_trigger
AFTER UPDATE ON `table`
FOR EACH ROW
BEGIN
.....
END //
Run Code Online (Sandbox Code Playgroud)
但我该怎么办
CREATE TRIGGER my_trigger
AFTER INSERT ON `table` AND
AFTER UPDATE ON `table`
FOR EACH ROW
BEGIN
.....
Run Code Online (Sandbox Code Playgroud)
有可能,还是我必须使用2个触发器?两者的代码相同,我不想重复它.
在我的数据库中,我有一个Employee具有递归关联的表(员工可以是其他员工的老板):
create table if not exists `employee` (
`SSN` varchar(64) not null,
`name` varchar(64) default null,
`designation` varchar(128) not null,
`MSSN` varchar(64) default null,
primary key (`ssn`),
constraint `fk_manager_employee` foreign key (`mssn`) references employee(ssn)
) engine=innodb default charset=latin1;
Run Code Online (Sandbox Code Playgroud)
mysql> describe Employee;
+-------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| SSN | varchar(64) | NO | PRI | NULL | |
| name | varchar(64) | YES | | NULL | …Run Code Online (Sandbox Code Playgroud) 我使用以下触发器来更新mysql 5.0.7中另一个数据库中的用户表创建触发器没有错误,但是在更新第一个数据库中的用户表时触发器不起作用.有什么建议?
DELIMITER $$
DROP TRIGGER IF EXISTS after_update_user;
CREATE TRIGGER after_update_user;
AFTER UPDATE ON db_test.user FOR EACH ROW;
BEGIN
UPDATE TABLE db_testplus.user;
SET name = NEW.name;
WHERE id = NEW.id;
END
$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
我也使用这个代码没有分号但仍然相同
DELIMITER $$
DROP TRIGGER IF EXISTS after_update_user
CREATE TRIGGER after_update_user
AFTER UPDATE ON db_test.user FOR EACH ROW
BEGIN
UPDATE TABLE db_testplus.user
SET name = NEW.name
WHERE id = NEW.id
END;
$$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
最后有效的代码
delimiter |
DROP TRIGGER IF EXISTS after_update_user|
CREATE TRIGGER after_update_user …Run Code Online (Sandbox Code Playgroud)