我正在尝试在phpMyAdmin中设置触发器。有两张桌子,一个是父母,一个是孩子。每次创建users
中的新用户时,我都希望在permissions
表中自动创建一行,其中{AI}从id
生成users
为user_id
}。 (permissions.user_id
是users.id
)
用户:
id email password
--------------------------------------
1 eric@test.com sdgsdhdfhs
2 john@test.com dfgsdgdfhg
3 mary@test.com plkdfjvjvv
权限:
index user_id allow_read allow_write allow_delete
-------------------------------------------------------------
1 1 1 0 1
2 2 1 1 1
3 3 0 0 0
我尝试过(没有成功):
INSERT
INTO permissions
(user_id)
VALUES
(IDENT_CURRENT('users'))
和
INSERT
INTO permissions
(user_id)
VALUES
(@@IDENTITY)
答案 0 :(得分:2)
要访问导致执行触发器的行的数据,您可以使用NEW
和OLD
别名。对于INSERT触发器,只有NEW
可用。对于DELETE触发器,只有OLD
可用。在UPDATE触发器中,您可以使用两者。它们的使用方式与表别名相同(例如NEW.id
/ OLD.id
)。
给出父表和子表如下:
create table parent_table(
id int auto_increment primary key,
pdata varchar(50)
);
create table child_table(
id int auto_increment primary key,
parent_id int not null,
cdata varchar(50) default '',
foreign key (parent_id) references parent_table(id)
);
插入父行时插入子行:
create trigger insert_parent
after insert on parent_table
for each row
insert into child_table(parent_id)
values (new.id);
要删除所有相关子行,请删除父行:
create trigger delete_parent
before delete on parent_table
for each row
delete from child_table
where parent_id = old.id;
演示:http://rextester.com/EOW74217
但是,如果使用ON DELETE CASCADE
foreign key (parent_id) references parent_table(id) on delete cascade
删除父行时,将删除所有相关子行而不触发。