0

データベースクラスの簡単なプロジェクトがあり、そのようなロジックを実装するショップデータベースがあります。注文テーブルの顧客ごとに、タイプ='CART'の注文があり、顧客が注文を確認すると、タイプを'ORDER'に変更します。お客様のための新しいカート。次に、各顧客がCARTを1つだけ持つように制御できるトリガーを作成します。

私はこのようなものを書きます

DELIMITER $$
USE `newshop`$$
CREATE
DEFINER=`root`@`localhost`
TRIGGER `newshop`.`cart_check`
BEFORE INSERT ON `newshop`.`order`
FOR EACH ROW
BEGIN
DECLARE msg VARCHAR(255);
DECLARE count_pn INTEGER;
SELECT count(*) INTO count_pn FROM newshop.order
    where newshop.order.type = NEW.type 
    and NEW.user_id = newshop.order.user_id
    and NEW.type = 'CART' 
    or NEW.type = 'cart' 
    LIMIT 1;
if count_pn > 0 THEN
BEGIN
    set msg = 'Oh no';
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg;
end;
ELSE
BEGIN
    set msg = 'Oh yeah';
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg;
END;
END IF;
END$$

次に、ID = 1のユーザーのカートタイプで新しい注文をテーブルに挿入しようとすると、すでにカートがあります-このトリガーではこれを行うことができません。別のユーザーのカートを追加しようとすると、カートを持っていません-このトリガーでもこれを行うことはできません。

4

1 に答える 1

1

それ以外の場合は、SIGNAL SQLSTATE = 45000もあります。これは未処理の例外であり、失敗として返されます。


SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = msg;
于 2013-03-24T17:12:17.240 に答える