1. 程式人生 > >資料庫知識點總結——轉載

資料庫知識點總結——轉載

資料庫知識點總結歸納

一、基本概念

1、資料

(1)資料的定義:對客觀事物的符號表示,如圖形符號、數字、字母等,資料是資料庫中儲存的基本物件。

(2)資料的種類:文字、圖形、影象、聲音

(3)資料的特點:資料與其語義是不可分的

 

2、資料庫

 資料庫(DataBase簡稱DB)是按照資料結構來組織、儲存和管理資料的倉庫。

 

3、資料庫管理系統(比如:MySql)

(1)資料庫管理系統(Database Management System 簡稱DBMS)是一種操縱和管理資料庫的大型軟體,是用於建立、使用和維護資料庫。

(2)關係型資料庫管理系統稱為RDBMS,R指Relation。

(3)DBMS的作用:它對資料庫進行統一的管理和控制,以保證資料庫的安全性和完整性。

 

4、資料庫系統

資料庫系統(Database System,簡稱DBS),是由資料庫及其管理軟體組成的系統。

 

5、資料庫管理員

資料庫管理員(Database Administrator,簡稱DBA),負責全面管理和控制資料庫系統。

 

6、DBA、DBMS、DB和DBS之間的關係

7、資料庫的優點

(1)資料按一定的資料模型組織、描述和儲存

(2)可為各種使用者共享

(3)冗餘度較小,節省儲存空間

(4)易擴充套件,編寫有關資料庫應用程式

 

二、資料庫管理系統(DBMS)

1、DBMS的主要功能

(1)資料定義功能:提供資料定義語言(DDL,Data Definition Language)

  用於定義資料庫的所有特性和屬性,尤其是行佈局、列定義、鍵列(有時是選鍵方法)、檔案位置和儲存策略,包括命令:

  DROP(刪除資料庫)

           刪除資料庫:drop database if exists 資料庫名

  CREATE(建立資料庫)

           建立表:create table if not exists 表名(列名 列名約束)

  ALTER(修改資料庫)

           新增列名:alter table 表名 add 列名 約束條件

           修改列名:alter table 表名 change 老列名 新列名 資料型別

           修改列欄位資料型別:alter table 表名 modity 列名 資料型別

           刪除列名:alter table 表名 drop 列名

           修改表名:alter table 表名 rename 新表名

  GRANT(賦予許可權)

  REVOKE(從當前使用者或組中取消許可權)、TRUNCATE(只刪除表中的所有資料,不刪除表的結構)

注意:truncate table命令將快速刪除資料表中的所有記錄,但保留資料表結構。這種快速刪除與delete from資料表的輸出全部資料表記錄不一樣,delete命令刪除的資料將儲存在系統回滾段中,需要的時候,資料可以回滾恢復,而truncate命令刪除的資料是不可恢復的。

 

(2)資料操縱功能:提供資料操縱語言(DML,Data Manipulation Language)

操縱資料實現對資料庫的基本操作:

  SELECT(查詢)

          select from 表名 where 條件(條件1 and 條件2)

  INSERT(插入)

          insert into 表名(列1,列2) values(' ',' '),(' ',' '),(' ',' ')

  DELETE(刪除)

          delete from 表名 where 條件

  UPDATE(修改)

          update 表名 set 列名=' ',列名=' ' where 條件

 

(3)資料庫的執行管理

  a、保證資料的安全性、完整性

  b、多使用者對資料的併發使用

  c、發生故障後的系統恢復

 

(4)資料庫的建立和維護功能(實用程式)

  a、資料庫資料批量裝載

  b、資料庫轉儲

  c、(儲存介質)介質故障的修復

  d、資料庫的重組織

  e、效能監視

 

