動態SQL 編程語言使用函數鏈接數據庫服務器,在運行時以字符串的形式構建交互查詢 如JDBC和ODBC
嵌入式SQL 嵌入式SQL必須在編譯時所有肯定,提交給預處理器,預處理器提交SQL到數據庫系統進行預編譯和優化html
JDBC java database connectivityjava
預編譯語句能夠解決SQL注入的問題mysql
public static void connectExample(String userId,String password){sql
try { Class.forName("Oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("", userId, password); Statement stmt = conn.createStatement(); stmt.executeUpdate("update student set name ='Harry' where id =1"); ResultSet rset = stmt.executeQuery("select id,name from student where id =1"); while(rset.next()){ System.out.println("id: "+rset.getString("id")+",name: "+rset.getString("name")); } }catch(Exception e){ e.printStackTrace(); } }
函數和過程數據庫
存儲過程能夠將業務邏輯持久化,提供給其餘的業務進行調用。編程
函數
http://www.javashuo.com/article/p-qwuhelrz-k.html服務器
CREATE FUNCTION func_name ( [func_parameter] ) //括號是必須的,參數是可選的
RETURNS type
[ characteristic ...] routine_bodyless
CREATE FUNCTION 用來建立函數的關鍵字;
func_name 表示函數的名稱;
func_parameters爲函數的參數列表,參數列表的形式爲:[IN|OUT|INOUT] param_name type編程語言
IN:表示輸入參數;
OUT:表示輸出參數;
INOUT:表示既能夠輸入也能夠輸出;
param_name:表示參數的名稱;
type:表示參數的類型,該類型能夠是MySQL數據庫中的任意類型;函數
RETURNS type:語句表示函數返回數據的類型;
characteristic: 指定存儲函數的特性,取值與存儲過程時相同
MYSQL
Expressions 能夠使用列值,NULL,MYSQL內置函數,用戶自定義函數來寫,其能夠在SELECT,UPDATE,DELETE,ORDER BY,HAVING語句中使用。
建立函數時mysql提示:
Error Code: 1418. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
解決方法:
SET GLOBAL log_bin_trust_function_creators = 1;
Error Code: 1054. Unknown column 'employee_id' in 'where clause'
觸發器
觸發器是一條語句,當對數據庫作響應的修改時,其被系統自動執行。
觸發器能夠實現未被SQL約束機制指定的某些完整性約束(好比未使用外鍵時保證字段值的一致性)