SQL触发器INSERT AFTER

时间:2017-05-06 15:36:03

标签: sql triggers phpmyadmin mariadb

我正在尝试在phpMyAdmin中设置触发器。有两张桌子,一个是父母,一个是孩子。每次创建users中的新用户时,我都希望在permissions表中自动创建一行,其中{AI}从id生成usersuser_id }。 (permissions.user_idusers.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)

1 个答案:

答案 0 :(得分:2)

要访问导致执行触发器的行的数据,您可以使用NEWOLD别名。对于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

删除父行时,将删除所有相关子行而不触发。

演示:http://rextester.com/CWB43482