Apache Derby - ทริกเกอร์

ในฐานข้อมูลทริกเกอร์คือคำสั่ง / รหัสที่ดำเนินการเมื่อใดก็ตามที่เกิดเหตุการณ์ เมื่อคุณสร้างทริกเกอร์ไปยังเหตุการณ์ใดเหตุการณ์หนึ่งบนตารางโค้ดที่ระบุในทริกเกอร์จะถูกเรียกใช้งานทุกครั้งที่เกิดเหตุการณ์ คุณสามารถสร้างทริกเกอร์หลายรายการในตารางเดียว

บทนี้สอนวิธีสร้างและวางทริกเกอร์โดยใช้ Apache Derby

การสร้างทริกเกอร์

คุณสามารถสร้างทริกเกอร์ใน Derby โดยใช้คำสั่ง CREATE TRIGGER

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของแบบสอบถาม CREATE TRIGGER

CREATE TRIGGER trigger_name
{ NO CASCADE BEFORE | AFTER }
{INSERT [OR] | UPDATE [OR] | DELETE}[OF col_name]
ON table_name
[REFERENCING OLD AS o NEW AS n]
[FOR EACH ROW]
Statement

ตัวอย่าง

สมมติว่าเราได้สร้างตารางชื่อ Emp ใน Derby ดังที่แสดงด้านล่าง

CREATE TABLE Emp (
   Id INT NOT NULL,
   Name VARCHAR(255),
   Salary INT NOT NULL,
   Location VARCHAR(255) );

และแทรก 5 แถวเข้าไป

INSERT INTO Emp(Id, Name, Salary, Location) VALUES
(1, 'Amit', 30000, 'Hyderabad'), (2, 'Kalyan', 40000, 'Vishakhapatnam'),
(3,'Renuka', 50000, 'Delhi'), (4, 'Archana', 15000, 'Mumbai'), (5, 'Trupthi',
45000, 'Kochin');

หากเรามีตารางอื่นชื่อ BackUp และความตั้งใจของเราคือการจัดเก็บแถวที่ถูกลบจากตาราง Emp ในนี้

CREATE TABLE BackUp (
   Id INT NOT NULL,
   Name VARCHAR(255),
   Salary INT NOT NULL,
   Location VARCHAR(255)
);

แบบสอบถามต่อไปนี้สร้างทริกเกอร์บนตารางแบบสอบถาม DELETE ที่ชื่อ Emp. จะเก็บแถวที่ถูกลบของEmp ไปที่ตารางสำรอง

ij> CREATE TRIGGER my_trigger
AFTER DELETE ON Emp
REFERENCING OLD AS oldRow
FOR EACH ROW MODE DB2SQL
INSERT INTO BackUp
VALUES (oldRow.Id, oldRow.Name, oldRow.Salary, oldRow.Location);

ตอนนี้ลบแถวจากตาราง Emp เป็น -

ij> Delete From Emp where Name = 'Kalyan';
1 row inserted/updated/deleted
ij> Delete From Emp where Name = 'Amit';
1 row inserted/updated/deleted

หากคุณตรวจสอบตาราง BackUp คุณสามารถสังเกตแถวที่ถูกลบในตารางนั้นได้

ij> select * from BackUp;
ID |NAME |SALARY |LOCATION
-------------------------------------------------------------------------
2 |Kalyan |40000 |Vishakhapatnam
1 |Amit |30000 |Hyderabad

2 rows selected

การลบทริกเกอร์

คุณสามารถลบทริกเกอร์ใน Derby โดยใช้คำสั่ง DROP TRIGGER

ไวยากรณ์

ต่อไปนี้เป็นไวยากรณ์ของแบบสอบถาม DROP TRIGGER -

ij> Drop trigger tigger_name;

ตัวอย่าง

ตัวอย่างต่อไปนี้จะลบทริกเกอร์ my_trigger ที่สร้างไว้ด้านบน -

ij> Drop trigger my_trigger;
0 rows inserted/updated/deleted

ตัวอย่าง JDBC

ต่อไปนี้โปรแกรม JDBC จะสร้างและลบทริกเกอร์ใน Derby

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Triggers_Example {
   public static void main(String args[]) throws SQLException, ClassNotFoundException {
      //Registering the driver
      Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
      //Getting the Connection object
      String URL = "jdbc:derby:TestDataBase;create=true";
      Connection conn = DriverManager.getConnection(URL);

      //Creating the Statement object
      Statement stmt = conn.createStatement();

      //Creating the Emp table
      stmt.execute("CREATE TABLE Emp ( "
         + "Id INT NOT NULL, "
         + "Name VARCHAR(255), "
         + "Salary INT NOT NULL, "
         + "Location VARCHAR(255))");

      //Insert values in to the EMp table
      String query = "INSERT INTO Emp(Id, Name, Salary, Location) VALUES \r\n"
         +"(1, 'Amit', 30000, 'Hyderabad'), "
         + "(2, 'Kalyan', 40000, 'Vishakhapatnam'), "
         + "(3,'Renuka', 50000, 'Delhi'), "
         + "(4, 'Archana', 15000, 'Mumbai'), "
         + "(5, 'Trupthi', 45000, 'Kochin')";
         stmt.execute(query);

      //Creating the BackUp table
      stmt.execute("CREATE TABLE BackUp ( "
         + "Id INT NOT NULL, "
         + "Name VARCHAR(255), "
         + "Salary INT NOT NULL, "
         + "Location VARCHAR(255))");

      //Creating a trigger
      String createTrigger = "CREATE TRIGGER my_trigger "
         + "AFTER DELETE ON Emp "
         + "REFERENCING OLD AS oldRow "
         + "FOR EACH ROW MODE DB2SQL "
         + "INSERT INTO BackUp "
         + "VALUES (oldRow.Id, oldRow.Name, oldRow.Salary, oldRow.Location)";
      stmt.execute(createTrigger);
      System.out.println("Trigger created");

      //Deleting records from Emp table
      stmt.executeUpdate("Delete From Emp where Name = 'Kalyan'");
      stmt.executeUpdate("Delete From Emp where Name = 'Amit'");
      //Getting the contents of BackUp table
      ResultSet rs = stmt.executeQuery("SELECT * from BackUp");
      while(rs.next()){
         System.out.println(rs.getInt("Id"));
         System.out.println(rs.getString("Name"));
         System.out.println(rs.getString("Salary"));
         System.out.println(rs.getString("Location"));
         System.out.println(" ");
      }
   }
}

เอาต์พุต

ในการรันโปรแกรมข้างต้นผลลัพธ์ต่อไปนี้จะถูกสร้างขึ้น -

Trigger created
2
Kalyan
40000
Vishakhapatnam
1
Amit
30000
Hyderabad