2016-05-09 44 views
1

的計數我有這個表叫做書觸發了刪除

create table books (price INT,title VARCHAR(50),type VARCHAR(5)); 

我需要一個觸發,在另一個表中插入稱爲myregister當前日期,並在該日刪除圖書的數量。所以,我想出了這個:

CREATE TABLE myregister (dates DATE,number INT); 

    DELIMITER | 
    CREATE TRIGGER deleted AFTER DELETE on books 
    FOR EACH ROW BEGIN 
    set @cnt = if(@cnt is null, 1, (@cnt+1)); 
    set @dat = CURDATE(); 
    INSERT INTO myregister values(CURDATE(),@cnt); 
    END; 
    | 
    DELIMITER ; 

,但有2個問題:

  1. 變量是全球性的,它計算爲每本書刪除,沒關係的日期。

  2. 觸發器爲每一行計數,所以最後,表myregister有n行,每一行都刪除每一本書。

回答

0

如果您重新定義myregister表,以便dates列是獨一無二的,你可以重寫觸發插入一行,如果一個已經不存在,或增加計數器,如果它。

注意:number是MySQL中的保留字。你的觸發器可以有一個更具體的名字,因爲如果你爲其他表添加更多的觸發器,deleted不會很明顯。

CREATE TABLE myregister (dates DATE PRIMARY KEY, `number` INT); 

CREATE TRIGGER deleted AFTER DELETE on books 
FOR EACH ROW 
    INSERT INTO myregister VALUES(CURDATE(), 1) 
    ON DUPLICATE KEY UPDATE `number` = `number` + 1; 

INSERT INTO books VALUES(1, 'test', 'test'), (2, 'test', 'test'), 
    (3, 'test', 'test'), (4, 'test', 'test'), (5, 'test', 'test'); 

DELETE FROM books; 

INSERT INTO books VALUES(1, 'test', 'test'), (2, 'test', 'test'), 
    (3, 'test', 'test'), (4, 'test', 'test'), (5, 'test', 'test'); 

DELETE FROM books; 

SELECT * FROM myregister; 

-- 2016-05-09, 10 
+0

您可以使用[14.2.5.3 INSERT ...對重複密鑰更新語法](http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html) 。 – wchiquito

+0

@wchiquito是的,那會更好。將編輯。 –

+0

@MattRaines非常感謝,它真的幫助了我。 – viversba