第八次作业

CREATE DATABASE bank; 
USE bank;
CREATE TABLE account(  
account_no INT AUTO_INCREMENT PRIMARY KEY,
account_name VARCHAR(10) NOT NULL,
balance INT UNSIGNED 
);

SHOW TABLES;

INSERT INTO account VALUES(NULL,'李三',1000);
INSERT INTO account VALUES(NULL,'王五',1000);
SELECT * FROM account;

DELIMITER @@
CREATE PROCEDURE tran_proc(IN from_account INT,
                          IN to_account INT ,
                          IN money INT)       
BEGIN 
   DECLARE CONTINUE HANDLER FOR 1690 
       BEGIN
        SELECT '余额小于0'信息;
        ROLLBACK;
END;
START TRANSACTION;  
UPDATE account SET balance = balance + money 
WHERE account_no = to_account;              
UPDATE account SET balance = balance - money 
WHERE account_no = from_account ;           
COMMIT;
END@@


DELIMITER @@
CALL tran_proc(1,2,800);
SELECT * FROM account;

CALL tran_proc(1,2,800);
SELECT * from account;


DELIMITER @@
CREATE PROCEDURE save_p1_proc()
BEGIN 
 DECLARE CONTINUE HANDLER FOR 1062
   BEGIN 
   ROLLBACK TO b ;
   END;
   START TRANSACTION;
    INSERT INTO account VALUES (null,'赵四',1000);
    SAVEPOINT b ;
     INSERT INTO account VALUES(last_insert_id(),'钱六',1000);
       COMMIT;
       END@@
       
       DELIMITER;
       CALL save_p1_proc();
       SELECT * FROM account;
       
       
       DELETE  FROM account WHERE account_no = 3;
       SELECT * FROM account;
   
   
   DELIMITER @@
CREATE PROCEDURE save_p2_proc()
BEGIN 
 DECLARE CONTINUE HANDLER FOR 1062
   BEGIN 
   ROLLBACK TO b ;
   ROLLBACK ;
   END;
   START TRANSACTION;
    INSERT INTO account VALUES (null,'赵四',1000);
    SAVEPOINT b ;
     INSERT INTO account VALUES(last_insert_id(),'钱六',1000);
       COMMIT;
       END@@
       
       DELIMITER;
       CALL save_p2_proc();
       SELECT * FROM account;


b站链接 https://www.bilibili.com/video/BV1UN4y1D7io/?spm_id_from=444.41.list.card_archive.click

posted @ 2023-11-12 22:50  邢加梁  阅读(13)  评论(0编辑  收藏  举报