Tôi đang làm việc để thiết lập một cơ sở dữ liệu SQLite đơn giản để truy cập thông qua Python. Cho đến nay tôi có một bảng cơ bản và một vài trigger - tôi muốn có một trigger cập nhật một cột field 'date_added' khi một bản ghi mới được thêm vào, và một cái khác để cập nhật một cột 'date_updated' khi một bản ghi được cập nhật sau . Đây là cú pháp SQLite của tôi cho trigger:sqlite UPDATE kích hoạt kích hoạt trên báo cáo INSERT cũng?
CREATE TRIGGER add_contact AFTER INSERT ON contact_info
BEGIN
UPDATE contact_info SET date_added = DATETIME('NOW') WHERE pkid = new.pkid;
END;
CREATE TRIGGER update_contact AFTER UPDATE ON contact_info
BEGIN
UPDATE contact_info SET date_updated = DATETIME('NOW') WHERE pkid = new.pkid;
END;
Các 'add_contact' cò vẻ là làm việc tốt ... nó kích hoạt khi tôi thêm một kỷ lục mới thông qua một lệnh INSERT sql, theo kế hoạch.
Vấn đề có vẻ là 'update_contact' cò ... nó cháy cả khi tôi cập nhật một kỷ lục qua một lệnh sql UPDATE (theo kế hoạch) và khi tôi thêm một kỷ lục mới cũng:
tức khi tôi thêm một kỷ lục mới tôi có được điều này trong các cột 'date_updated' 'DATE_ADDED' và:
2010-07-12 05:00:06|2010-07-12 05:00:06
và khi tôi cập nhật hồ sơ đó, nó thay đổi như sau:
2010-07-12 05:00:06|2010-07-12 05:14:26
Tôi đoán tôi không nhận được lý do tại sao kích hoạt UPDATE bắn vào INSERT cũng?
TIA,
Monte
Edited thêm: Bất kỳ gợi ý về cách làm cho nó hoạt động như mong đợi?
Rất tiếc! Tôi hiểu ý của bạn là gì) Bất kỳ ý tưởng nào về cách đạt được mục tiêu ban đầu của hai bộ kích hoạt riêng biệt, một cái kích hoạt trên một INSERT và một cái sẽ kích hoạt vào CẬP NHẬT? Có vẻ như nếu có cách kích hoạt trình kích hoạt 'update_contact' trên bản cập nhật của bất kỳ trường nào * ngoại trừ * date_added, bạn nên làm như vậy. Chỉ cần không chắc chắn làm thế nào để đi về nó ... – memilanuk
@memilanuk: Bạn có thể so sánh OLD.date_added để NEW.date_added trong kích hoạt UPDATE của bạn? – Borealid
Chỉ là một bản cập nhật trên một chủ đề cũ, như tôi đã nhận xung quanh để tinkering với mã trong câu hỏi một lần nữa ngày hôm nay. Tôi đã thay đổi mã kích hoạt để đọc: CẬP NHẬT contact_info SET date_updated = DATETIME ('NOW') WHERE pkid = new.pkid VÀ DATETIME ('NOW')! = Date_added; Dường như hoạt động. Cảm ơn bạn đã di chuyển đúng hướng! – memilanuk