《資料庫系統概念》讀書筆記——概念、SQL、JDBC、ER、正規化等
1、關係型資料庫
列:欄位/屬性 行:元組/記錄
關係:笛卡爾積中符合某種關係的元組(笛卡爾積是從兩個關係中合併元組)
超碼是可以唯一標識元組的屬性組合,候選碼是最小的超碼,主碼是被選中的候選碼
2、SQL
有char(n),varchar(n),int,smallint,numeric(p, d),float(n),date,time,timestamp,blob(二進位制字串),text(字元字串)等型別。
char是定長字串,varchar不定長。
int(11)中11表示顯示寬度,不影響int的大小(32位),當數值位數未達到顯示寬度時在前面補0。
語法:(1)foreign key(user_id) references user(id);
(2)自然連線:select t1.A, t2.B from t1 natural join t2;只考慮t1和t2在共同屬性上相同的元組,等價於select t1.A, t2.B from t1, t2 where t1.x = t2.x;可以用join ... using指定連線的欄位/屬性
(3)like ... escape '\':模式匹配,%表示任意子串,_表示任意一個字元,escape可以定義轉義字元,例如like ‘ab\%cd%’escape '\'可以匹配所有以abcd開頭的字串
(4)order by ... desc
(5)元組相等:where (a1, a2) = (b1, b2)
(6)集合運算:union,自動去重,全部保留的話可以用union all
intersect(all) 交集,A∩B except 差集,A-B
(7)null 用is (not) null判斷是否為空,其他對null運算的結果視為unknown,如果所有屬性相等,有null元組也視為相等
(8)聚集函式:avg,min,max,sum,count等,可以單獨使用也可以放在group by ... having ...裡的having後,忽略空值
(9)巢狀子查詢:(not) in,some/all, (not) exists,unique等
例如select ... where salary > some ( select ...)
(10)外連線
left outer join ... on ... 保留左邊的元組,如果右邊沒有和左邊對應的元組則為null;如果左邊一個元祖對應多個右邊的元組則全部保留,重複左邊的元組
right outer join ... on ... 右外連線,保留右邊的元組
full outer join ... on ... 全外連線,全部保留
(11)alter table t add/drop/modify:修改表
(12)select ... for update:加排他鎖,僅用於InnoDB事務塊中
3、檢視
create view v as ( select ...);
並不預先計算,只是儲存定義,檢視隨表的變化而變化。檢視一般不允許修改,例如insert時,不在檢視中的列在表中就會為null,會產生問題。
4、完整性約束
not null,unique,check (A>B),foreign key (user_id) references user(id)等
外來鍵約束可以定義級聯刪除
5、JDBC連線資料庫
public static void main(String[] args) throws Exception {
Connection conn = null;
String sql;
// MySQL的JDBC URL編寫方式:jdbc:mysql://主機名稱:連線埠/資料庫的名稱?引數=值
// 避免中文亂碼要指定useUnicode和characterEncoding
String url = "jdbc:mysql://localhost:3306/mydb?"
+ "user=root&password=123456&useUnicode=true&characterEncoding=UTF8";
try {
// 可以通過Class.forName把它載入進去,也可以通過初始化來驅動起來,下面三種形式都可以
Class.forName("com.mysql.jdbc.Driver");
// or:
// com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver();
// or:
// new com.mysql.jdbc.Driver();
System.out.println("成功載入MySQL驅動程式");
// 一個Connection代表一個數據庫連線
conn = DriverManager.getConnection(url);
// Statement裡面帶有很多方法,比如executeUpdate可以實現插入,更新和刪除等
Statement stmt = conn.createStatement();
sql = "create table student(NO char(20),name varchar(20),primary key(NO))";
int result = stmt.executeUpdate(sql);// executeUpdate語句會返回一個受影響的行數,如果返回-1就沒有成功
}
} catch (SQLException e) {
System.out.println("MySQL操作錯誤");
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.close();
}
}
可以使用PreparedStatement,防止sql注入,輸入的字串會被插入轉義字元
6、E-R圖,實體-聯絡圖
長方形表示實體,橢圓表示屬性,菱形表示聯絡;1:n表示一對多,m:n表示多對多
7、正規化
主屬性:候選碼中的屬性
傳遞依賴:如果X→Y,Y→Z,且X不包含Y,Y!→X(Y不能決定X), (X∪Y)∩Z = ∅,則Z傳遞依賴於X
1NF:屬性不可分
2NF:完全依賴主鍵
3NF:非主屬性欄位互不依賴(消除了非主屬性對主屬性的傳遞依賴)
BCNF:消除了所有屬性對主屬性的傳遞依賴,如果表中有X→Y,則X一定是候選碼
相關推薦
《資料庫系統概念》讀書筆記——概念、SQL、JDBC、ER、正規化等
1、關係型資料庫 列:欄位/屬性 行:元組/記錄 關係:笛卡爾積中符合某種關係的元組(笛卡爾積是從兩個關係中合併元組) 超碼是可以唯一標識元組的屬性組合,候選碼是最小的超碼,主碼是被選中的候選碼 2、SQL 有char(n)
資料庫系統概念讀書筆記(1)——引言
資料庫管理系統:有一個互相關聯的資料的集合和一組用以訪問這些資料的程式組成,這個資料集合就叫做資料庫。上來就先寫上一個概念,作為這本書的主線。 1.資料庫的出現的必要性和對資料庫的要求 儘管檔案系統可以解決不少問題,但是下面的問題是檔案系統所無法解決的,如果給檔案系統加上這些
資料庫系統概念 讀書筆記(四)
SQL 支援資料型別: char(10):如果輸入字串為“Avi”,則該字串後追加七個空格十七達到10個字串的長度。 varchar(10):支援最大字串長度。如果輸入字串為“Avi”,則不會補充空
資料庫系統概論01-基本概念&特點& 三級模型結構&二級映像
從聯機事務處理(On-Line Transaction Processing,LOTP)到聯機分析處理(On-Line Analysis Processing,OLAP) 從一般企業管理到計算機輔助設計與製作(CAD/CAM)、計算機整合制造系統(CIMS)、電子政務(e-G
【作業系統概念 讀書筆記】第一章 導論
作業系統(operating system)是管理計算機硬體的程式。為應用程式提供基礎,並且充當計算機使用者和計算機硬體的中介。 1.1作業系統的功能 硬體hardware:中央處理單元Central Processing Unit CPU、記憶體memory、輸入/
資料庫系統概論學習筆記(四):SQL的簡單應用之資料查詢
嗯……最實用的部分,其他都可以不會,唯獨這個必須熟練吧 —— 資料查詢 這篇筆記主要是例子,使用的例子是《筆記(三)》中定義的學生選課關係。使用的SQL語句可能與教材上有些出入,因為我使用的是MySQL 5.7,對SQL語言支援可能會有些許差異。
資料庫系統概論學習筆記(六):SQL的簡單應用之試檢視
資料邏輯獨立的一種解決方案 —— 檢視 “檢視”,可以視為關係資料庫模式結構中的外模式。其作用主要是: ①、簡化使用者的操作。DBA通過檢視,可以過濾掉與使用者無關的資訊,讓使用者更加專注於其工作的內容。 ②、使使用者能夠以多種角度看待同一資料。這一作
《深入理解計算機系統》——讀書筆記(一)
img 可執行 即將 簡單的 world std 加載 完整 .exe 這本書從一個簡單的C語言的HelloWorld程序講起... 這是這個小程序的生命周期的一個部分: HellOWorld程序,從被創建(文本格式),到被執行(在屏幕上打印出來)。 其
《深入理解計算機系統》讀書筆記(ch2)+ C 泛型
tex byte 指向 get 讀書筆記 class its n) 支持 本章主要介紹各類型的機器表示,Stanford的CS107的lec2和lec3有精彩解釋,比看書快(當作書中只是的cache吧)。 lec4中介紹的C裏面如何使用泛型(沒有template, refe
資料庫系統概論複習筆記
Abstract: 資料庫系統概論期末複習筆記 ~btw:歡迎關注 ~ Github: https://github.com/ScarlettYellow個人部落格:https://scarletthuang.cn/PART1 資料庫概述關係模型的構成:關係資料結構、關係操作
資料庫系統實現學習筆記二(資料庫關係建模)--by穆晨
前言 ER建模環節完成後,需求就被描述成了ER圖。之後,便可根據這個ER圖設計相應的關係表了。 但從ER圖到具體關係表的建立還需要經過兩個步驟: 邏輯模型設計:將ER圖對映為邏輯意義上的
讀書筆記-《Effective Java》第3條、第4條: 強化Singleton屬性—私有構造器或者列舉型別
第3條:用私有構造器或者列舉型別強化Singleton屬性 把構造器私有這個是單例基本要求,本條介紹了一種不知道為啥沒有流行起來的單例方式(實現Singleton的最佳方式),包含單個元素的列舉型別(INSTANCE不是關鍵字,寫別的也行) package org.test; p
資料庫系統實現學習筆記三(更新異常與規範化設計)--by穆晨
前言 在前兩篇中,主要講了ER建模和關係建模。在具體分析如何用資料庫管理軟體RDBMS(Relational Database Management System)實現這些關係前,我想有必要思考下面這個問題:  
《深入淺出MySQL》讀書筆記五:SQL優化
一、SQL優化的一般步驟 show status like 'pattern%'; 檢視資料庫的執行時狀態 show variables like 'pattern%'; 檢視資料庫啟動時的配置資訊 1、首先需要定位執行效率有問題的SQL: a、執行效率有
《深入淺出MySQL》 讀書筆記一:SQL基礎
一、SQL分類 1、create、drop、alter等,屬於 資料定義語言 2、insert、delete、update、select 屬於 資料操縱語句 3、grant等 定義訪問許可權和安全級別 屬於 資料控制語句 二、資料定義語句 mysql -uroot -p 輸入密
推薦系統實踐讀書筆記(一):好的推薦系統
設計一個推薦系統之前,一定要了解什麼樣的推薦系統才是好的推薦系統至關重要。那麼一個優秀的推薦系統具有哪些特徵呢?(量化或者概念性的特徵) 通過以下三個步驟回答一個優秀的推薦系統是什麼樣的 1)什麼是推薦系統、推薦系統的主要任務、推薦系統和分類目錄以及搜尋引擎的區別 2)不同領域分門別類的介紹
linux中proc檔案系統 -- ldd3讀書筆記
1./proc 檔案系統概述 /proc 檔案系統是由軟體建立,被核心用來向外界報告資訊的一個檔案系統。/proc 下面的每一個檔案都和一個核心函式相關聯,當檔案的被讀取時,與之對應的核心函式用於產生檔案的內容。我們已經見到了很多這樣的檔案,例如,/pr
讀書筆記:實現string類的建構函式、拷貝建構函式、解構函式、過載運算子=
#include <iostream> #include <cassert> #include <cstring> using namespace std; class MyString{ public: MyString(co
《深入理解計算機系統》讀書筆記7--- 併發程式設計1
CSAPP介紹了三種併發程式設計技術:(1)程序(2)I/O多路複用(3)執行緒 還有對於多執行緒併發程式設計的一些問題的思考 本帖先介紹三種併發模型,下一貼介紹多執行緒併發注意事項。 (1)基於程序的併發程式設計 核心函式就是fork。用父程序不停接受socket連線,f
《深入理解計算機系統》讀書筆記——第七章 連結
連結 有兩個c檔案: /* main.c */ void swap(); int buf[2] = {1, 2}; int main() { swap(); return 0; } /* swap.c */ extern int buf[]; int *b