2、DBMS的分類(大公司首選oracle-----資料庫中的貴族)

  小型資料庫:Access、foxbase、sqlite

  中型資料庫:mysql、sql server、infomix

  大型資料庫:Sybase、Oracle、db2

   

  注意:Mysql、SQL server、Oracle、DB2四者的特點

     Oracle:

         (1)最穩定、功能最強大、效能最好、容量無限、最昂貴、重量級,分散式資料庫  系統,適用於大型的專案

       (2)"關係----物件"型資料庫

       MySQL:

       (1)輕量級、易安裝、易管理、速度比較快,使用起來方便,適用於中小型企業

       (2)開源、免費、與PHP組成經典的LAMP組合

       SQL Server:

       (1)針對不同使用者群體的五個特殊的版本

       (2)易用性好

       DB2:

       (1)應用於大型應用系統,具有較好的可伸縮性

 

3、B/S和C/S

  B/S瀏覽器伺服器Browser Server

    客戶不需要安裝程式,只需要有瀏覽器引擎即可:淘寶

  C/S客戶端伺服器Client Server

    客戶需要安裝程式,比如:QQ

 

三、MySQL的概念、特性以及不足

1、概念

(1)什麼是MySQL

  MySQL原本是一個開放原始碼的關係資料庫管理系統,原開發者為瑞典的MySQL AB公司,該公司於2008年被Sun公司收購。2009年,甲骨文公司Oracle收購Sun公司,MySQL成為Oracle旗下產品。

  MySQL在過去由於效能高、成本低、可靠性好,已經成為最流行的開源資料庫,因此被廣泛地應用在Internet上的中小型網站中。隨著MySQL的不斷成熟,它也逐漸用於更多規模網站和應用,比如Google和Facebook等網站。

 

(2)什麼是SQL

  SQL是Structured Query Language(結構化查詢語言)的縮寫。SQL是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。在使用它時,只需要發出“做什麼”的命令,“怎麼做”是不用使用者考慮的。

 

2、MySQL的特徵:

  (1)效能快捷、優化SQL語言

  (2)容易使用

  (3)多執行緒和可靠性

  (4)多使用者支援

  (5)可移植性和開發原始碼

  (6)遵循國際標準和國際化支援

  (7)為多種程式語言提供API

 

3、MySQL5新特性

  (1)子查詢

  (2)檢視

  (3)儲存過程

  (4)觸發器

  (5)事務處理

  (6)熱備份

  (7)二進位制Bit型別

         等等......

 

4、MySQL的不足

  (1)不能直接處理XML資料

  (2)一些功能上支援得不夠完善和成熟

  (3)不能提供任何OLAP(實時分析系統)功能

 

四、MySQL的使用

1、用命令列來執行資料庫(DDL資料庫定義語言)

  (1)輸入登入密碼(連線的密碼)

 

  (2)顯示MySQL中所有的資料庫

show databases;

  

  (3)退出MySQL

     使用quit、exit、\q退出MySQL

 

  (4)建立資料庫(create database 資料庫名) 

create datebase school

     建立資料庫時,判斷是否具有同名數據庫再建立

create datebase if  not exists school

     建立資料庫後,為資料庫設定字元編碼

alter database school character set utf8

  

  (5)刪除資料庫(drop database 資料庫名)

drop database school

  

  (6)使用某個資料庫(user 資料庫名)

     注意:進入到該資料庫,例如你新建表的時候要先寫這句話,這樣保證了我的表建立在該資料庫下,反之會預設放置在預設的資料庫中  

use school

 

  (7)建立表(create table 表名 (列名1  資料型別,.......))

create table if not exists user(id int not null primary key,username varchar(40),password varchar(50),power int not null)

         建立表時,是id自動遞增用auto_increment

create table if not exists user(id int not null auto_increment primary key,username varchar(40),password varchar(50),power int not null)

   注意:關於資料型別:char和varchar

   char(20):分配20個空間,當只使用5個空間時,沒用的空間會被空格填補

   varchar(20):分配20個空間,當只使用5個空間時,那麼空間會佔用6個,其中一個儲存資料長度。

   因此,建議使用varchar

 

   (8)顯示選擇的資料庫中所有的表 

show tables

 

  (9)查看錶裡面的詳細資訊(desc 表名)

