本系列MySQL 基础教程通过“问题-代码”的方式介绍各类方法,每篇设置2个MySQL综合问题,并给出解决方案。
问题1
现有一个图书借阅 管理系统的数据库db_book, 其包含一个记录图书借阅信息的借阅表tb_book, 该表包含的字段有 借阅号 (bno) 、图书名 (bname)、图书类型(btype)、出版社(publisher)、借出日期 (1date)、图书价格 (price) 和图书简介 (desc1) 。请按要求使用 SQL语句完成下列操作。
- 将借阅表中图书名“MySQL程序设计”的价格上调至 42 元。
- 在数据库dd_book中创建一个视图v_book, 要求该视图显示借阅表中出版社为“高等教育出版社”的全部图书借阅 信息。
3)查询图书类型为“计算机”的图书名称、出版社和图书价格。 - 将借阅表中的图书简介(desc1) 字段删除, 以简化该表。
- 在当前系统中新建一个名为 client的用户, 主机名为localhost并为其授予借阅表中借阅号(bno)字段和图书名 (bname) 字段的select权限。
问题1代码
#【1】
update db_book.tb_book set price=42 where bname="MySQL程序设计";
#【2】
create view v_book as select bno,bname,btype,publisher,ldate,price,descl feom tb_book where publisher="高等教育出版社";
#【3】
select bname, publisher, price from tb_book where btype="计算机";
#【4】
alter table tb_book drop column desc1;
#【5】
create user 'client'@'localhost';
grant select(bno, bname) on tb_book to 'client'@'localhost' with grant option;
问题2
- 请创建一个名为tri_type的触发器, 在插入新的借阅记录时, 如果借出日期为空, 就把它设置为当前日期。
- 请创建一个名为sp_counter的存储过程, 用于计算借阅表tb_book的图书借阅记录数, 并返回该记录数。
问题2代码
#【1】
DELIMITER $$
CREATE TRIGGER tri_date BEFORE insert ON tb_book FOR EACH ROW
BEGIN
IF(ISNULL(NEW.ldate)) THEN
set NEW.ldate=curdate();
END IF;
END $$
DELIMITER ;
#【2】
DELIMITER $$
CREATE PROCEDURE sp_counter(out rows INT)
BEGIN
DECLARE bid INT;
DECLARE FOUND BOOLEAN DEFAULT TRUE;
DECLARE cur_bid CURSOR FOR
SELECT bno FROM tb_book;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET FOUND=FALSE;
SET rows =0 ;
OPEN cur_bid;
FETCH cur_bid INTO bid;
WHILE FOUND DO
SET rows =rows +1;
fetch cur_bid INTO bid;
END WHILE;
CLOSE cur_bid;
END $$
DELIMITER ;