SQL 触发 INSERT AFTER

SQL trigger INSERT AFTER

我正在尝试在 phpMyAdmin 中设置触发器。有两个table,一个parent,一个child。每次在 users 中创建新用户时,我想在 permissions table 中自动创建一行,其中(AI)从 users 生成 id 作为user_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)

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

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