
數(shù)據(jù)庫的主要操作包括:
數(shù)據(jù)庫的操作:創(chuàng)建、刪除
表的操作:創(chuàng)建、修改、刪除
數(shù)據(jù)的操作:增加、修改、刪除、查詢 (簡稱crud)
數(shù)據(jù)庫系統(tǒng)解決的問題:持久化儲存,優(yōu)化讀寫,保證數(shù)據(jù)的有效性。
當(dāng)前使用的數(shù)據(jù)庫主要分為兩類:
文檔型:
如sqlite? 就是一個文件,通過對文件的復(fù)制完成數(shù)據(jù)庫的復(fù)制
服務(wù)型:
如mysql、postgre,數(shù)據(jù)儲存在一個物理文件中,但是需要使用終端以tcp/ip協(xié)議連接,進(jìn)行數(shù)據(jù)庫的讀寫操作
E-R模型
當(dāng)前物理數(shù)據(jù)庫都是按照E-R模型設(shè)計(jì)的
E表示entry 實(shí)體; 一個實(shí)體轉(zhuǎn)化為數(shù)據(jù)庫中的一個表
R表示relationship 關(guān)系;關(guān)系描述兩個實(shí)體之間的對應(yīng)規(guī)則,包括 一對一、一對多、多對多;關(guān)系轉(zhuǎn)化為數(shù)據(jù)庫中的列(在關(guān)系數(shù)據(jù)庫中一行就是一個對象)
三范式
對于設(shè)計(jì)數(shù)據(jù)庫提出了一些規(guī)范,這些規(guī)范被稱為范式
第一范式:列不可拆分
第二范式:唯一標(biāo)識
第三范式:引用主鍵
(后一個范式都是在前一個基礎(chǔ)上建立的)
數(shù)據(jù)的完整性
一個數(shù)據(jù)庫就是一個完整的業(yè)務(wù)單元,可以包含多張表,數(shù)據(jù)被存儲在表中;
在表中為了更加準(zhǔn)確的存儲數(shù)據(jù),保證數(shù)據(jù)的正確有效,可以在創(chuàng)建表的時候,為表添加一些強(qiáng)制性的驗(yàn)證,包括數(shù)據(jù)字段的類型、約束
字段類型
在mysql中包含的數(shù)據(jù)類型很多,這里主要列出來常用的幾種
*數(shù)字:tinyint,int,decimal
類型名稱? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 說明? ? ? ? ? ? ? ? ? ? ? ? 存儲需求
TINYINT? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 很小的整數(shù)? ? ? ? ? ? ? ? ? ? ? 1個字節(jié)
INT(INTEGER)? ? ? ? ? ? ? ? ? ? 普通大小的整數(shù)? ? ? ? ? ? ? 4個字節(jié)
DECIMAL(M,D)? ? ? ? ? ? ? ? ? ? 壓縮的“嚴(yán)格”定點(diǎn)數(shù)? ? ? 如果M>D為M+2個字節(jié),否則為D+2
*字符串:char,varchar,text
類型名稱? ? ? ? ? ? ? ? ? ? ? ? ? ? 說明? ? ? ? ? ? ? ? ? ? 存儲需求
CHAR(M)? ? ? 固定長度非二進(jìn)制字符串? ? M字節(jié),1<=M<=255
VARCHAR(L)? ? 變長非二進(jìn)制字符串? ? ? ? L+1字節(jié)
TEXT? ? ? ? ? ? ? ? ? 小的非二進(jìn)制字符串? ? ? ? L+2字節(jié),在此L<2^16
(注意:VARCHAR(10)列能保存的最大長度為10個字符的一個字符串,例如對于字符’? abcd’,length是4而存儲要求是5個字節(jié)。
CHAR(M)為固定長度字符串,在定義時指定字符串列長,M表示指定長度,M的取值范圍是0~255個字符,CHAR(4)定義了一個固定長度的字符串列。其包含的字符串個數(shù)最大為4.當(dāng)檢索到CHAR值時,尾部的空格將被刪除掉。)
日期:datetime
布爾:bit? (Bit稱為位數(shù)據(jù)類型,其數(shù)據(jù)有兩種取值:0和1 ,長度為1位。在輸入0以外的其他值時,系統(tǒng)均把它們當(dāng)1看待。這種數(shù)據(jù)類型常作為邏輯變量使用,用來表示真、假或是、否等二值選擇。)
約束
主鍵primary key
主鍵約束要求主鍵列的數(shù)據(jù)唯一,并且不允許為空。主鍵能夠唯一地標(biāo)識表中的一條記錄,可以結(jié)合外鍵來定義不同數(shù)據(jù)表之間的關(guān)系,并且可以加快數(shù)據(jù)庫查詢的速度,鍵分為兩種類型:單字段主鍵和多字段聯(lián)合主鍵。
非空not null
非空約束指字段的值不能為空。對于使用了非空約束的字段,如果用戶在添加數(shù)據(jù)時沒有指定值,數(shù)據(jù)庫系統(tǒng)會報錯。
惟一unique
唯一性約束要求該列唯一,允許為空,但只能出現(xiàn)一個空值。唯一約束可以確保一列或者幾列不出現(xiàn)重復(fù)值。
默認(rèn)default
默認(rèn)約束指定某列的默認(rèn)值。如男性同學(xué)較多,性別就可以默認(rèn)為‘男’。如果插入一條新的記錄時沒有為這個字段賦值,那么系統(tǒng)會自動為這個字段賦值為‘男’
外鍵foreign key
如果表A的主關(guān)鍵字是表B中的字段,則該字段稱為表B的外鍵,表A稱為主表,表B稱為從表。外鍵是用來實(shí)現(xiàn)參照完整性的。