MySQL基础语法3

MySQL基础语法3

知识点:
1.xx是什么
2.xxz怎么用
3.为什么用xx

视图

视图是什么

视图是一个虚拟表。硬盘上存在的是实表,硬盘上不存在的是虚表。虚表是对实表中存在字段的映射。
在这里插入图片描述

怎么用视图?

视图在使用上就和正常的数据表一致。视图在mysql中拥有的实体表一致的地位

mysql> show tables;
+------------------+
| Tables_in_ishop1 |
+------------------+
| commodity        |
| commoditytype    |
| customer         |
| order            |
| view_sellset     |
+------------------+
5 rows in set (0.04 sec)

为什么用视图?

1.对复杂的sql语句进行分装。
2.对于数据库敏感信息的保护

视图是否能进行增删改?是否会影响实表?

视图的修改会影响实表的数据。
视图本身没有办法修改。

范式

什么是范式?

大家共同约定、共同遵守的规范。

什么是数据库设计的三大范式?

三大范式层层递进。下一个范式的满足意味着上一个范式也满足。

第一范式:保持每列的原子性。
第二范式:确保表中的每列都和主键相关。
ps: 一张数据表至少要有一个主键

第三范式:确保数据表中的每一列必须和主键直接相关,而不是间接相关。
ps: 一张数据表有且只有一个主键

触发器

什么是触发器?

是mysql提供的一种功能。
当你执行一句sql命令后,让mysql自动完成一件事情。

怎么用触发器?

场景:银行转账时,原来需要用事务执行两句sql命令。现在需要做到这边扣钱,那边自动加钱。

触发器创建语法四要素:
1.监视地点 (table) 基于表,表示对哪张表进行监控
2.监视事件(insert/updata/delete) 用来监视执行的语句
3.触发时间 (after/before) 在我执行我的命令后、之前执行我预设好的命令
在大多数场景下,先执行后执行没有区别。但是有例外存在。

4.触发事件 (insert/updata/delete)预设的让mysql执行的命令语句 可以使用多聚sql语句,捆绑在一起。多句sql使用分号隔开。

实现触发器之前,修改命令结束标识符,为了写end完成触发器,否则按下回车,在完成触发器前就开始执行命令了。
如果触发器写完,命令结束标识符却不改回来,触发器就不会发挥作用。

delimiter $
delimiter ;

触发器的应用?

写一个触发器 当新增一条订单的时候 自动从商品表的库存中扣去相应的订单数量

mysql> delimiter $
mysql> create trigger tri_1
    -> after insert on `order`
    -> for each row
    -> begin
    -> update commodity set c_num=c_num-new.o_num where c_id=new.o_cid;
    -> end$
Query OK, 0 rows affected (0.08 sec)

mysql> delimiter ;

存储过程

存储过程是什么?

能完成一定操作的一组SQL语句。操作:mysql提供的类似JAVA中的方法。

存储过程怎么用?

最简单存储过程的案例:查询商品表
mysql> delimiter $
mysql> create procedure pro_queryall()
    -> begin
    -> select * from commodity;
    -> end$
Query OK, 0 rows affected (0.03 sec)

mysql> delimiter ;
mysql> call  pro_queryall();
具有传入参数的存储过程案例:动态查询客户购买的商品信息
mysql> delimiter $
mysql> create procedure pro_ask(in cu_id int(11))
    -> begin
    -> select c_name from commodity where c_id in (select o_cid from `order` where o_cuid=cu_id);
    -> end$
Query OK, 0 rows affected (0.03 sec)

mysql> delimiter ;
mysql> call pro_ask(1);

ps:变量名和字段名重复时,不建议使用

out参数的使用 动态查询某商品的库存
mysql> delimiter $
mysql> create procedure pro_askcnum(in cid int(11),out cnum int(11))
    -> begin
    -> select c_num into cnum from commodity where c_id=cid;
    -> end$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
mysql> set @cn=12;
Query OK, 0 rows affected (0.00 sec)

mysql> select @cn;
+------+
| @cn  |
+------+
|   12 |
+------+
1 row in set (0.02 sec)

mysql> set @cn=-1;
Query OK, 0 rows affected (0.00 sec)

mysql> call pro_askcnum(12,@cn);
Query OK, 1 row affected (0.00 sec)

mysql> select @cn;
+------+
| @cn  |
+------+
|    6 |
+------+
1 row in set (0.00 sec)


ps:mysql所有的变量都是字符串类型,当你进行运算时,mysql会尝试进行类型转换,如果不成功会抛出异常

存储过程的应用?

在企业中很少用。
因为企业中的数据存储服务器专门用来进行数据的存储和查找。所有企业有一个业务逻辑处理服务器,专门用来进行业务处理。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热点推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值