insert可以插入部分字段,其餘字段自動為null,刪除表的語句是
drop table if exists 表名
12.表的複製語句是create table emp2 as select empno,ename from emp;更新語句是update dept1 set loc =』shanghai』,dname=』renshibu』 where deptno=10;沒有where就所有都替換
表的刪除語句是delete from dept1 where deptno=10;同樣如果沒有where就全部刪除。truncate table emp2這個語句是高效刪除,delete效率其實比較低,而且可以回滾,truncate是徹底刪除表中資料
13.約束(constraint)比較重要,保證資料的合法性,有效性,完整性
a非空約束(not null)約束的字段不能為空
b唯一約束(unique)約束的字段不能重複,可以為null,null不算重複
c主鍵約束(primary key)pk約束的字段不能為空,也不能為null
f外來鍵約束(foreign key)fk
上面那個usercode和username可以有乙個重複乙個不重複,下面那個都不能重複
表設計的第一正規化要求表必須要有主鍵,主鍵代表唯一標識,是列級約束,就像身份證號一樣,且一張表的主鍵約束只能有乙個,但是身份證號或者銀行卡號不用作主鍵,而是用自然主鍵,最好不要拿著和業務相關的字段做主鍵,因為一旦業務改變主鍵值也需要變化,而主鍵不能改變,所以主鍵不要和業務發生關係
primary key auto_increment主鍵自增的方式,主鍵不需要再賦值,當然也可以賦值,primary key auto_increment要寫在後面,而不能用括號寫,錯誤原因未知
外來鍵字段不一定是主鍵,但是必須要有唯一性
mysql建立的表內容是utf-8,這是在安裝mysql時勾選的,而cmd中顯示的是gbk,所以會出現亂碼。儲存引擎叫engine,放在建表語句的最後面,預設使用innodb,每乙個儲存引擎都有自己的優缺點,最常用的是myisam儲存引擎,包括三部分,frm格式,myd資料,myi索引,不支援事務,可壓縮,節省儲存空間。innodb支援事務,外來鍵,行級鎖等
14.非常安全,執行級聯刪除和級聯更新。memory儲存引擎查詢速度最快,斷電就沒有了。儲存引擎就是表的儲存方式
15.乙個事務是乙個完整的邏輯單元,不可分割,比如從a賬戶向b賬戶轉賬,兩條dml語句,不允許一條成功一條失敗,這就需要用到事務機制,和事務相關的也只有dml語句
tcl(只有commit和rollback)語句,commit提交,把多個dml語句同時執行並刪除記錄,rollback回滾不執行且刪除記錄。dcl(授權)語句。多執行緒同步和事務都是為了保證資料的安全性。事務的四大特性是acid,a原子性,事務是乙個最小單元不可再分,c一致性,事務保證多條語句同時執行,i,事務與事務之間具有隔離性,有多種隔離級別,d,永續性,資料最終必須存入硬碟中事務才算結束
隔離級別:
a.第一級別:讀未提交(read uncommitted)這種級別很少用,對方還未提交就可以讀到,存在髒讀現象
set global transaction isolation level read uncommitted
b.第二級別:讀已提交(read committed),對方提交了就可以讀到,解決了髒讀現象,但是無法重複讀,因為對方一直修改,讀到的就一直變
set global transaction isolation level read committed
c.第**別:可重複讀(repeatable read)這是預設的級別,這種級別解決了無法重複讀的問題,但是讀到的資料都是幻想
d.第四級別:序列化讀/序列化讀(serializable),解決了所有問題,但是效率低,事務需要排隊
mysql的事務是自動提交的,只要執行一次dml語句,就提交一次,想要不自動提交,需要start transaction
16.索引可以大大提高檢索效率,這可以聯想到雜湊表的二叉樹排序,紅黑數,其實索引底層是b-tree,可見資料結構對於提高速度有非常大的作用,雖然索引可以提高檢索效率,但是索引會重新排序,需要維護成本,所以經常修改的東西不用索引
什麼時候欄位用索引:a資料量龐大,查詢時間過長b很少的dml操作c這個字段經常出現在where語句中,是查詢的條件。主鍵和unique效率較高,盡量根據主鍵索引。
create index 索引名稱 on表名(欄位名);
drop index 索引名稱 on 表名;
當沒有索引時,是全表掃瞄,效率較低,建立索引後,會在硬碟生成索引檔案
索引的分類:
a.單一索引:給單個字段新增索引
b.復合索引:多個字段聯合起來新增乙個索引
c.主鍵索引:主鍵欄位會自動新增乙個索引
d.唯一索引:有unique的約束的字段會自動新增索引
模糊查詢第乙個萬用字元使用百分號索引會失效
17.create view myview as select ename,empno from emp;
檢視crud跟表差不多,且檢視修改也會影響到原表,檢視可以隱藏表的細節,一般用在需要保密的資料庫
資料表三正規化:
a每一張表都應該有乙個主鍵,並且每乙個字段原子性不可再分
b所有非關鍵字段完全依賴主鍵,不能產生部分依賴,多對多需要三張表,關係表兩個外來鍵
c所有非主鍵字段直接依賴主鍵,不能產生傳遞依賴
在實際開發中,有時候會用冗餘換速度
索引,資料庫三正規化,crud都是非常重要的內容
jdbc設定事務,在cnn連線上後sql執行之前加上cnn.setautocommit(false);取消自動提交。
在sql執行完之後加上cnn.commit();
在異常處理處執行cnn.rollback();這樣保證sql執行若出現異常也能回滾,因為這時候事務並沒有提交
19.工具類的構造方法一般都是私有的,只執行一次的東西可以放在靜態**塊當中,行級鎖也叫悲觀鎖,select後面新增for update就行,事務開啟行級鎖鎖定,別的事務就不能操作鎖定的東西
資料庫常識
資料儲存的發展史,最開始由手動管理,後來發展為檔案管理。檔案儲存的缺點 1.在儲存資料時,沒有一定的結構 2.不便於修改資料 3.資料越來越多,檔案容易丟失 後來發展為使用資料庫進行資料的儲存和管理。tcp協議的埠號 1521 oracle預設的 http協議的埠號 8080 sid為資料庫的唯一識...
資料庫細節1
1.set names gbk 客戶端顯示編碼 2.mysql中,在後面加 g表示將查詢結果按列列印。預設情況下,mysql的查詢結果是橫向輸出的,第一行是列頭,後面是記錄集,比如 id name depid 1 tonny 1 3.左外連線 顯示左表的全部記錄及右表符合連線條件的記錄 4.多表的連...
常識及資料庫面試2
一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結...