SQL触发器INSERT AFTER
问题描述:
我试图在phpMyAdmin中设置触发器。有两张桌子,一个父母,一个孩子。每次创建users
中的新用户时,我想要在permissions
表中自动创建一行,其中(AI)生成的id
从users
为user_id
。 (permissions.user_id
是users.id
一个FOREIGH键)SQL触发器INSERT AFTER
用户:
id email password
--------------------------------------
1 [email protected] sdgsdhdfhs
2 [email protected] dfgsdgdfhg
3 [email protected] 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)
答
要访问导致触发器执行的行的数据,可以使用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);
要删除所有相关的子行wehen父行被删除:
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
所有相关的子行会没有触发器被删除定义外键,当你删除父行删除触发器是没有必要的。
用你真正使用的数据库标记你的问题。你有SQL Server结构,但是有一个MySQL标签。 –
如果是MySQL,可以使用'NEW.id'来访问生成的ID。 –
@GordonLinoff MariaDB/InnoDB – Rick