图书管理系统小作业

img

创建数据库

CREATE DATABASE `book_management`; 
USE book_management;

读者表

CREATE TABLE `book_management`.`reader` 
( `r_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '学号', 
`r_name` VARCHAR(11) NOT NULL COMMENT '姓名', 
`r_sex` CHAR(1) NOT NULL COMMENT '性别', 
`accumulative` INT(10) UNSIGNED DEFAULT 0 COMMENT '累计借书',
`violation` INT(5) DEFAULT 0 COMMENT '违规次数',
`department` VARCHAR(25) NOT NULL COMMENT '所在院系',
`r_studentid` INT(11) NOT NULL COMMENT '学号',
PRIMARY KEY (`s_id`) )ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_bin; 

书籍表

CREATE TABLE `book_management`.`book` 
( `b_id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '书籍编号',
 `p_date` DATE COMMENT '出版日期',
 `p_house` VARCHAR(25) COMMENT '出版社', 
 `Author` VARCHAR(25) NOT NULL COMMENT '作者',
  `name` VARCHAR(33) NOT NULL COMMENT '书名', 
  `test` VARCHAR(200) COMMENT  '简介',
   PRIMARY KEY (`b_id`) ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_bin; 

管理员表

CREATE TABLE `book_management`.`manager`
( `m_id` INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '管理员编号',
 `selery` INT COMMENT '工资',
  `m_name` VARCHAR(11) NOT NULL COMMENT '姓名', 
  `m_sex` CHAR(1) COMMENT '性别', `
  phone` INT(13) NOT NULL COMMENT '电话', 
  PRIMARY KEY (`m_id`) ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_bin; 

借阅关系表

CREATE TABLE `book_management`.`reder_book` (  
  `b_id` INT(11) UNSIGNED NOT NULL COMMENT '书籍号',
  `r_id` INT(11) NOT NULL COMMENT '读者编号',
  `b_date` DATETIME NOT NULL DEFAULT  CURRENT_TIMESTAMP COMMENT '借阅日期',
  `r_date` DATE  COMMENT '还书日期',
  PRIMARY KEY (`b_id`,·r_id`) 
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_bin;

书籍管理员关系表

CREATE TABLE `book_management`.`manager_book` 
( `m_id` INT(11) UNSIGNED NOT NULL COMMENT '管理员编号', 
`b_id` INT(11) UNSIGNED NOT NULL COMMENT '书籍编号', 
`addtime` DATE COMMENT '添加属性时间', `attr` CHAR(14) COMMENT '是否在管',
PRIMARY KEY (`m_id`, `b_id`) ); 

读者管理员关系表

CREATE TABLE `book_management`.`reder_manager` 
( `m_id` INT(11) UNSIGNED NOT NULL COMMENT '管理员id', 
`r_id` INT(11) UNSIGNED NOT NULL COMMENT '读者id', 
`rORb` INT(1) NOT NULL COMMENT '借出0,归还1', 
PRIMARY KEY (`m_id`, `r_id`) ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_bin; 

创建一个读者

INSERT INTO `reader`
(`r_name`,`r_sex`,`department`,`r_stduentid`)
VALUES('灯火酱','男','计算机','198212222');
-- 跟新一个读者
UPDATE `reader` SET `r_name`='XXX' r_sex='女' WHERE `r_name`= 'xxxx';
-- 删除
DELETE FROM `reader` WHERE `r_name`='XX';

创建图书

INSERT INTO `book_management`.`book` (`p_date`, `Author`, `name`, `test`) VALUES ('2021-05-10', '灯火酱', 'MySQL', '很简单'); 

UPDATE `book` SET `b_name`='XXX' `test`='xxxx' WHERE `b_name`= 'xxxx';
-- 删除图书
DELETE FROM `book_management`.`book` WHERE `b_id` = '1'; 

创建管理员

INSERT INTO `book_management`.`manager` (`selery`, `m_name`, `m_sex`, `phone`) VALUES ('3000', '麻贵', '男', '111111122'); 
UPDATE `book_management`.`manager` SET `m_sex` = '女' WHERE `m_id` = '1'; 
DELETE FROM `book_management`.`manager` WHERE `m_id` = '1'; 

提高查询速度,添加索引

ALTER TABLE `book_management`.`book` ADD KEY (`name` , `Author`);  


ALTER TABLE `book_management`.`manager` ADD INDEX (`m_sex` , `m_name`); 
-- m_sex 字段设为第一个索引,减少维护索引数量,通过select * from manager where `m_sex` in (男,女) where m_name = 'xxx' 

ALTER TABLE `book_management`.`reader` ADD INDEX (`r_sex` , `r_name` , `r_stduentid`); 



ALTER TABLE `book_management`.`reder_manager` ADD INDEX (`rORb`);

根据书名(MySQL)和借书人编号(1),管理员编号(1)借书

SET autocommit = 0;


-- 查询没有借出书的id
SET @b_id =
(SELECT b_id FROM `book` 
JOIN `manager_book` USING(`b_id`) WHERE  `book`.`name`= 'MySQL' AND `manager_book`.`attr` IS NULL LIMIT 1);


-- 插入 借阅表
INSERT INTO `reder_book`(`r_id`,`b_id`,b_date)
VALUES (
1,
@b_id,
NOW()
)ON DUPLICATE KEY UPDATE `b_date` = NOW();
-- 更新读者管理关系表
INSERT INTO `reder_manager`(`m_id`,`r_id`,`rORb`)VALUES(1,1,0)ON DUPLICATE KEY UPDATE `rORb`=0;
-- 更新书籍管理员关系表
INSERT INTO `manager_book`(`m_id`,`b_id`,`addtime`,`attr`)VALUES (
1,
@b_id,
NOW(),
'借出'
)ON DUPLICATE KEY UPDATE `addtime` = NOW();


COMMIT;


根据书号 和 reader id还书

如书号 1 读者编号2

SET autocommit = 0;
-- 更新为已归还
UPDATE `reder_manager` SET `rORb` = 1 WHERE  `m_id`=1 AND `r_id`=2;
## 更新attr字段为null表示未借出 
INSERT INTO `manager_book`(`m_id`,`b_id`,`addtime`,`attr`)VALUES (
1,
2,
NOW(),
NULL
)ON DUPLICATE KEY UPDATE `addtime` = NOW();
-- 更新reader阅读累计数
UPDATE `reader` SET `accumulative`=`accumulative`+1 WHERE `r_id` = 1;
COMMIT;

创建视图

功能查询所有已经借出书籍的读者和书籍信息

CREATE
    /*[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = { user | CURRENT_USER }]
    [SQL SECURITY { DEFINER | INVOKER }]*/
    VIEW `book_management`.`view_books_already_lent` 
    AS
(SELECT * FROM `book` JOIN `reder_book` USING(`b_id`) JOIN `reader` USING(`r_id`));

}]
[SQL SECURITY { DEFINER | INVOKER }]*/
VIEW book_management.view_books_already_lent
AS
(SELECT * FROM book JOIN reder_book USING(b_id) JOIN reader USING(r_id));


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值