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会尝试进行类型转换,如果不成功会抛出异常
存储过程的应用?
在企业中很少用。
因为企业中的数据存储服务器专门用来进行数据的存储和查找。所有企业有一个业务逻辑处理服务器,专门用来进行业务处理。
- mysql(12):基础,ALTER 的语法介绍
- Mysql 基础语法总结
- MYSQL系列:mysql基础语法
- mysql常用基础操作语法(十一)~~字符串函数【命令行模式】
- mysql基础语法大全
- mysql常用基础操作语法(二)~~对表的增删改操作【命令行模式】
- mysql常用基础操作语法(五)--对数据的简单条件查询【命令行模式】
- mysql常用基础操作语法(六)--对数据排序和限制结果数量的条件查询【命令行模式】
- mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】
- mysql基础语法及拓展到web中的sql注入
- mysql基础语法
- Mysql基础语法 1
- MySQL基础入门-05MySQL的SQL语法
- 用mysql编译:Java Web开发实战经典(基础篇)课后题答案 060501_〖第05章:JSP基础语法〗_第01题
- MySQL基础语法与概念(精)
- mysql常见基础语法
- MySQL基础语法
- mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】
- MySQL(基础语法)
- MySQL基础语法(三)