ORM在網站開發結構中在設計用來幫助更容易去取得資料庫資料,其特性為用程式語言來取得sql資料
優點: 可以迅速開發、代碼轉移方便、防止Sql Injection攻擊
缺點: 比其直接使用sql語法效能較差
假設要登入一個網站,再輸入帳密後後台直接使用sql語法的話會執行下列command查詢select * from members where account='$name' and password='$password'
但如果此時駭客使用特殊字符帳號or 1=1 /*
,這時sql語法會變成如下select * from members where account='' or 1=1 /*' and password=''
因為/*
在sql語法裡為註解意思,所以後面都不會被執行此時判斷式1=1會成立因此會導致網站可以登入
資料庫在處理資料時,會需要遵從transaction,
例如:銀行金融系統,A要轉帳給B,假設今天A帳戶已經扣掉金額,但在B帳戶新增金額時處理錯誤,會導致金額消失,因此ACID主要在定義database中容易出現上述問題的情形
1.交易金額不得小於0
、2.雙方金額加總一樣
,在處理前處理後都必須遵守此規則為一致性transaction主要在保證資料庫在處理資料時不會發生上述ACID情況,數據庫在執行時包括以下幾種狀態
當程序要查詢id=125的query時,在sql裡會逐行去查詢,因此假設query裡有N列,包括一開始打開table表,會執行N+1次,因此在使用table表時可以先將所有的database直接load進程式後再做處理,詳細使用需參考各個tool ORM的使用方式,sql語法主要使用到in語法,django可以使用以下工具檢測N+1 problem nplusone