SQL語言包括
數據定義:Create Table,Alter Table,Drop Table, Craete/Drop Index等
數據操縱:Select ,insert,update,delete,
數據控制:grant,revokesql
實體完整性、參照完整性、用戶定義完整性數據庫
1NF:每一個屬性是不可分的。
2NF:若關係R是1NF,且每一個非主屬性都徹底函數依賴於R的鍵。
3NF:若R是2NF,且它的任何非鍵屬性都不傳遞依賴於任何候選鍵。
安全
事務:是一系列的數據庫操做,是數據庫應用的基本邏輯單位。服務器
事務性質:
原子性。即不可分割性,事務要麼所有被執行,要麼就所有不被執行。
一致性或可串性。事務的執行使得數據庫從一種正確狀態轉換成另外一種正確狀態
隔離性。在事務正確提交以前,不容許把該事務對數據的任何改變提供給任何其餘事務,
持久性。事務正確提交後,其結果將永久保存在數據庫中,即便在事務提交後有了其餘故障,事務的處理結果也會獲得保存。網絡
1.重複使用。存儲過程能夠重複使用,從而能夠減小數據庫開發人員的工做量。函數
2.提升性能。存儲過程在建立的時候在進行了編譯,未來使用的時候再也不從新翻譯。通常的SQL語句每執行一次就須要編譯一次,因此使用存儲過程提升了效率。性能
3.減小網絡流量。存儲過程位於服務器上,調用的時候只須要傳遞存儲過程的名稱以及參數就能夠了,所以下降了網絡傳輸的數據量。優化
4.安全性。參數化的存儲過程能夠防止SQL注入式攻擊,並且能夠將Grant、Deny以及Revoke權限應用於存儲過程。spa
觸發時間:有before,after.翻譯
觸發事件:有insert,update,delete三種。
觸發類型:有行觸發、語句觸發
內聯接,外聯接:
內鏈接是保證兩個表中全部的行都要知足鏈接條件。
外鏈接分左鏈接、右鏈接、全鏈接三種。
INNER JOIN 在表中存在至少一個匹配時。
LEFT JOIN 關鍵字會從左表 (table_name1) 那裏返回全部的行,即便在右表 (table_name2) 中沒有匹配的行。
RIGHT JOIN 關鍵字會右表 (table_name2) 那裏返回全部的行,即便在左表 (table_name1) 中沒有匹配的行。
FULL JOIN 只要其中某個表存在匹配,FULL JOIN 關鍵字就會返回行。
當sql語句在執行查詢操做的時候,有兩種搜索方式。第一種搜索信息方式是全表搜索,第二種根據索引,找到符合查詢條件的索引值,再經過保存在索引中的ROWID(至關於頁碼)快速找到表中對應的記錄。
創建索引的優勢
1.大大加快數據的檢索速度;
2.建立惟一性索引,保證數據庫表中每一行數據的惟一性;
3.加速表和表之間的鏈接;
4.在使用分組和排序子句進行數據檢索時,能夠顯著減小查詢中分組和排序的時間。
索引的缺點
1.索引須要佔物理空間。
2.當對錶中的數據進行增長、刪除和修改的時候,索引也要動態的維護,下降了數據的維護速度。
索引的設計原則:
提升查詢語句的效率,減慢了DML語句的速度。
在全表掃描和索引之間權衡。
可以使用組合索引的則儘可能使用組合索引。
對於大表,儘可能利用local的分區索引。
索引使用的一些具體規則:
在哪些列上創建索引:
Where字局中引用的列
Join中利用的列
在子表的FK上創建索引(防止對父表操做時鎖住子表)
在哪些列上不要創建索引:
常常有DML操做
排它性小
不建議表上索引超過5個
索引不起做用的狀況:
存在數據類型隱形轉換
列上有數學運算
使用不等於(< >)運算
使用substr字符串函數
%通配符在第一個字符
字符串鏈接(||)
刪除不使用的索引
按期重建大量刪除操做的索引
建表時的優化:
一、只要能知足你的需求,應儘量使用更小的數據類型:例如使用MEDIUMINT代替INT
二、儘可能把全部的列設置爲NOT NULL,若是你要保存NULL,手動去設置它,而不是把它設爲默認值。
三、儘可能少用VARCHAR、TEXT、BLOB類型
四、若是你的數據只有你所知的少許的幾個。最好使用ENUM類型
五、創建索引。
查詢語句的優化:
編寫原則:
對於任何sql語句,必定要考慮其性能。
避免使用複雜的sql語句
避免沒必要要的排序
使用表的別名
Select語句避免使用*
具體細節規則:
Where條件中等號左邊不用引用函數
Where條件中對於不一樣的數據類型,要作顯示轉換。
使用not exists 替代not in,exists替代in,exists語句能夠有效的利用索引。
使用>=、<=,避免使用not命令
使用union,替代or