- Apache Derby 教程
- Apache Derby - 首頁
- Apache Derby - 簡介
- Apache Derby - 部署模式
- Apache Derby - 環境設定
- Apache Derby - 工具
- Apache Derby - 語法
- Apache Derby - 資料型別
- Apache Derby - 建立表
- Apache Derby - 刪除表
- Apache Derby - 插入資料
- Apache Derby - 檢索資料
- Apache Derby - 更新資料
- Apache Derby - 刪除資料
- Apache Derby - WHERE 子句
- Apache Derby - GROUP BY 子句
- Apache Derby - ORDER BY 子句
- Apache Derby - HAVING 子句
- ALTER TABLE 語句
- Apache Derby - Derby 索引
- Apache Derby - 儲存過程
- Apache Derby - 模式
- Apache Derby - 觸發器
- Apache Derby 有用資源
- Apache Derby - 快速指南
- Apache Derby - 有用資源
- Apache Derby - 討論
Apache Derby - 觸發器
在資料庫中,觸發器是在發生事件時執行的語句/程式碼。一旦您為表上的特定事件建立了一個觸發器,則每次事件發生時都會執行觸發器中指定的程式碼。您可以在單個表上建立多個觸發器。
本章將教您如何使用 Apache Derby 建立和刪除觸發器。
建立觸發器
您可以使用 CREATE TRIGGER 語句在 Derby 中建立觸發器。
語法
以下是 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
示例
假設我們在 Derby 中建立了一個名為 Emp 的表,如下所示。
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) );
以下查詢在名為Emp 的 DELETE 查詢表上建立了一個觸發器。它將Emp 的已刪除行儲存到 Backup 表中。
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
刪除觸發器
您可以使用 DROP TRIGGER 語句在 Derby 中刪除觸發器。
語法
以下是 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
廣告