SQL 触发 INSERT AFTER
SQL trigger INSERT AFTER
我正在尝试在 phpMyAdmin 中设置触发器。有两个table,一个parent,一个child。每次在 users
中创建新用户时,我想在 permissions
table 中自动创建一行,其中(AI)从 users
生成 id
作为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)
要访问导致触发器执行的行的数据,您可以使用 NEW
和 OLD
别名。对于 INSERT 触发器,只有 NEW
可用。对于 DELETE 触发器,只有 OLD
可用。在 UPDATE 触发器中,您可以同时使用两者。它们的使用方式与 table 别名相同(例如 NEW.id
/ OLD.id
)。
给定一个parent和一个childtable如下:
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)
);
要在插入 parent 行时插入 child 行:
create trigger insert_parent
after insert on parent_table
for each row
insert into child_table(parent_id)
values (new.id);
要在删除 parent 行时删除所有相关的 child 行:
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
当您删除 parent 行时,所有相关的 child 行都将被删除而不触发。
我正在尝试在 phpMyAdmin 中设置触发器。有两个table,一个parent,一个child。每次在 users
中创建新用户时,我想在 permissions
table 中自动创建一行,其中(AI)从 users
生成 id
作为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)
要访问导致触发器执行的行的数据,您可以使用 NEW
和 OLD
别名。对于 INSERT 触发器,只有 NEW
可用。对于 DELETE 触发器,只有 OLD
可用。在 UPDATE 触发器中,您可以同时使用两者。它们的使用方式与 table 别名相同(例如 NEW.id
/ OLD.id
)。
给定一个parent和一个childtable如下:
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)
);
要在插入 parent 行时插入 child 行:
create trigger insert_parent
after insert on parent_table
for each row
insert into child_table(parent_id)
values (new.id);
要在删除 parent 行时删除所有相关的 child 行:
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
当您删除 parent 行时,所有相关的 child 行都将被删除而不触发。