數據查詢(DQL):select
數據定義(DDL):create,drop,alter
數據操縱(DML):insert,update,delete
數據控制(DCL):grant,revoke
1)建立索引(索引是B+樹實現的)(提高查詢效率,加快表與表之間的連接,建立需要存儲空間)
普通索引
create index stusex on student(ssex);
create index stusexandname on student(ssex,sname);//多列的
唯一索引
create unique index stusno on student(sno);
刪除索引
drop index stusno on student;
顯示索引
show index from student;
2)創建表,修改表
create table xxx (xno int(5) primary key, xname char(20) not null unique, xscore int(5) default 6);
alter table xxx add xsex char(66);
事務acid
- 原子性(Atomicity):事務中包含的操作集合,要么全部操作執行完成,要么全部都不執行。即當事務執行過程中,發生了某些異常情況,如系統崩潰、執行出錯,則需要對已執行的操作進行回滾,清除所有執行痕跡。
- 一致性(Consistency):事務執行前和事務執行后,數據庫的完整性約束不被破壞。即事務的執行是從一個有效狀態轉移到另一個有效狀態。
- 隔離性(Isolation):多個事務並發執行時,彼此之間不應該存在相互影響。隔離程度不是絕對的,每個數據庫都提供有自己的隔離級別,每個數據庫的默認隔離級別也不盡相同。
- 持久性(Durability):事務正常執行完畢后,對數據庫的修改是永久性的。即事務的修改操作已經記錄到了存儲介質中。
-
隔離級別:未提交讀、提交讀、可重復讀、可串行化
- 未提交讀(Read Uncommitted):一個事務過程中可以讀取到其他事務對數據的未提交修改。即事務的修改階段未加排他鎖,對其他事務可見。例如事務 T1可能讀取到只是事務 T2 中某一步的修改狀態,即存在臟讀的現象。
臟讀指的是,事務讀取到的數據可能是不正確、不合理或者處於非法狀態的數據,例如在事務T1讀取后,事務T2可能又對數據做了修改,或者事務T2中某些操作違反了一致性約束,作了回滾操作,該情況下事務T1讀取到的數據稱之為臟數據,該行為稱之為臟讀。
- 提交讀(Read Committed):一個事務過程中只能讀取到其他事務對數據的提交后修改。即事務的修改階段加了排它鎖,直到事務結束才釋放,執行讀命令那一刻加了共享鎖,讀完即釋放,以此維持事務修改階段對其他事務的不可見。例如事務T1讀取到的只能是事務T2提交完成后的狀態。該隔離級別避免了臟讀現象,但正是由於事務T1可能讀取到的是事務T2修改完成后的數據,以致出現了不可重復讀現象。
不可重復讀指的是,對於同一個事務的前后兩次讀取操作,讀取到的內容不同。例如在事務T1讀取操作后,事務T2可能對數據做了修改,事務T2修改完成提交后,事務T1又做了讀取操作,因為內容已被修改,導致讀取到的內容與上一次不同,即存在不可重復讀現象。
- 可重復讀(Repeatable Reads):一個事務過程中不允許其他事務對數據進行修改。即事務的讀取過程加了共享鎖,事務的修改過程加了排它鎖,並一直維持鎖定狀態直到事務結束。因為事務的讀取或修改都需要維持整個階段的鎖定狀態,所以避免了臟讀和不可重復讀現象。但是因為只對現有的記錄上進行了鎖定,並未維持間隙鎖/范圍鎖,導致某些數據記錄的插入未受阻攔,即存在幻讀現象。
幻讀指的是,事務中前后相同的查詢語句,返回的結果集不同。例如在事務T1查詢表記錄后,事務T2向表中增加了一條記錄,當事務T1再次執行相同的查詢時,返回的結果集可能不同,即存在幻讀現象。
- 可串行化(Serializable):一個事務過程中不允許其他事務對指定范圍數據進行修改。即事務過程中若指定了操作集合的范圍,則在可重復讀的鎖基礎上增加了對操作集合的范圍鎖,通過增加范圍鎖避免了幻讀現象。
參考:https://www.jianshu.com/p/f3605aacf7cf