日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL老黄牛

發布時間:2023/12/16 数据库 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL老黄牛 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SQL進階

  • 事務 transaction
    • 特性ACID
    • 隔離級別
    • 事務處理
  • 約束 constaints
  • 表關聯 association
    • 表的關系分為四種
    • 創建表
    • 多表聯查 join
    • 笛卡爾積
    • join
      • 多表聯查案例
  • 子查詢(嵌套查詢)
    • 單行子查詢 =
    • 多行子查詢 in
  • 索引 index
    • 索引分類
    • 查看索引
    • 創建普通索引
    • 創建唯一索引
    • 創建復合索引
    • 刪除索引
    • 為何索引快
    • 優點
    • 缺點

事務 transaction

數據庫事務(Database Transaction) 是指作為單個邏輯工作單元執行的一系列操作,要么完全地執行,要么完全地不執行
簡單來說:
事務就是將一堆的SQL語句(通常是增刪改)綁定在一起執行,要么都執行成功,要么都執行失敗,即都執行成功才算成功,否則這些SQL語句就會恢復到執行之前的狀態。

特性ACID

  • 原子性 Atomicity
    一個事務中的所有操作,要么全部成功,要么全部不成功,不會結束在中間某個環節。
    事務在執行過程中如果發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
  • 一致性 Consistency
    在事務開始之前和事務結束以后,數據庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及后續數據庫可以自發性地完成預定的工作。
  • 隔離性 Isolation
    數據庫允許多個并發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行導致數據的不一致。
  • 持久性 Durability
    事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。

隔離級別

  • 讀未提交 Read Uncommitted
    安全性最差,可能發生并發數據問題,性能最好
  • 讀提交 Read Committed
    Oracle默認的隔離級別
  • 可重復讀 Repeatable Read
    MySQL默認的隔離級別,安全性較好,性能一般
  • 串行化 Serializable
    表級鎖,讀寫都加鎖,效率低下,安全性高,不能并發在

事務處理

  • 在MySQL 中只有使用了 innodb 數據庫引擎的數據庫或表 才支持事務
  • 事務處理可以用來維護數據的完整性,保證成批的SQL 語句要么全部執行,要么全部不執行
  • 事務用來管理 insert、update、delete 語句,因為這些操作才會破壞數據,select 語句是不會的
  • MySQL 默認數據庫的事務是開啟的,執行SQL后自動提價
  • MySQL的事務也可以改成手動提交,那就有兩個步驟:
    先開啟,寫完SQL 后,再手動提價。

開啟事務

start transaction; begin;

結束事務

commit; -- 提交事務 rollback; -- 回滾事務

約束 constaints

  • 非空約束 not null
  • 唯一約束 unique
  • 主鍵約束 primary key
  • 外鍵約束 foreign key
  • 默認約束 default
  • 檢查約束 check

表關聯 association

表的關系分為四種

  • 一對一
    QQ和QQ郵箱,員工和員工編號
  • 一對多
    部門和員工,用戶和訂單
  • 多對一
    員工和部門,訂單和用戶
  • 多對多
    老師和學生,老師和課程

創建表

  • 表都以s結束,標識復數
  • 字段多以表的首字母作為開頭,在多表聯查時,方便標識出哪個表的字段

多表聯查 join

笛卡爾積

select * from dept,emp;

多表查詢都是先生成笛卡爾積,再進行數據的篩選過濾

join

  • 內連接 inner join
  • 左外連接 left join
  • 右外連接 right join

多表聯查案例

案例: 列出research 部門下的所有員工的信息

select * from emp where deptno=(select deptno from dept where dname="research");

使用 inner join 實現上面的案例

select d.dname,e.ename,e.job from emp e inner join dept d on e.deptno = d.deptno where d.dname = "research";

select d.dname,e.ename,e.job
from emp e inner join dept d
on e.deptno = d.deptno
where d.dname = “research”;

  • inner join 兩邊都對應有記錄的才展示,其他去掉
  • left join 左邊表中的數據都出現,右邊沒有數據以null填充
  • right join 右邊表中的數據都出現,左邊沒有數據以null填充

子查詢(嵌套查詢)

單行子查詢 =

select * from emp where deptno = (select deptno from emp where ename="tony"); --查詢tony所在的部門的所有人信息

多行子查詢 in

select * from emp where job in("經理","員工"); select * from emp where job in(select job from emp where ename="leo");除了leo誰還從事該工作 select * from emp where job in(select distinct job from emp);

索引 index

定義
索引是一種排好序的快速查找的數據結構,它幫助數據庫高效的進行數據的檢索。在數據之外,數據庫系統還維護著特定查找算法的數據結構(額外的存儲空間),這些數據結構以某種方式指向數據,這樣就可以在這些數據結構上實現高效的查找算法。這種數據結構就叫做索引。

一般來說索引本身也很大,不可能全部存儲在內存中,因此往往以索引文件的形式存放在磁盤中。目前大多索引都采用BTree樹方式構建。

索引分類

  • 單值索引:
    一個索引只包括一個列,一個表可以有多個列
  • 唯一索引:
    索引列的值必須是唯一,但允許有空值;主鍵會自動創建唯一索引
  • 復合索引:
    一個索引同時包含多列

查看索引

主鍵會自動創建索引

show index from dept

創建普通索引

create index loc_index on dept(loc); alter table dept add index loc_index(loc);

創建唯一索引

create unique index loc_unique_index on dept(loc); alter table dept add unique index loc_unique_index(loc);

創建復合索引

create index emp_composite_index on emp(empno,ename); alter table emp add index emp_composite_index(empno,ename);

刪除索引

alter table dept drop index loc_index

為何索引快

首先,索引表是排序了,可以類似二分查找,非常有效的提高了查詢的速度。
先找到事先排序好的索引表中檢索查詢,找到其主鍵后,就直接定位到記錄所在位置,然后直接返回這條數據。

  • 排序、tree結構、類似二分查找
  • 索引表小

優點

  • 索引是數據庫優化
  • 表的主鍵會默認自動創建索引
  • 每個字段都可以被索引
  • 大量降低數據庫的IO磁盤讀寫成本,極大提高了檢索速度
  • 索引事先對數據庫進行了排序,大大提高了查詢效率

缺點

  • 索引本身也是一張表,該表保存了主鍵與索引字段,并指向實體表的記錄,所以索引列也要占用空間
  • 索引表中的內容,在業務表中都有,數據是重復的,空間是浪費的
  • 雖然索引大大提高了查詢的速度,但對數據的增、刪、改的操作需要更新索引表信息,如果數據量非常巨大,更新效率就很慢,因為更新表時,MySQL不僅要保存數據,也要保存一下索引文件
  • 隨著業務的不斷變化,之前建立的索引可能不能滿足查詢需求,需要消耗我們的時間去更新索引

總結

以上是生活随笔為你收集整理的SQL老黄牛的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。