如何创建一个 SQL 触发器,在另一个表上的活动之后更新一个表?

时间:2021-03-20 01:54:25

标签: mysql sql

create schema tr_sp_lab;

use tr_sp_lab;

create table Account (
ACC_NUM varchar(8) not null,
ACC_TYPE char(2) not null,
CUS_NAME varchar(45),
BALANCE decimal(10,2),
constraint Account_pk primary key(ACC_NUM)
);

create table Transactions (
TRANS_ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
ACC_NUM varchar(8) not null,
AMOUNT decimal(10,2),
TRANS_TYPE char(1),
constraint Transactions_fk foreign key(ACC_NUM) references Account(ACC_NUM)
);

create table DELETED_ACCOUNTS (
ACC_NUM varchar(8) not null,
ACC_TYPE char(2) not null,
CUS_NAME varchar(45),
BALANCE decimal(10,2),
CLOSED_DATE datetime,
constraint Deleted_Accounts_pk primary key(ACC_NUM)
);

INSERT INTO ACCOUNT VALUES
('A1', 'SA', 'Alex', 1000.0),
('A2', 'SA', 'Bob', 500.0),
('A3', 'FD', 'Alex', 3000.0),
('A4', 'SA', 'Cathy', 750.0),
('A5', 'SA', 'Daniel', 600.0),
('A6', 'FD', 'Cathy', 2000.0),
('A7', 'FD', 'Eagan', 1000.0),
('A8', 'SA', 'Eagan', 500.0),
('A9', 'SA', 'Alex', 550.0);

INSERT INTO TRANSACTIONS(ACC_NUM, AMOUNT, TRANS_TYPE) VALUES
('A1', 1000.0, 'D'),
('A2', 500.0, 'D'),
('A3', 1000.0, 'D'),
('A3', 1000.0, 'D'),
('A3', 1000.0, 'D'),
('A4', 500.0, 'D'),
('A4', 500.0, 'D'),
('A4', 250.0, 'W'),
('A5', 600.0, 'D'),
('A6', 1000.0, 'D'),
('A6', 500.0, 'D'),
('A6', 500.0, 'D'),
('A7', 1000.0, 'D'),
('A8', 500.0, 'D'),
('A9', 550.0, 'D');

#Attempted trigger code below

DELIMITER $$
create trigger account_update
after insert on transactions
for each row
begin
    if trans_type='W' then
        insert into account values(
        new.acc_num, new.acc_type, new.cus_name, new.balance - amount
        );
     elseif trans_type='D' then
        insert into account values(
        new.acc_num, new.acc_type, new.cus_name, new.balance + amount
        );
    end if;
end $$
DELIMITER ;

嗨,所以我想创建一个触发器,当客户进行交易时触发,即在交易表的 TRANS_TYPE 中存入或提取由“D”和“W”表示的金额。触发器应更新相应帐户的余额列。

当一笔金额存入账户时,对应账户的余额 帐户表中的数字应增加该金额。

同理,取款时,对应账号的余额 应减少提款金额。

谢谢!

1 个答案:

答案 0 :(得分:1)

DELIMITER $$
create trigger account_update
after insert on transactions
for each row
begin

    declare curr_balance decimal(10,2);
    select balance INTO curr_balance from account where acc_num=new.acc_num;

    if new.trans_type='W' then
        update account set balance = curr_balance - new.amount where acc_num=new.acc_num;
    elseif new.trans_type='D' then
        update account set balance = curr_balance + new.amount where acc_num=new.acc_num;

    end if;
end $$
DELIMITER ;

这是我对我的问题的回答