desc user

 

  (10)刪除表(drop table 表名)

drop table user

 

  (11)刪除一個表的主鍵(alter table 表名 drop primary key)

alter table user drop primary key

 

  (12)往表中新增一列(alter table 表名 add 要新增的列名 資料型別)

alter table user add address varchar(50)

 

  (13)往id列後面新增一列

alter table user add phone varchar(50) after id

 

  (14)增加一列,使其位於第一列

alter table user add id1 int not null first

 

  (15)刪除某一列(alter table 表名 drop 列名)

alter table user drop id1

 

  (16)修改表字段

   a、使用change可以修改欄位名稱和該欄位的資料型別(alter table 表名 change 欄位名 新欄位名 新資料型別)

alter table user change id userid varchar(30)

   b、使用Modify只能修改資料型別(alter table 表名 modify 欄位名 新資料型別)

alter table user modify password varchar(30)

 

2、Navicat進行增刪改查(DML資料操縱語言)

  Navicat程式碼註釋的三種:

              --註釋的程式碼(注意空格)

              #註釋的程式碼

              /*註釋的程式碼*/

  (1)建立一張表

CREATE TABLE student(
stuId VARCHAR(20) NOT NULL PRIMARY KEY,
stuName VARCHAR(40) NOT NULL,
stuMsg VARCHAR(80) NOT NULL
)

 

  (2)往表中新增記錄

      insert into 表名(欄位1,欄位2,......) values(值1,值2,......)

INSERT INTO student(stuId,stuName,stuSex,stuPassword) 
VALUES('1','楊惠霞','女','123456'),
('2','朱元梅','女','985082'),
('3','楊修志','男','435291'),
('4','祝橫崗','男','648310')

 

  (3)查詢表中名字為祝橫崗,密碼為648310的記錄,並列條件使用and

SELECT * FROM student WHERE stuName='祝橫崗' AND stuPassword='648310'

 

  (4)修改表中的記錄(update 表名 set 列名=‘xxx’ where ......)

           將id為4的欄位stuName的值改成“關雎宮”

UPDATE student SET stuName='關雎宮' WHERE stuId='4'

 

  (5)刪除表中的記錄(delete from 表名 where ......)

      刪除編號為3的資料

DELETE FROM student WHERE stuId='3'

 

 

五、MySQL資料型別

1、資料型別種類

(1)數值型

      a、整型

          可以由十進位制和十六進位制表示,整數由數字序列組成,如:100,0xA

      b、浮點型

          浮點數由一個數字加一個小數點再加上一個數字組成,如:10.5

(2)字串

      由單引號或者雙引號括起來的字元或者數字,如:'abc10',"abc"

      字串中要用轉義字元才能表示的特殊符號

串轉義序列
序列 說明 序列 說明
\0 NUL(ASCII 0) \n 新行
\' 單引號 \r 回車
\"" 雙引號 \t 製表符
\b 退格 \\ 反斜槓

(3)日期和時間值

  儲存如"2005-1-1"或"12:00:00"這樣數值的值,MySQL中日期是按"年-月-日"的順序

(4)NULL值

  是一種無型別的值,表示“空,什麼也沒有”

 

2、數值列型別

(1)所有數值列型別的型別名以及其說明和所佔的位元組數見下表:

數值列型別
型別名 說明 型別名 說明
TINYINT 非常小的整數                                 BIGINT 大整數
SMALLINT 較小整數 FLOAT 單精度浮點數
MEDIUMINT 中等大小的整數 DOUBLE 雙精度浮點數
INT 標準整數 DECIMAL 一個串的浮點數(多用於銀行的數值)

 

數值列型別的儲存需求
型別說明 儲存需求
TINYINT[(M)] 1位元組
SMALLINT[(M)] 2位元組
MEDIUMINT[(M)] 3位元組
INT[(M)] 4位元組
BIGINT[(M)] 8位元組
FLOAT[(M,D)],FLOAT(4) 4位元組
DOUBLE[(M,D)],FLOAT(8) 8位元組
DECIMAL(M,D) M位元組

