MySQL语句,建立触发器T1,往o表插入一条记录,若onum大于gnum,则将onum修改为gnum,同时删除g表相应gid的数据
时间: 2023-12-23 17:02:34 浏览: 76
以下是建立触发器T1的MySQL语句:
```sql
CREATE TRIGGER T1 BEFORE INSERT ON o
FOR EACH ROW
BEGIN
IF NEW.onum > (SELECT gnum FROM g WHERE gid = NEW.gid) THEN
SET NEW.onum = (SELECT gnum FROM g WHERE gid = NEW.gid);
DELETE FROM g WHERE gid = NEW.gid;
END IF;
END;
```
这个触发器会在往o表插入一条记录之前触发,检查onum是否大于相应的gnum,如果是,则将onum修改为gnum,同时删除g表中相应gid的数据。
相关问题
用sql语句创建一个触发器,触发器需要根据propuct表中pprice字段和order表中ino对应的等级优惠的数据自动计算订单金额,并将其结果自动写入order表中omoney字段中。 触发器需要根据pno字段,库存数量需要将订单中对应的商品数量减去,库存不足时,插入终止,需要撤销之前的操作,将数据库恢复到插入订单前的状态。 触发器需要保证计算的订单金额是与其订单对应的,当相同顾客购买多个不同商品时,触发器计算的金额不能错误写入到其他订单。
好的,以下是可以实现你的要求的 SQL 代码:
首先,我们需要创建一个触发器,当订单表中插入一条新数据时,触发器会自动执行相应的操作:
```
CREATE TRIGGER calc_order_money
AFTER INSERT ON order
FOR EACH ROW
BEGIN
-- 计算订单金额
DECLARE amount DECIMAL(10, 2);
SELECT sum(o.onum * p.pprice * d.discount) INTO amount
FROM order_detail o
JOIN product p ON o.opno = p.pno
JOIN discount d ON p.plevel = d.level AND o.ocust = d.cust
WHERE o.oid = NEW.oid;
-- 更新订单金额
UPDATE order SET omoney = amount WHERE oid = NEW.oid;
-- 更新库存数量
DECLARE num INT;
SELECT sum(onum) INTO num
FROM order_detail
WHERE oid = NEW.oid;
DECLARE cnt INT;
SELECT count(*) INTO cnt
FROM product
WHERE pno IN (SELECT opno FROM order_detail WHERE oid = NEW.oid);
IF num > cnt THEN
-- 库存不足,撤销操作
DELETE FROM order WHERE oid = NEW.oid;
ROLLBACK;
ELSE
-- 库存充足,更新库存数量
UPDATE product p
JOIN order_detail o ON p.pno = o.opno
SET p.pnum = p.pnum - o.onum
WHERE o.oid = NEW.oid;
END IF;
END;
```
该触发器会自动计算订单金额,并将结果写入到订单表的 omoney 字段中。同时,它也会根据订单中的商品数量更新库存数量。如果库存不足,触发器会撤销之前的操作,将数据库恢复到插入订单前的状态。
需要注意的是,该触发器会根据订单表中的 oid 字段来计算订单金额和更新库存数量,因此即使相同顾客购买多个不同商品时,也不会出现计算金额错误的情况。
找出数组中,所有的偶数且个位数为6的数,输出它的总数 int all= (15,18,7,66,7,3,8,12,10,4); int onum=0; for(int i=0;i<填空1;i++){ 计(填空2 &&填空 3){ onum++; } }
int all[] = {15, 18, 7, 66, 7, 3, 8, 12, 10, 4};
int onum = 0;
for (int i = 0; i < 10; i++) {
if (all[i] % 2 == 0 && all[i] % 10 == 6) {
onum++;
}
}
printf("%d", onum);
输出结果为2,因为数组中有两个符合条件的数:66和18。
阅读全文