파이썬을 통해 액세스 할 수있는 간단한 SQLite 데이터베이스를 설정하고 있습니다. 지금까지 기본 테이블과 트리거가 두 개 있습니다. 하나의 트리거가 새 레코드가 추가 될 때 'date_added'필드 열을 업데이트하고 나중에 레코드가 업데이트 될 때 'date_updated'열을 업데이트하려고합니다. . 여기에 트리거에 대한 내 SQLite는 구문입니다sqlite UPDATE 트리거가 INSERT 문에서도 실행됩니까?
이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;
'add_contact'트리거가 잘 동작하는 것이 계획대로 내가는 SQL INSERT 명령을 통해 새 레코드를 추가 할 때 ...이 발생합니다.
는문제는 화재 ... 'update_contact'트리거 것 같다 모두 나는 또한 새로운 기록을 추가 할 때 I는 SQL UPDATE 명령을 통해 (계획대로) 및을 레코드를 업데이트 할 때 :
즉
2010-07-12 05:00:06|2010-07-12 05:00:06
을 내가 그 기록을 업데이트 할 때, 그것과 같이 변경합니다 : 나는 새 레코드를 추가 할 때 나는 'DATE_ADDED'와 'date_updated'열이 얻을
2010-07-12 05:00:06|2010-07-12 05:14:26
,
나는 INSERT에서 왜 UPDATE 트리거도 발생시키지 않는다고 생각하니?
TIA,
몬테
편집 추가하는 방법 : 의도 한대로 작동하도록에 대한 어떤 힌트를?
웁스! 나는 당신이 의미하는 것을 본다;) INSERT에서 발생하는 하나의 트리거와 UPDATE에서 발생하는 두 개의 개별 트리거의 원래 목표를 달성하는 방법을 알고 싶습니까? 'date_added'를 제외한 모든 필드 업데이트에 'update_contact'트리거를 발생시키는 방법이있는 것처럼 보입니다. 그렇게해야합니다. 그냥 그것에 대해 가야할지 모르겠다 ... – memilanuk
@ memilanuk : 당신은 OLD.date_added를 UPDATE 트리거의 NEW.date_added와 비교할 수 있습니까? – Borealid
이전 스레드의 업데이트만으로도 문제의 코드를 다시 고칠 수있었습니다. 트리거 코드를 다음과 같이 변경했습니다. UPDATE contact_info SET date_updated = DATETIME ('NOW') 여기서 pkid = new.pkid AND DATETIME ('NOW')! = date_added; 작동하는 것으로 보입니다. 올바른 방향으로 움직여 주셔서 감사합니다! – memilanuk