M是從1到255的值,它表示列中值的字元數

 

 M與D對DECIMAL(M,D)取值範圍的影響
型別說明 取值範圍(MySQL<3.23) 取值範圍(MySQL>=3.23)
DECIMAL(4,1) -9.9到99.9 -999.9到9999.9
DECIMAL(5,1) -99.9到999.9 -9999.9到99999.9
DECIMAL(6,1) -999.9到99999.9 -99999.9到999999.9
DECIMAL(6,2) -99.99到999.99 -9999.99到99999.99
DECIMAL(6,3) -9.999到99.999 -999.999到9999.999

對於每種浮點型,可指定一個最大的顯示尺寸M和小數位D,M和D對於DECIMAL是必須的

 

(2)數值列的完整性約束

a、auto_increment

  自動標識列,一個表中最多能有一個此屬性的列。對於想使用此屬性的列應該定義為not null,並定義為primary key或定義為unique鍵。

create table student(id int auto_increment not null primary key)

 

b、unsigned

  無符號,此屬性禁用負值,將數值的範圍從0開始。

create table student(num tinyint,num2 tinyint unsigned)

 

c、null和not null

  預設為null,即插入值時沒有在此欄位插入值時自動填null,如果指定了not null,則必須在插入值時在此欄位添入值,不允許插入null值。

 

d、default

  可以通過此屬性來指定一個預設值,即如果沒有在此列新增值,那麼預設新增default後指定值。

 

e、zerofill

  前導零填充數值型別值以達到列的顯示寬度。

3、字串列型別

 所有字串列型別及其說明和所佔位元組數見下表:

串列型別
型別名 說明
CHAR 定長字串
VARCHAR 可變長字串
TINYBLOB 非常小的BLOB(二進位制大物件)
BLOB 小BLOB
MEDIUMBLOB 中等的BLOB
LONGBLOB 大BLOB
TINYTEXT 非常小的文字串
TEXT 小文字串
MEDIUMTEXT 中等文字串
LONGTEXT 大文字串
ENUM 列舉:列可賦予某個列舉成員
SET 集合:列可賦予多個集合成員

(1)CHAR和VARCHAR型別

  CHAR型別和VARCHAR型別長度範圍都是0~255之間的大小。他們之間的差異在於Mysql處理儲存的方式:

  CHAR把這個大小視為值的準確大小(如果值的長度不夠長,則用空格填補比較短的值)。

  VARCHAR型別把它視為最大值並且只使用了儲存字串實際上需要的位元組數(增加一個額外的位元組記錄長度)。因而較短的值當被插入一個語句為VARCHAR型別的欄位時,將不會用空格填補(然而,較長的值仍然被截短)。

 

(2)BLOB和TEXT型別

   BLOB是二進位制大物件,如果想儲存二進位制數,BLOB將是最佳選擇,而TEXT與之相同,只是BLOB按照二進位制編碼排序(區分大小寫),TEXT按照字元文字模式排序(不區分大小寫)。

 

(3)ENUM和SET型別

  它們是特殊的串型別,其列值必須從固定的串集中選擇,二者差別為前者必須是隻能選擇其中的一個值,而後者可以多選。(不推薦使用)

 

列舉的例子:

alter table test2 add sex enum('男','女');
insert into test2 values(2,70,'男');

 

4、日期和時間列型別

 所有時間和日期列型別的型別名及其說明和所佔的位元組數見下表:

 

日期與時間列型別
型別名 說明
DATE ‘YYYY-MM-DD’格式表示的日期值
TIME 'hh:mm:ss'格式表示的時間值
DATETIME 'YYYY-MM-DD hh:mm:ss'格式
TIMESTAMP 'YYYYMMDDhhmmss'格式表示的時間戳值
YEAR 'YYYY'格式的年份值

