با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش SQLite را دنبال می کنند. Trigger ها در SQLite توابع فراخوانی پایگاه داده هستند که هنگامی که رویداد پایگاه داده مشخص رخ می دهد این توابع به صورت خودکار انجام می شوند. این توابع کاربردهای گسترده ای داشته و می توان آن ها را در دستورات مختلف SQL از جمله DELETE, INSERT و … با استفاده از دستور TRIGGER در SQLite مدیریت کرد،در ادامه ی این آموزش برای آشنایی با دستور TRIGGER در SQLite با ما همراه باشید.
در این آموزش شما را با توضیحات و سینتکس دستور TRIGGER در SQLite آشنا خواهیم کرد.
این سینتکس اصلی ایجاد یک trigger است :
1 2 3 4 5 | CREATE TRIGGER trigger_name [BEFORE|AFTER] event_name ON table_name BEGIN -- Trigger logic goes here.... END; |
در سینتکس فوق event_name می تواند INSERT, DELETE, یا UPDATE باشد.
بعد از table_name که نام جدول است، می توانید دستورات SQL را برای تابع trigger تعریف کنید.
ساختار زیر سینتکس ایجاد یک trigger بر روی یک عملیات UPDATE روی یک یا بیش از یک ستون از یک جدول است:
1 2 3 4 5 | CREATE TRIGGER trigger_name [BEFORE|AFTER] UPDATE OF column_name ON table_name BEGIN -- Trigger logic goes here.... END; |
مثال
مثلا می خواهیم دنباله ی حسابرسی را برای هر رکورد درج شده در جدول COMPANY نگه داریم (حذف جدول COMPANY در صورت وجود داشتن):
1 2 3 4 5 6 7 | sqlite> CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); |
برای نگهداری دنباله ی حسابرسی ما می توانیم یک جدول با نام AUDIT جایی که پیام های log درج می شوند، ایجاد کنیم.
1 2 3 4 | sqlite> CREATE TABLE AUDIT( EMP_ID INT NOT NULL, ENTRY_DATE TEXT NOT NULL ); |
در اینجا ID رکورد AUDIT است و EMP_ID شناسه ای است که از جدول COMPANY می آید و DATE زمانی که رکورد در جدول COMPANY ایجاد می شود زمان بندی می شود.
حالا یک trigger در جدول COMPANY بصورت زیر ایجاد می کنیم:
1 2 3 4 5 | sqlite> CREATE TRIGGER audit_log AFTER INSERT ON COMPANY BEGIN INSERT INTO AUDIT(EMP_ID, ENTRY_DATE) VALUES (new.ID, datetime('now')); END; |
حالا شروع به وارد کردن رکورد در جدول COMPANY می کنیم که در نتیجه می بایست یک رکورد ثبت حسابرسی در جدول AUDIT ایجاد شود :
1 2 | sqlite> INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Paul', 32, 'California', 20000.00 ); |
این یک رکورد در جدول COMPANY ایجاد می کند که به صورت زیر است :
1 2 3 | ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 |
در همان زمان، یک رکورد در جدول AUDIT ایجاد خواهد شد، که نتیجه یک trigger است.
این همان trigger است که روی عملیات INSERT در جدول COMPANY ایجاد کردیم.
به طور مشابه می توان trigger را روی عملیات UPDATE و DELETE بسته به نیاز خود ایجاد کنید:
1 2 3 | EMP_ID ENTRY_DATE ---------- ------------------- 1 2013-04-05 06:26:00 |
شما می توانید تمام trigger ها از جدول sqlite_master به صورت زیر لیست کنید :
1 2 | sqlite> SELECT name FROM sqlite_master WHERE type = 'trigger'; |
دستور SQLite فوق ، تنها یک ورودی را به صورت زیر لیست می کند :
1 2 3 | name ---------- audit_log |
اگر می خواهید لیستی از triger ها را روی یک جدول خاص قرار دهید، از عملگر AND با نام جدول به صورت زیر استفاده کنید:
1 2 | sqlite> SELECT name FROM sqlite_master WHERE type = 'trigger' AND tbl_name = 'COMPANY'; |
کد فوق در SQLite خروجی زیر را تولید خواهد کرد :
1 2 3 | name ---------- audit_log |
سینتکس حذف triger ها با استفاده از دستور DROP به صورت زیر است :
1 | sqlite> DROP TRIGGER trigger_name; |
Trigger ها در SQLite توابعی در دیتابیس می باشند که به طور خودکار فرآیندی را که ما مشخص کرده ایم را بعد از انجام یک عملیات مشخص در دیتابیس انجام می دهند. مثلا در مباحث فوق کدی نوشتیم که بعد از درج در جدول COMPANY ، درج داده در جدول AUDIT نیز انجام شود.