天天看點

資料庫知識點總結歸納(轉載)

一、基本概念

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)

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

  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)

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

  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           

例子:

  主鍵:

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 外鍵名字(注意:這裡是外鍵的名字,而不是外鍵列名)