注意:(1)每個時間和日期列型別都有一個零值,當插入非法數值時就用零值來新增

    (2)表示日期時必須先按:年,月,日的順序給出

        (3)DATE,TIME,DATETIME分別是儲存日期,時間與日期和時間的組合,其格式為"YYYY-MM-DD","hh:mm:ss"和"YYYY-MM-DD hh:mm:ss",對於DATETIME型別,日期和時間部分都需要。

        (4)TIMESTAMP

      時間戳列型別以YYYYMMDDhhmmss的格式來表示值,主要用於記錄更改或建立某個記錄。

 

5、常見資料型別

常用的資料型別
分類 備註和說明 資料型別 說明
二進位制資料型別 儲存非字元和文字的資料 BLOB 可用來儲存影象
文字資料型別 字元資料包括任意字母、符號或者數字字元的組合 char 固定長度的非Unicode字元資料
varchar 可變長度非Unicode資料
text 儲存長文字資訊
日期和時間 日期和時間在單引號內輸入 time 時間
date 日期
datetime 日期和時間
貨幣資料型別 用於財務資料 decimal 定點數
Bit資料型別 表示是/否的資料 bit 儲存布林資料型別
數值型資料 該資料僅包含數字,包括整數、負數以及浮點數

int

smallint

整數

float

double

浮點數

 

6、常見的完整性約束

常見的完整性約束
型別 說明
PRIMARY KEY 主碼約束主鍵)
UNIQUE 唯一性約束
NOT NULL 非空值約束
AUTO_INCREMENT 用於整數列預設自增1
UNSIGNED 無符號整數
DEAULT default_value 預設值約束
DEAULT cur_timestamp

建立新記錄時預設儲存當前時間(僅適用timestamp資料列)

ON UPDATE cur_timestamp 修改記錄時預設儲存當前時間(僅適用timestamp資料列)
CHARACTER SET name 指定字符集(僅使用字串)

 

 

7、資料表的型別(在表上右鍵,點選物件資訊,可以看到表的型別)

 在建立一個新的MySQL資料表時,可以為它設定一個型別,其中最重要的3中型別是:

(1)MyISAM:成熟、穩定和易於管理

(2)InnoDB:加入事物、資料行級鎖定機制、外來鍵約束條件、崩潰恢復等新功能(常用)

(3)HEAP:只存在於記憶體中,可做臨時表

create table tmp(...)ENGINE=MyISAM

 

8、主鍵和外來鍵

(1)索引:優化查詢速度

(2)資料表之間的關聯/引用關係是依賴具體的主鍵(primary key)和外來鍵(foreign key)建立起來的。

(3)主鍵:幫助MySQL以最快的速度把一條特點的資料記錄的位置確定下來

    注意:主鍵必須是唯一的

                主鍵應該是緊湊的,因此整數型別比較適合

(4)外來鍵:引用另外一個數據表的某條記錄

        注意:外來鍵列型別儘可能與主鍵列型別保持一致

                 外來鍵列應該加上NOT NULL

例子:

  主鍵:

CREATE TABLE student(
    sid INT NOT NULL auto_increment PRIMARY KEY,
    name VARCHAR(20) NOT NULL
)

 

  外來鍵:(自動檢查外來鍵是否匹配,僅適用InnoDB)

CREATE TABLE score(
    cid INT NOT NULL auto_increment PRIMARY KEY,
    score INT,
    sid INT,
    FOREIGN KEY(sid)REFERENCES student(sid)
);

 

  建立完表之後再建立外來鍵的方法:

  格式:ALTER TABLE 表名 ADD CONSTRAINT 外來鍵名 FOREIGN KEY(外來鍵) REFERENCES 另一個表名(參考主鍵);

ALTER TABLE score ADD CONSTRAINT sid FOREIGN KEY(sid) REFERENCES student(sid);

 

  刪除外來鍵:

  格式:ALTER TABLE 表名 DROP FOREIGN KEY 外來鍵名字(注意:這裡是外來鍵的名字,而不是外來鍵列名)

ALTER TABLE score DROP FOREIGN KEY sid

 

9、主表和從表

(1)當主表中沒有對應的記錄時,不能將記錄新增到字表