SQL触发器插入后
我正在尝试在phpMyAdmin中设置触发器。有两个表,一个父表,一个子表。每次在SQL触发器插入后,sql,triggers,phpmyadmin,mariadb,Sql,Triggers,Phpmyadmin,Mariadb,我正在尝试在phpMyAdmin中设置触发器。有两个表,一个父表,一个子表。每次在users中创建新用户时,我想在permissions表中自动创建一行,其中包含从users生成的id作为用户id的(AI)。(permissions.id是users.id的外键) 用户: id email password -------------------------------------- 1 eric@test.com sdgsdhdfhs 2
users
中创建新用户时,我想在permissions
表中自动创建一行,其中包含从users
生成的id
作为用户id
的(AI)。(permissions.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
我试过(没有成功):
及
要访问导致执行触发器的行的数据,可以使用
NEW
和OLD
别名。对于插入触发器,只有“新建”可用。对于删除触发器,只有OLD
可用。在更新触发器中,可以同时使用这两种触发器。它们的使用方式与表别名相同(例如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;
演示:
但是,如果您使用删除级联上的定义外键,则不需要删除触发器
foreign key (parent_id) references parent_table(id) on delete cascade
删除父行时,所有相关的子行都将在不触发的情况下被删除
演示:要访问导致执行触发器的行的数据,可以使用NEW
和OLD
别名。对于插入触发器,只有“新建”可用。对于删除触发器,只有OLD
可用。在更新触发器中,可以同时使用这两种触发器。它们的使用方式与表别名相同(例如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;
演示:
但是,如果您使用删除级联上的定义外键,则不需要删除触发器
foreign key (parent_id) references parent_table(id) on delete cascade
删除父行时,所有相关的子行都将在不触发的情况下被删除
演示:用您真正使用的数据库标记您的问题。您有SQL Server结构,但有一个MySQL标记。如果是MySQL,您可以使用NEW.id
访问生成的id。@GordonLinoff-MariaDB/InnoDB@PaulSpiegel它说(在phpMyAdmin中)我的主人正在为MariaDB提供InnoDB表,但是你的方法奏效了,非常感谢!MariaDB是MySQL的分支。语法是一样的,比如99%用你真正使用的数据库标记你的问题。您有SQL Server结构,但有一个MySQL标记。如果是MySQL,您可以使用NEW.id
访问生成的id。@GordonLinoff-MariaDB/InnoDB@PaulSpiegel它说(在phpMyAdmin中)我的主人正在为MariaDB提供InnoDB表,但是你的方法奏效了,非常感谢!MariaDB是MySQL的分支。语法与99%相同