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”表示的金额。触发器应更新相应帐户的余额列。
当一笔金额存入账户时,对应账户的余额 帐户表中的数字应增加该金额。
同理,取款时,对应账号的余额 应减少提款金额。
谢谢!
答案 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 ;
这是我对我的问题的回答