4 trigger
TRANSCRIPT
Hệ quản trị cơ sở dữ liệuHệ quản trị cơ sở dữ liệu
Dư Phương HạnhBộ môn Hệ thống thông tin
Khoa CNTT, trường Đại học Công
nghệ
Đại học Quốc gia Hanoi
TriggerTrigger
Hệ quản trị CSDL @ BM HTTT2
Outline
Introduction Create trigger Managing trigger Exercises
Tài liệu tham khảo: http://www.mysqltutorial.org/mysql-triggers.aspx
Hệ quản trị CSDL @ BM HTTT3
Introduction
Trigger is a set of SQL statements which is stored to be activated or fired when an event associating with a database table occurs. The event can be any event including INSERT, UPDATE and DELETE.
Sometimes a trigger is referred as a special kind of stored procedure in term of procedural code inside its body. The difference between a trigger and a stored procedure is that a trigger is activated or called when an event happens in a database table, a stored procedure must be called explicitly.
Hệ quản trị CSDL @ BM HTTT4
Advantages
Trigger provides an alternative way to check integrity.
Trigger can catch the errors in business logic in the database level.
Trigger provides an alternative way to run scheduled tasks. With SQL trigger, you don’t have to wait to run the scheduled tasks. You can handle those tasks before or after changes being made to database tables.
SQL trigger is very useful when you use it to audit the changes of data in a database table.
Hệ quản trị CSDL @ BM HTTT5
Disadvantages
Trigger only can provide extended validation and cannot replace all the validations. Some simple validations can be done in the application level. – For example, you can validate input check in
the client side by using javascript or in the server side by server script using PHP or ASP.NET…
Hệ quản trị CSDL @ BM HTTT6
Disadvantages
Triggers executes invisibly from client-application which connects to the database server so it is difficult to figure out what happen underlying database layer.
SQL Triggers run every updates made to the table therefore it adds workload to the database and cause system runs slower.
Hệ quản trị CSDL @ BM HTTT7
Create trigger
CREATE TRIGGER trig_name trig_time trig_event
ON table_name
FOR EACH ROW
BEGIN
...
ENDTrig_time: BEFORE, AFTERTrig_even: INSERT, UPDATE and DELETE
– A trigger only can fire with one event. To define trigger which are fired by multiple events, you have to define multiple triggers, one for each event.
Hệ quản trị CSDL @ BM HTTT8
Create trigger MySQL gives you OLD and NEW keyword to help you write
trigger more efficient. – The OLD keyword refers to the existing row before you update data – The NEW keyword refers to the new row after you update data.
When you create a trigger in MySQL, its definition stores in the file with extension .TRG in a database folder with specific name as follows:/data_folder/database_name/table_name.trg
Hệ quản trị CSDL @ BM HTTT9
Examples
Consider that we want to keep the changes of employee's data in another table whenever data of an employee's record changed.
In order to do so you create a new table called employees_audit to keep track the changes as follows:
Hệ quản trị CSDL @ BM HTTT10
Examples
CREATE TABLE employees_audit
(
id int(11) NOT NULL AUTO_INCREMENT,
employeeNumber int(11) NOT NULL,
lastname varchar(50) NOT NULL,
changedon datetime DEFAULT NULL,
action varchar(50) DEFAULT NULL,
PRIMARY KEY (id)
)
Hệ quản trị CSDL @ BM HTTT11
Examples
DELIMITER $$
CREATE TRIGGER before_employee_update
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO employees_audit
SET action = 'update',
employeeNumber = OLD.employeeNumber,
lastname = OLD.lastname,
changedon = NOW();
END$$
DELIMITER ;
Hệ quản trị CSDL @ BM HTTT12
Managing trigger Trigger is stored as plain text file in the database folder as
follows: /data_folder/database_name/table_name.trg, with any plain text editor such as notepad you can view it.
MySQL provides you another way to view the trigger by executing SQL statement:
SELECT * FROM Information_Schema.Trigger
WHERE Trigger_schema = 'database_name' AND
Trigger_name = 'trigger_name';
Hệ quản trị CSDL @ BM HTTT13
Managing trigger
If you want to retrieve all triggers associated with a database just executing the following SQL statement: SELECT * FROM Information_Schema.Trigger
WHERE Trigger_schema = 'database_name';
To find all triggers associating with a database table, just executing the following SQL statement: SELECT * FROM Information_Schema.Trigger
WHERE Trigger_schema = 'database_name' AND
Event_object_table = 'table_name';
Hệ quản trị CSDL @ BM HTTT14
Managing trigger
In MySQL you are not only able to view the trigger but also remove an existing trigger. To remove a trigger you can use the SQL statement DROP TRIGGER as follows:
DROP TRIGGER table_name.trigger_name
To modify a trigger, you have to delete it first and recreate it. MySQL doesn't provide you SQL statement to alter an existing trigger like altering other database objects such as tables or stored procedures.
Hệ quản trị CSDL @ BM HTTT15
Exercises
1. Viết một trigger thực hiện công việc sau: Với những đơn hàng trị giá >1.000.000 thì chiết khấu 5%.
2. Viết trigger đảm bảo rằng: nếu số lượng hàng hoá khách hàng đặt mua lớn hơn số lượng hàng còn trong kho thì đưa ra thông báo ‘không đủ lượng hàng theo yêu cầu’, sau đó huỷ bỏ dòng đặt hàng đối với mặt hàng này.