MySQL数据库应用与管理项目化教程(微课版)(何小苑)课后习题答案.docx
《MySQL数据库应用与管理项目化教程(微课版)(何小苑)课后习题答案.docx》由会员分享,可在线阅读,更多相关《MySQL数据库应用与管理项目化教程(微课版)(何小苑)课后习题答案.docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MySQL数据库应用与管理工程化教程(微课版) 课后习题答案工程一初始数据库应用系统1、简述数据库的特征。1)数据结构化(2)数据共享性,冗余度低,易扩充(3)数据独立性高CREATE DATABASE db_test;或 CREATE SCHEMA 数据库名;mysqlCREATE SCHEMA db_test;应用二:创立指定字符集的数据库CREATE DATABASE 数据库名DEFAULT ( CHARACTER SET=字符集标识 | CHARSET 字符集标识;如:mysqlCREATE DATABASE db_test2 charset=utf8mb4;或 CREATE DATA
2、BASE db_test2 character set=utf8mb4;应用三:创立数据库前判断是否存在同名数据库如:mysqlCREATE DATABASE IF NOT EXISTS db_test3;2、如何查看当前数据库的各类信息、?查看当前服务器包含的数据库:SHOW DATABSES;杳看当前数据库:SELECT DATABASE();mysqldelimiter/ mysqlCREATE PROCEDURE p_insGoods(IN gname VARCHAR(50),IN sid intJN gtype char(20), IN gbanner VARCHAR(255),IN
3、 gintroduce varchar(255),IN gprice decimal(ll,2),IN gnum int(10) UNSIGNED,IN gmemo varchar(300) BEGININSERTINTOgoods(goods_name,supplier_id,goods_type,banner,introduce,unit_price,amount,goods_memo) VALUES (gname,sid,gtype,gbanner,gintroduce,gprice,gnum,gmemo); END/ mysqldelimiter; mysqlcall pJnsGood
4、/嘉顿消化饼零食?香甜脆?帮助消化的饼干。7.9,50消化饼) 删除存储过程 mysqldelimiter/ mysqlCREATE PROCEDURE p_delGoods(IN gid int) BEGINDELETE FROM goods WHERE id=gid; END/ mysqldelimiter; mysqlCALL p_delGoods 更新存储过程: mysqldelimiter/ mysqlCREATE PROCEDURE p_updGoods(IN gid INTJN gnum int(10) UNSIGNED) BEGINUPDATE goods SET amount
5、=gnum WHERE id=gid END/ mysqldelimiter;mysqlCALL p_updGoods(2,300);4、对顾客表customer,分别建立按顾客id、按出生日期birthday查询的函数,并调用查询 函数; 按顾客id查询的存储过程: mysqldelimiter/ mysqlCREATE PROCEDURE p_queryBylD(IN cid INT) BEGINselect * from customer where id=cid; END/ mysqldelimiter;mysqlcall p_queryBylD(2) 按顾客出生日期查询的存储过程:
6、mysqldelimiter/ mysqlCREATE PROCEDURE p_queryBycBirthday(IN cbirthday DATETIME) BEGINselect * from customer where birthday=cbirthday COLLATE utf8mb4_0900_ai_ci;END/mysqldelimiter;mysqlcall p_queryBycBirthday(1972-07-05,);5、编写存储过程,添加异常处理,以防出现系统错误:对商品表,建立插入数据函数,假设 商品号的输入重及值,测撤销该行数据的插入,并退出程序的执行。测试调用存储过
7、程。mysqlDELIMITER/mysqlCREATE PROCEDURE handlerDupkeyDemo(gid int,gname VARCHAR(50),sid int,gtype char(20),gprice decimal(ll/2),gnum int(10) UNSIGNED)BEGINDECLARE EXIT HANDLER FOR SQLSTATE 23000 SET info=重复键退出,;BEGINSET x=l;INSERT INTOgoods(id,goods_name,supplierjd,goods_type,unit_price,amount)VALUES
8、(gid,gname,sid,gtype,gprice,gnum);SET x=2;END;END/mysqlDELIMITER;mysqlhandlerDupkeyDemo(ll)嘉顿夹心饼干,3零食10);mysqlSELECT x,info;6、编写存储过程,添加异常处理,以防出现系统错误:对商品表,建立插入数据函数,假设 供应商编号的输入值为非空且未参照供应商表的供应商号,测撤销该行数据的插入,程序继 续往下执行。测试调用存储过程。mysqlDELIMITER/mysqlCREATE PROCEDURE handlerForeignkeyDemo(gname VARCHAR(50),s
9、id int,gtype char(20),gprice decimal(ll,2),gnum int(10) UNSIGNED)BEGINDECLARE CONTINUE HANDLER FOR 1452 SET info=外键值没有参照主键表的值,继续 执行;BEGINSET x=l;INSERT INTOgoods(goods_name,supplier Jd,goods_type,unit_price,amount)VALUES(gname,sid,gtype,gprice,gnum);SET x=2;END;END/mysqlDELIMITER;mysqlCALL卜己询6汴08N0丫
10、口0010(嘉顿夹心饼干5零食,5,10);mysqlSELECT x,info;7、创立带参数的存储过程p_goods,供应商号为参数,求出该供应商供应商品的种类数量, 判断该种类数量高低,种类数量高于10,那么显示交易频繁;否那么高于5的显示“交易往 来一般”,否那么显示交易不多,测试调用该过程。mysqlSET GLOBAL log_bin_trust_function_creators=l;mysqlDELIMITER/mysqlCREATE FUNCTION p_goods(sid I NT)RETURNS VARCHAR(20)BEGINDECLARE gnum int;DECLA
11、RE tip VARCHAR(20);SELECT COUNT(goods_name) INTO gnum FROM goods WHERE supplier_id=sid;IF gnum10 THEN RETURN 交易频繁;ELSEIF gnum5 THEN RETURN 交易往来一般;ELSE RETURN 交易不多;END IF;END/mysqlDELIMITER;mysqlSET num=p_goods(2);mysqlSELECT num;工程八创立触发器1、对staffer表建立一个插入触发器tr_stafferlnsert,当向职员表插入数据时,触发该触发器, 提示“某某某的
12、信息添加成功! ”。例如,当插入一个叫“李丽”的员工时,提示“李丽的 信息添加成功!”mysqldelimiter/mysqlCREATE TRIGGER tr_stafferlnsertAFTER INSERT ON stafferFOR EACH ROWBEGINDECLARE msg varchar(50);SELECT CONCAT(staff_name,的信息添加成功! )into msg from staffer where id=NEW.id;SIGNAL SQLSTATE 23000 SET MESSAGE_TEXT=msg;END /mysqldelimiter;mysqlI
13、NSERT INTO staffer(username,password,dept_id,staff_name,sex) values(lir,123456,2,李 丽2、对item表,建立一个插入触发器tjitemlnsert,可以联动修改orders表中的信息。执行 插入数据到item表前,先检查order表中有没有该订单信息,当orders表中还没有对应的 订单信息时,先添加一条对应的订单信息,当已有订单信息时,更新该订单的对应的应付金 额。(题目有修改)mysqldelimiter/mysqlCREATE TRIGGER tr_itemlnsertBEFORE INSERT ON it
14、emFOR EACH ROWBEGINIF NOT EXISTS(SELECT * FROM orders WHERE id=NEW.order_id) THENINSERTINTOorders(id,customer_id,create_time,amount,status)VALUES(NEW.order_id,2,CURRENT_DATE,NEW.total_price,0);ELSE UPDATE orders SET amount=amount+NEW.total_price WHERE id=NEW.order_id; END IF;END / mysqldelimiter;mys
15、qlINSERT INTO item(order_id,goods_id,supplier_id,quantity,total_price) VALUES (62,2,3,9)mysqlINSERT INTO item(order_id,goodsjd,suppliejid,quantity,total_price) VALUES (632,2,7)3、对item表,建立一个修改触发器trJtemUpdate,当修改item表中的单个订单商品总额 时,可以联动修改。rders表中的对应订单的应付金额。(题H有修改)mysqldelimiter/mysqlCREATE TRIGGER tr_it
16、emUpdateAFTER UPDATE ON itemFOR EACH ROWBEGINUPDATE orders SET amount=amount+NEW.total_price-OLD.total_price WHERE id=NEW.order_id;END / mysqldelimiter;mysqlUPDATE item set total_price=8 WHERE id=14;4、对item表,建立一个删除触发器tr_itemDelete,当删除item表中的记录时,可以联动 修改orders表中对应订单的应付金额。(题目有修改) mysqldelimiter/ mysqlC
17、REATE TRIGGER trJtemDeleteAFTER DELETE ON itemFOR EACH ROWBEGINIF NOT EXISTS(SELECT * FROM item WHERE order_id=OLD.order_id) THEN DELETE FROM orders WHERE id=OLD.order_id;ELSEUPDATE orders SET amount=amount-OLD.total_price WHERE id=OLD.order_id;END IF;END/ mysqldelimiter;mysqlDELETE FROM item WHERE
18、id=34;工程九索引和事务1、简述MySQL数据库的索引类型和应用场景。MySQL的索引类可分为:(1)普通索引,可以在条件查询频繁的字段或排序字段上建立普通索引,加快检索速度。(2)唯一索引,通常在不允许重复的字段上建立唯一索引,防止重复值的录入。(3)主键索引,在表创立主键时自动建立,是唯一索引的特殊类型,主键索引字段不允许 空值。(4)复合索引,需要在多个字段组合建立索引时建立复合索引。(5)全文索引,在CHAR、VARCHAR或TEXT类型的列上创立,主要用于文章等大量文本文 字中检索字符串信息。(6)空间索引,在空间数据类型字段建立的索引,如POINT等,索引不允许空值。空间索 引
19、只能在MylSAM存储引擎的表中创立.2、列举各类索引的创立语句。(1)创立普通索引:CREATE INDEX index_name ON table_name(col_name ASC| DESC);如:CREATE INDEX ix_goodsname ON goods(goodsName);创立唯一索引:CREATE UNIQUE INDEX index_name ON table_name(索弓I 字段列表); 如:CREATE UNIQUE INDEX unq_username ON staffer(username);创立复合索引:CREATE INDEX ix_did_staff
20、er ON goods(dept_id,birthday DESC);(2)使用ALTER TABLE语句创立索引ALTER TABLE 表名 ADD UNIQUE | FULLTEXT | SPATIAL INDEX | KEY index_name(col_name(length) ASC|DESC1)PRIMARY KEY (主键索引)mysql ALTER TABLE table_name ADD PRIMARY KEY (column)2)UNIQUE(唯一索引)ALTER TABLE table_name ADD UNIQUE column)3)INDEX(普通索引)ALTER T
21、ABLE table_name ADD INDEX index_name ( column )4)FULLTEXT(全文索引)ALTER TABLE table_name ADD FULLTEXT (column )5)多列索引(组合索引)ALTER TABLE table_name ADD INDEX index_name ( columnl, column2)3、列举索引文件信息的查看语句和索引效果的查看方法。查看索引信息:SHOW INDEX FROM表名;索引效果查看方法:SHOW INDEX FROM表名G如:查看 staffer 表中的索引:SHOW INDEX FROM staf
22、ferG4、简述事物的AQD特性。事务是由有限个数据库操作序列组成,但并不是任意的数据库操作序列都能成为事务,为了 保证数据的一致性和有效性,一般来说,事务必须具备以下4个特征:(1)原子性(Atomicity,或称不可分割性):一个事务(transaction)中的所有操作,要么 全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被 回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。(2) 一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性没有被破 坏。数据库在事务的操作下总是从一个致的状态到另个致的状态,不允
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MySQL 数据库 应用 管理 项目 教程 微课版 课后 习题 答案
限制150内