MySQL基于实例sales创建自定义函数、视图、存储过程、触发器及查询结果创建新表
实例:数据库sales
1.客户表(Customer)
客户编号(CusNo) | 姓名(CusName) | 地址(Address) | 电话(Tel) |
C001 | 杨婷 | 北京 | 010-5328953 |
C002 | 李和平 | 上海 | 021-62359651 |
C003 | 叶新 | 成都 | 024-3222781 |
C004 | 冯辰诚 | 上海 | 021-87235965 |
2.产品表(Product)
产品编号(ProNo) | 品名(ProName) | 单价(price) | 库存数量(Stocks) |
P0001 | 液晶电视 | 5600.00 | 800 |
P0002 | 空调 | 2390.00 | 460 |
P0003 | 洗衣机 | 3700.00 | 600 |
P0004 | 电热水器 | 890.00 | 120 |
3.销售表(ProOut)
销售日期(SaleDate) | 客户编号(CusNo) | 产品编号(ProNo) | 销售数量(Quantity) |
2007-10-27 | C001 | P0001 | 3 |
2007-11-06 | C004 | P0003 | 40 |
2007-12-27 | C001 | P0003 | 5 |
2008-3-15 | C002 | P0002 | 12 |
2008-05-02 | C003 | P0002 | 21 |
2008-05-02 | C003 | P0001 | 9 |
2008-09-21 | C004 | P0001 | 30 |
2008-11-21 | C004 | P0001 | 73 |
一、创建一自定义函数sumMoney,要求能够利用该函数计算出销售金额,并进行测试,利用该函数计算出每种产品(ProNo)的销售金额。
二、创建视图viewPro,要求显示每种产品的销售量和销售金额。
三、创建存储过程p_Pro,要求能够根据指定的客户编号,统计该客户购买每种产品的产品号、数量。
四、创建一个触发器t_Stocks,要求当插入销售表(ProOut)的销售记录时,根据销售数量(Quantity)的变化,能更新产品表(Product)中相应的库存数量(Stocks)。
这里需要注意的是new和old的用在after和before时有不同,如下:
运行结果:出现错误ErrorCode:1362
UpdatingofNEWrowisnotallowedinaftertrigger
原因是什么呢?是因为:
AFTER是先完成数据的INSERT/UPDATE/DELETE,再触发,触发的语句晚于监视的增删改操作,无法影响前面的INSERT/UPDATE/DELETE动作。
也就是说在AFTER中对new数据进行重新赋值不能影响前面的INSERT/UPDATE/DELETE动作,也就变得没有意义,因此在AFTER中不能对new数据进行 赋值,只能读取。
BEFORE是先完成触发,再进行INSERT/UPDATE/DELETE,触发的语句先于监视的INSERT/UPDATE/DELETE,也就是有机会判断、修改INSERT /UPDATE/DELETE操作,因此对new数据赋值要放在BEFORE中。
修改后语句:
1DELIMITER$$ 2CREATETRIGGERt_StocksBEFOREINSERT 3ONprooutFOREACHROW 4BEGIN 5DECLAREnumINT; 6SETnum= 7(SELECTstocksFROMproductWHEREprono=new.prono); 8IFnum<new.quantity 9THENSETnew.quantity=num; 10ENDIF; 11UPDATEproductSETstocks=stocks-new.quantityWHEREprono=new.prono; 12END$$ 13DELIMITER; 测试:INSERTINTOprooutVALUES('2009-02-35','C002','P0001',900);--原来Stocks是800
五、在查询的基础上创建一张新表Cus,要求显示客户“C004”在2008年购买的产品号、数量。
MySQL提供的方法和SQLServer的select(查询)into[新表]from[源表]方法不同,使用的是Createtable[表名]as(查询)的方法。
复制整个表为CREATETABLE[新表]SELECT*FEOM[源表];
<p><spandata-mce-style="font-size:16px;"style="font-size:16px;"><spandata-mce-style="font-size:16px;"style="font-size:16px;"><spandata-mce-style="font-size:16px;"style="font-size:16 1c13f px;"></span></span></span></p><divclass="cnblogs_code"><pre><spandata-mce-style="color:#008080;"style="color:#08080;">1</span><spandata-mce-style="color:#0000ff;"style="color:#000099;">DROP</span><spanstyle="color:#000099;"><spandata-mce-style="color:#0000ff;"style="">TABLE</span><spandata-mce-style="color:#0000ff;"style="">IF</span></span><spandata-mce-style="color:#808080;"style="color:#808080;">EXISTS</span><spandata-mce-style="color:#000000;"style="color:#000000;">cus; </span><spandata-mce-style="color:#008080;"style="color:#08080;">2</span><spandata-mce-style="color:#0000ff;"style="color:#000099;">CREATE</span><spanstyle="color:#000099;"><spandata-mce-style="color:#0000ff;"style="">TABLE</span></span>cus<spandata-mce-style="color:#0000ff;"style="color:#000099;">AS</span><spanstyle="color:#000099;"></span> <spandata-mce-style="color:#008080;"style="color:#08080;">3</span><spandata-mce-style="color:#0000ff;"style="color:#000099;">SELECT</span>po.prono,<spandata-mce-style="color:#ff00ff;"style="color:#ff0ff;">SUM</span><spandata-mce-style="color:#000000;"style="color:#000000;">(po.quantity) </span><spandata-mce-style="color:#008080;"style="color:#08080;">4</span><spandata-mce-style="color:#0000ff;"style="color:#000099;">FROM</span><spandata-mce-style="color:#000000;"style="color:#000000;">prooutpo </span><spandata-mce-style="color:#008080;"style="color:#08080;">5</span><spandata-mce-style="color:#0000ff;"style="color:#000099;">WHERE</span>po.cusno<spandata-mce-style="color:#808080;"style="color:#808080;">=</span><spandata-mce-style="color:#ff0000;"style="color:#ff00;">'</span><spandata-mce-style="color:#ff0000;"style="color:#ff00;">c003</span><spandata-mce-style="color:#ff0000;"style="color:#ff00;">'</span><spandata-mce-style="color:#808080;"style="color:#808080;">AND</span><spandata-mce-style="color:#ff00ff;"style="color:#ff0ff;">YEAR</span>(po.saledate)<spandata-mce-style="color:#808080;"style="color:#808080;">=</span><spandata-mce-style="color:#800000;"style="color:#8000;">2008</span><spandata-mce-style="color:#0000ff;"style="color:#000099;">GROUP</span><spanstyle="color:#000099;"><spandata-mce-style="color:#0000ff;"style="">BY</span></span><spandata-mce-style="color:#000000;"style="color:#000000;">prono;</span>
- mysql 查询表,视图,触发器,函数,存储过程
- mysql 查询表,视图,触发器,函数,存储过程
- 查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数
- 查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数
- mysql 触发器采坑记录(mysql 触发器采坑记录 由于不了解mysql创建触发器要记录创建者IP,导致更改创建者IP后,触发器不可执行。 当创建触发器(视图、存储过程、函数)时,如果没有)
- 查询SQLServer2005中某个数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数
- oracle9i存储过程、触发器、函数简单实例(基于PL/SQL7.1)收藏
- mysql存储过程、函数和触发器的创建
- MYSQL数据库重点:自定义函数、存储过程、触发器、事件、视图
- 数据库中的表结构、索引、视图、存储过程、触发器以及自定义函数
- 14.数据库oracle必学,其他最好了解一种以上(mysql,sql server,access==) oracle:视图,索引,存储过程,触发器,游标,包,常用函数
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
- mysql 查询表,视图,触发器,函数,存储过程
- mysql 触发器 存储过程 函数 视图
- mysql事务、触发器、视图、存储过程、函数
- oracle9i存储过程、触发器、函数简单实例(基于PL/SQL7.1)
- MySql高级—视图、函数、存储过程、触发器
- MySQL基础(二):视图、触发器、函数、事务、存储过程
- mysql创建自定义函数和存储过程
- MySQL 的触发器、存储过程、函数、视图实验