当前位置: 首页 > news >正文

数据库项目实战五

一、项目内容

二、项目过程

2.1 创建两张表:

mysql> create table goods
-> ( gid char(8) primary key,
-> name varchar(10),
-> price decimal(8,2),
-> num int );
Query OK, 0 rows affected (0.02 sec)

mysql> create table orders(
-> oid int primary key auto_increment,
-> gid  char(10) not null,
-> name varchar(10),
-> price decimal(8,2),
-> onum int,
-> otime date);
Query OK, 0 rows affected (0.02 sec)

2.2 在商品表中导入商品记录

mysql> insert into goods values
-> ('A0001', '橡皮',  2.5,  100),
-> ('B0001','小楷本', 2.8, 210),
-> ('C0001','铅笔',  1.2,  120),
-> ('D0001','计算器',28, 20);
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

2.3 创建三种触发器

(1)订单表中增加订单数量后,商品表商品数量同步减少对应的商品订单出数量,并测试

mysql>  create trigger orders_after_insert_trigger
-> after insert on orders for each row
-> update goods set num=num-new.onum where gid=new.gid;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into orders(gid,name,price,onum,otime) value('A0001','橡
皮',2.50,20,now());
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> select * from orders;
+-----+-------+--------+-------+------+------------+
| oid | gid   | name   | price | onum | otime      |
+-----+-------+--------+-------+------+------------+
|   1 | A0001 | 橡皮   |  2.50 |   20 | 2025-11-12 |
+-----+-------+--------+-------+------+------------+
1 row in set (0.00 sec)

(2)更新型触发器的实现功能:客户取消订单,恢复商品表对应商品的数量

mysql> create trigger ordedrs_after_update_trigger
-> after update on orders for each row
-> update goods set num=num+(old.onum-new.onum);
Query OK, 0 rows affected (0.00 sec)

mysql> update orders set onum=40 where oid=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

(3)删除订单触发器的实现功能:客户修改订单,商品表对应商品数量同步更新

mysql> create trigger orders_after_delete_trigger
-> after delete on orders for each row
-> update goods set num=num+old.onum where gid=old.gid;
Query OK, 0 rows affected (0.01 sec)

mysql> delete from orders where oid=1;
Query OK, 1 row affected (0.00 sec)

结果:

mysql> select * from goods;
+-------+-----------+-------+------+
| gid   | name      | price | num  |
+-------+-----------+-------+------+
| A0001 | 橡皮      |  2.50 |  100 |
| B0001 | 小楷本    |  2.80 |  190 |
| C0001 | 铅笔      |  1.20 |  100 |
| D0001 | 计算器    | 28.00 |    0 |
+-------+-----------+-------+------+
4 rows in set (0.00 sec)

2.4 存储过程

mysql> select * from emp_new;
+------+--------+------+----------------+----------+-------+
| sid  | name   | age  | worktime_start | incoming | dept2 |
+------+--------+------+----------------+----------+-------+
| 1789 | 张三   |   35 | 1980-01-01     |     4000 |   101 |
| 1674 | 李四   |   32 | 1983-04-01     |     3500 |   101 |
| 1776 | 王五   |   24 | 1990-07-01     |     2000 |   101 |
| 1568 | 赵六   |   57 | 1970-10-11     |     7500 |   102 |
| 1564 | 荣七   |   64 | 1963-10-11     |     8500 |   102 |
| 1879 | 牛八   |   55 | 1971-10-20     |     7300 |   103 |
+------+--------+------+----------------+----------+-------+
6 rows in set (0.00 sec)

(1)创建提取emp_new表所有员工姓名和工资的存储过程s1

(2)创建存储过程s2,实现输入员工姓名后返回员工的年龄

mysql> delimiter //
mysql> create procedure s2(in in_name varchar(11), out out_age int )
-> begin
->     select age into out_age from emp_new where name=in_name ;
-> end //
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;
mysql> call s2('张三',@age);
Query OK, 1 row affected (0.00 sec)

(3)创建一个存储过程s3,有2个参数,传入部门号,返回该部门的平均工资

mysql> delimiter //
mysql> create procedure s3(in in_dept int , out avg_sal float)
-> begin
->     select round(avg(incoming),2) into avg_sal from emp_new where dept2=in_dept;
-> end //
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;
mysql> call s3(101,@sal);
Query OK, 1 row affected (0.00 sec)

http://www.dtcms.com/a/600645.html

相关文章:

  • Python调用Java接口失败(Java日志打印警告:JSON parse error:xxxx)
  • 没有网站如何做SEO推广有用吗怎么不花钱自己开网店
  • ArkTS分布式设计模式浅析
  • 倍福PGV100-F200A-R4-V19使用手册
  • FD2000/4的UEFI编译和烧录文件打包过程记录
  • 微信小程序map自定义气泡customCallout
  • 如何在ubuntu调用exe文件
  • Polar MISC (中)
  • 《理解数据在内存中的存储 --- 解密数据在计算机底层的存储秘密》
  • 兰州网站建设公网站可以换虚拟主机吗
  • 营销型网站建设评价深圳福田住房和建设局网站官网
  • 遍历访问阿里云节点下的所有文件信息并写入excel文件
  • 平台消息推送(go)
  • uniapp集成爱山东获取用户信息
  • Python编程实战 - Python实用工具与库 - 操作Excel:openpyxl / pandas
  • 开展我国电子网站建设wordpress表白
  • Java 在 Excel 中添加或删除批注:Spire.XLS for Java 实践指南
  • uniapp 使用unocss的问题
  • [Linux——Lesson23.线程概念与控制:线程基础]
  • 四大主流浏览器Chrome、Edge、Safari、Firefox内核检测免费工具评测
  • 弱网通话没保障?多网聚合,逐包调度,新技术扫除网络痛点
  • 网站制作公司的网站贵阳网站改版
  • 电脑硬件价格呈现持续上涨趋势及软件优化的必要性
  • Spring集成kafka的最佳方式
  • 设计网站怎么做网业是什么行业
  • RK3588应用分享之国产化系统-开源鸿蒙OpenHarmony
  • RabbitMQ-基础-总结
  • 学习react第二天
  • 【JVS更新日志】低代码、APS排产、物联网、企业计划11.12更新说明!
  • 前端注释规范:如何写“后人能看懂”的注释(附示例)