You are on page 1of 4

1.

DROP TABLE IF EXISTS Note;


CREATE TABLE Note (
orderNumber INT NOT NULL,
productCode VARCHAR(15) NOT NULL,
note VARCHAR(128),
PRIMARY KEY (orderNumber, productCode),
FOREIGN KEY (orderNumber)
REFERENCES orders(orderNumber)
ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (productCode)
REFERENCES products(productCode)
ON UPDATE CASCADE ON DELETE RESTRICT
);
DELIMITER $$
CREATE TRIGGER before_orderdetails_insert
BEFORE INSERT ON OrderDetails
FOR EACH ROW
BEGIN
IF NEW.quantityOrdered > (SELECT quantityInStock FROM Products WHERE
Products.productCode = NEW.productCode)
THEN
INSERT INTO Note
SET OrderNumber = NEW.orderNumber,
ProductCode = NEW.productCode,
Note = "Thiếu hàng hóa cung ứng";
END IF;
END$$
DELIMITER ;

INSERT INTO orderdetails(orderNumber, productCode, quantityOrdered, priceEach,


orderLineNumber)
VALUES ('10100', 'S10_1678', '8000', '100.00', '1');
SELECT * FROM note;

2.
DELIMITER $$
CREATE TRIGGER before_orderdetails_insertCancelled
BEFORE INSERT ON OrderDetails
FOR EACH ROW
BEGIN
IF NEW.quantityOrdered > (SELECT quantityInStock FROM Products WHERE
Products.productCode = NEW.productCode) THEN
SIGNAL SQLSTATE '45100' SET MESSAGE_TEXT = "Không đủ lượng mặt hàng theo yêu
cầu ";
END IF;
END$$
DELIMITER ;

INSERT INTO orderdetails(orderNumber, productCode, quantityOrdered, priceEach,


orderLineNumber)
VALUES ('10104', 'S10_1678', '8000', '100.00', '1');

3(Slide).
DELIMITER $$
CREATE TRIGGER update_after_cancel
AFTER UPDATE ON orders FOR EACH ROW
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE prodCode varchar(50);
DECLARE quan_in_stok INT;
DECLARE cur CURSOR FOR
SELECT productCode, quantityOrdered FROM orderdetails
WHERE oderdetails.orderNumber = NEW.orderNumber;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
IF ( NEW.status = "Cancelled") THEN open_loop: LOOP
FETCH cur INTO prodCode, quan_in_stok;
IF done THEN LEAVE open_loop;
END IF;
UPDATE products SET quantityInStock = quantityInStock + quan_in_stok
WHERE productCode = prodCode;
END LOOP;
END IF;
CLOSE cur;
END$$
DELIMITER ;

SELECT orderNumber, quantityOrdered, p.quantityInStock FROM orderdetails od


JOIN products p ON p.productCode = od.productCode
WHERE orderNumber = '10105';

UPDATE orders SET orders.status = 'Cancelled' WHERE orders.orderNumber = 10105;

SELECT orderNumber, quantityOrdered, p.quantityInStock FROM orderdetails od


JOIN products p ON p.productCode = od.productCode
WHERE orderNumber = '10105';

1(PDF).
CREATE TABLE Khuyen_mai(
Mahoadon INT(20) NOT NULL,
Sotien DECIMAL(10,2) NOT NULL,
PRIMARY KEY(Mahoadon)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DELIMITER $$
CREATE TRIGGER order_sale
AFTER UPDATE ON orderdetails FOR EACH ROW
BEGIN
DECLARE total decimal(10,2);
SELECT SUM(quantityOrdered*priceEach) INTO total FROM orderdetails
WHERE orderdetails.orderNumber = NEW.orderNumber
GROUP BY orderdetails.orderNumber;
IF(NEW.orderNumber IN (SELECT MaHoaDon FROM Khuyen_mai) AND total > 65000) THEN
UPDATE Khuyen_mai
SET Sotien = total * 0.95
WHERE MaHoaDon = NEW.orderNumber;
ELSEIF(total > 65000) THEN
INSERT INTO Khuyen_mai(MaHoaDon, Sotien)
VALUES (NEW.orderNumber, total*0.95);
END IF;
END $$
DELIMITER ;

UPDATE orderdetails SET quantityOrdered = 5000 WHERE orderdetails.orderNumber =


10100 AND orderdetails.productCode = 'S10_1678';
SELECT * FROM Khuyen_mai;
DELIMITER $$
CREATE TRIGGER order_update
AFTER INSERT ON orderdetails FOR EACH ROW
BEGIN
DECLARE total decimal(10,2);
SELECT SUM(quantityOrdered*priceEach) INTO total FROM orderdetails
WHERE orderdetails.orderNumber = NEW.orderNumber
GROUP BY orderdetails.orderNumber;
IF(NEW.orderNumber IN (SELECT MaHoaDon FROM Khuyen_mai) AND total > 65000) THEN
UPDATE Khuyen_mai
SET Sotien = total * 0.95
WHERE MaHoaDon = NEW.orderNumber;
ELSEIF(total > 65000) THEN
INSERT INTO Khuyen_mai(MaHoaDon, Sotien)
VALUES (NEW.orderNumber, total*0.95);
END IF;
END $$
DELIMITER ;

INSERT INTO orderdetails (orderNumber, productCode, quantityOrdered, priceEach,


orderLineNumber)
VALUES ('10106', 'S10_1678', '5000', '50.00', '1');
SELECT * FROM khuyen_mai;

2(PDF).
ALTER TABLE inventory
ADD is_available BOOLEAN;

DELIMITER $$
CREATE TRIGGER film_rental_update_status
AFTER UPDATE ON rental FOR EACH ROW
BEGIN
IF NEW.return_date is null THEN
UPDATE inventory
SET is_available = false
WHERE inventory_id = NEW.inventory_id;
ELSE
UPDATE inventory
SET is_available = true
WHERE inventory_id = NEW.inventory_id;
END IF;
END $$
DELIMITER ;

UPDATE rental SET rental_date = '2021-01-01 12:34:56' WHERE rental.rental_id = 1;


SELECT * FROM inventory WHERE inventory_id = 367;

DELIMITER $$
CREATE TRIGGER film_rental_return_status
AFTER INSERT ON rental FOR EACH ROW
BEGIN
IF NEW.return_date is null THEN
UPDATE inventory
SET is_available = false
WHERE inventory_id = NEW.inventory_id;
ELSE
UPDATE inventory
SET is_available = true
WHERE inventory_id = NEW.inventory_id;
END IF;
END $$
DELIMITER ;

INSERT INTO rental (rental_id, rental_date, inventory_id, customer_id, return_date,


staff_id, last_update)
VALUES ('16052', '2021-01-01 12:34:56', '1', '1', '2021-02-02', '1',
current_timestamp());
SELECT * FROM inventory WHERE inventory_id = 1;

You might also like