1. 程式人生 > >數據庫 之 基本概念

數據庫 之 基本概念

osql 方案 can mongod 對象 light 成本 關系型數據庫 存取

  一. 概述(了解)

  二. 數據庫特點(了解)

  三. 數據庫分類

  四. MySQL介紹

  五. 下載及安裝

  六. 啥是SQL?

一.概述

  數據庫(Database,簡稱DB)

  數據庫技術是計算機應用領域中非常重要的技術,它產生於20世紀60年代末,是數據管理的最新技術,也是軟件技術的一個重要分支。

  簡單的說,數據庫就是一個存放數據的倉庫,這個倉庫是按照一定的數據結構(數據結構是指數據的組織形式或數據之間的聯系)來組織、存儲的,我們可以通過數據庫提供的多種方法來管理數據庫裏的數據。更簡單的形象理解,數據庫和我們生活中存放雜物的倉庫性質一樣,區別只是存放的東西不同。

  數據庫表(table)

  數據表是關系數據庫中一個非常重要的對象,是其它對象的基礎,也是一系列二維數組的集合,用來存儲、操作數據的邏輯結構。根據信息的分類情況。
一個數據庫中可能包含若幹個數據表,每張表是由行和列組成,記錄一條數據,數據表就增加一行,每一列是由字段名和字段數據集合組成,列被稱之為字段
每一列還有自己的多個屬性,例如是否允許為空、默認值、長度、類型、存儲編碼、註釋等.例如

   技術分享圖片

  數據(data)

    存儲在表中的信息就叫做數據.

  數據庫系統有3個主要的組成部分

   1.數據庫(Database System):用於存儲數據的地方。

   2.數據庫管理系統(Database Management System,DBMS):用戶管理數據庫的軟件。

   3.數據庫應用程序(Database Application):為了提高數據庫系統的處理能力所使用的管理數據庫的軟件補充。

  數據庫的發展史(五個階段)

   1.文件系統
      數據庫系統的萌芽階段,通過文件來存取數據.
          文件系統是數據庫系統的萌芽階段,出現在上世紀五六十年代,可以提供簡單的數據存取功能,但無法提供完整、統一的數據管理功能,例如復雜查詢等。所以在管理較少、較簡單的數據或者只是用來存取簡單數據,沒有復雜操作的情況下,會使用文件系統
   
   2.層次型數據庫       數據庫系統真正開始階段,數據的存儲形式類似樹形結構,所以也叫樹型數據庫.    
   3.網狀數據庫       數據的存儲形式類似網狀結構. 從二十世紀六十年代開始,第一代數據庫系統(層次模型數據庫系統、網狀模型數據庫系統)相繼問世,它們為統一管理和共享數據提供了有力的支撐 在這個階段,網狀模型數據庫由於它的復雜、專用性,沒有被廣泛使用。而在層次模型數據庫中,IBM公司的IMS(Information Management System,信息管理系統)層次模型數據庫系統則得到了極大的發展,一度成為最大的數據庫管理系統,擁有巨大的客戶群    4.關系型數據庫 二十世紀七十年代初,關系型數據庫系統開始走上歷史舞臺,並一直保持著蓬勃的生命力.關系型數據庫系統使用結構化查詢語言(Structured Query Language,SQL)作為數據庫定義語言DDL和數據庫操作語言DML    5.面向對象數據庫 把面向對象的方法和數據庫技術結合起來,可以使數據庫系統的分析、設計最大程度地與人們對客觀世界的認識相一致,並且能夠有效的為面向對象程序提供更好的數據庫支撐

二.數據庫的特點

  ⑴ 實現數據共享     數據共享包含所有用戶可同時存取數據庫中的數據,也包括用戶可以用各種方式通過接口使用數據庫,並提供數據共享。   ⑵ 減少數據的冗余度     同文件系統相比,由於數據庫實現了數據共享,從而避免了用戶各自建立應用文件。減少了大量重復數據,減少了數據冗余,維護了數據的一致性。   ⑶ 數據一致性和可維護性,以確保數據的安全性和可靠性     主要包括:①安全性控制:以防止數據丟失、錯誤更新和越權使用;          ②完整性控制:保證數據的正確性、有效性和相容性;          ③並發控制:使在同一時間周期內,允許對數據實現多路存取,又能防止用戶之間的不正常交互作用。   故障恢復     由數據庫管理系統提供一套方法,可及時發現故障和修復故障,從而防止數據被破壞。數據庫系統能盡快恢復數據庫系統運行時出現的故障,可能是物理上或是邏輯上的錯誤。比如對系統的誤操作造成的數據錯誤等。

三.數據庫分類

  在當今的互聯網中,最常用的數據庫模型主要是兩種,即關系型數據庫非關系型數據庫。

  1 關系型數據庫介紹

   (1) 關系型數據庫 : 是把復雜的數據結構歸結為簡單的二元關系(即二維表格形式)。

   (2) 目前主流的關系型數據庫:MySQL、Oracle 、 Sql server、DB2 。。。

技術分享圖片
    Oracle 是世界上使用最廣泛的數據庫,上世紀末隨著網絡浪潮的到來,Oracle推出9i這個版本,i表示internet,全面支持網絡引用。10g,g是grid網格,是Oracle公司為迎接“網格計算”時代的來臨而提供的數據庫解決方案。
    MySQL是一個開源的、免費的關系型數據庫,。由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇MySQL作為網站數據庫。
    SQL Server 微軟公司的關系型數據庫,一般.NET平臺會將其作為首選.
    DB2是IBM出品的一系列關系型數據庫管理系統,分別在不同的操作系統平臺上服務。
主流數據庫介紹

  2 非關系型數據庫介紹

   (1)非關系型數據庫誕生背景

     非關系型數據庫也被成為NoSQL數據庫,NOSQL的本意是“Not Only SQL”.而不是“No SQL”的意思,因此,NoSQL的產生並不是要徹底地否定非關系型數據庫,而是作為傳統關系型數據庫的一個有效補充。NOSQL數據庫在特定的場景下可以發揮出難以想象的高效率和高性能。

   隨著互聯網Web2.0網站的興起,傳統的關系型數據庫在應付web2,0網站,特別是對於規模日益擴大的海量數據,超大規模和高並發的微博、微信、SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題。

     例如:傳統的關系型數據庫IO瓶頸、性能瓶頸都難以有效突破,於是出現了大批針對特定場景,以高性能和使用便利為目的功能特異化的數據庫產品。NOSQL(非關系型)類的數據就是在這樣的情景下誕生並得到了非常迅速的發展

  (2) NOSQL非關系型數據庫小結:
    1、NOSQL不是否定關系數據庫,而是作為關系數據庫的一個重要補充
    2、NOSQL為了高性能、高並發而生,但是要求對數據一致性要求不能高
    3、NOSQL典型產品memcached (純內存,k-v),redis(持久化緩存,k-v),mongodb(文檔的數據庫,xml-json)

四.MySQL介紹

  MySQL 數據庫:是互聯網領域裏一款最重要的,深受廣大用戶歡迎的開源關系型數據庫軟件之一、由瑞典MySQL AB公司開發與維護。2008年。MySQL AB公司被SUN公司收購,2009年,SUN公司又被傳統數據數據庫領域大佬甲骨文(oracle)公司收購,因此,MySQL數據庫軟件目前屬於Oracle公司,成為傳統數據庫領域老大的又一個數據庫產品,甲骨文公司收購MySQL後,使得自身在商業數據庫與開源軟件領域市場占有份額都躍居第一的位置,這樣的格局,引起了很多人的擔憂,這種擔憂直接導致後來的Mysql分支數據庫MariaDB的誕生於發展。

 MySQL 發展歷史

  • 1985 年,瑞典的幾位誌同道合小夥子(David Axmark、Allan Larsson 和Monty Widenius) 成立了一家公司,這就是MySQL AB 的前身。
  • 1990年,TcX公司的客戶中開始有人要求為他的API提供SQL支持。當時有人提議直接使用商用數據庫,但是Monty覺得商用數據庫的速度難以令人滿意。於是,他直接借助於mSQL的代碼,將它集成到自己的存儲引擎中。令人失望的是,效果並不太令人滿意,於是,Monty雄心大起,決心自己重寫一個SQL支持。
  • 1996年,MySQL 1.0發布,它只面向一小撥人,相當於內部發布。
  • 1996年10月,MySQL 3.11.1發布(MySQL沒有2.x版本),最開始只提供Solaris下的二進制版本。一個月後,Linux版本出現了。
  • 1999~2000年,MySQL AB公司在瑞典成立。Monty雇了幾個人與Sleepycat合作,開發出了Berkeley DB引擎, 因為BDB支持事務處理,所以MySQL從此開始支持事務處理了。
  • 2003年12月,MySQL 5.0版本發布,提供了視圖、存儲過程等功能。
  • 2008年1月16日,Sun(太陽微系統)正式收購MySQL。
  • 2009年4月20日,甲骨文公司宣布以每股9.50美元,74億美元的總額收購Sun電腦公司。
  • 2010年12月,MySQL 5.5發布,其主要新特性包括半同步的復制及對SIGNAL/RESIGNAL的異常處理功能的支持,最重要的是InnoDB存儲引擎終於變為當前MySQL的默認存儲引擎。
  • 2013年6月18日,甲骨文公司修改MySQL授權協議,移除了GPL。但隨後有消息稱這是一個bug。

 為什麽選擇MySQL數據庫?

 (1) MySQL性能卓越、服務穩定,很少出現異常宕機
 (2) MySQL開放源代碼且無版權制約,自主性及使用成本低
(3) MySQL歷史悠久,社區及用戶活躍,遇到問題可以解決
(4) MySQL軟件體積小,安裝使用簡單,並且易於維護,安裝及維護成本低
(5) MySQL品牌口碑效應,使得企業無需考慮就直接用
(6) MySQL支持多用操作系統,提供多種API接口,支持多用開發語言,特別對流行的語言有很好的支持

 

 MariaDB 介紹 :

  出現在2009年. MAriaDB數據庫管理系統是MySQL數據庫的一個分支,主要由開源社區維護,采用GPL授權許可。開發這個MariaDB的原因之一是:甲骨文公司收購了MySQL後,MySQL有閉源的潛在風險,因此MySQL開源社區采用分支的方式來避開這個風險。點擊查看詳情

  MariaDB默認的存儲引擎是Maria,不是MyISAM。Maria可以支持事務,但是默認情況下沒有打開事務支持,因為事務支持對性能會有影響。可以通過以下語句,轉換為支持事務的Maria引擎。ALTER TABLE `tablename` ENGINE=MARIA TRANSACTIONAL=1;  

五.下載及安裝

a:官網下載mysql安裝程序
b:安裝mysql服務端
c:安裝mysql客戶端
d:客戶端連接服務端
e:通過客戶端向服務器發送命令,執行對數據庫文件的增刪改差操作。 

Windows版安裝  

技術分享圖片
#1.下載:MySQL Community Server 5.7.20
    https://dev.mysql.com/downloads/mysql/

#2.解壓
將官網下載的解壓包 解壓到指定目錄(例如 D://mysql-5.7.20-winx64)

#3.添加環境變量
【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名為Path 的一行,雙擊】 --> 【將MySQL的bin目錄路徑追加到變值值中,用 ; 分割】

C:\Program Files (x86)\Parallels\Parallels Tools\Applications;d:\mysql-5.7.16-winx64\bin

#4.初始化
mysqld --initialize-insecure

#5.啟動mysql服務
mysqld

#6.連接mysql服務
mysql -uroot -p  回車,有密碼輸入密碼,沒有繼續回車

解壓方式安裝
解壓方式安裝 技術分享圖片
ps:制作服務必須使用全路徑方式
# 制作MySQL的Windows服務,在終端執行此命令:
"c:\mysql-5.7.16-winx64\bin\mysqld" --install

# 移除MySQL的Windows服務,在終端執行此命令:
"c:\mysql-5.7.16-winx64\bin\mysqld" --remove
# 啟動MySQL服務
net start mysql(後面不加分號)

# 關閉MySQL服務
net stop mysql(後面不加分號)
制作服務

在啟動mysql服務後,打開windows任務管理器,會有一個名為mysqld.exe的進程運行,所以mysqld.exe是MySQL服務器程序。

退出登錄:quit 或 exit 或 \q ;  

技術分享圖片
next
next
next
....
ps:mis方式安裝,會安裝的東西比較全,使用起來比較方便
推薦:mis方式安裝

Linux版本

技術分享圖片
1、下載地址:http://dev.mysql.com/downloads/mysql/5.6.html#downloads

也可以直接復制64位的下載地址,通過命令下載:wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz

2、解壓
#解壓
tar -zxvf mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
#復制解壓後的mysql目錄
cp -r mysql-5.6.33-linux-glibc2.5-x86_64 /usr/local/mysql

3、添加用戶組和用戶
#添加用戶組
groupadd mysql
#添加用戶mysql 到用戶組mysql
useradd -g mysql mysql

4、安裝
cd /usr/local/mysql/<br>mkdir ./data/mysql
chown -R mysql:mysql ./
./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/mysql
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
cp support-files/my-default.cnf /etc/my.cnf
 
#修改啟動腳本
vi /etc/init.d/mysqld
 
#修改項:
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data/mysql
 
#啟動服務
service mysqld start
 
#測試連接
./mysql/bin/mysql -uroot
 
#加入環境變量,編輯 /etc/profile,這樣可以在任何地方用mysql命令了
export PATH=$PATH:/usr/local/mysql//bin<br>source /etc/profile
 
 
#啟動mysql
service mysqld start
#關閉mysql
service mysqld stop
#查看運行狀態
service mysqld status


5、錯誤

5.1 sqlyog連接時,報1130錯誤,是由於沒有給遠程連接的用戶權限問題

解決1:更改 ‘mysql’數據庫‘user’表‘host’項,從‘localhost’改成‘%’。

use mysql;
select host from user where user=root; 
update user set host = % where user =root;
flush privileges; 

解決2:直接授權
GRANT ALL PRIVILEGES ON *.* TO ‘root’@%’ IDENTIFIED BY ‘youpassword’ WITH GRANT OPTION;


5.2 安裝時的一些錯誤
-bash: ./scripts/mysql_install_db: /usr/bin/perl: bad interpreter: 沒有那個文件或目錄
解決: yum -y install perl perl-devel

Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解決:yum -y install libaio-devel
linux版本安裝

參考博客:http://www.cnblogs.com/wangfengming/articles/7880595.html

六.啥是SQL?

  上面咱們介紹過數據庫的組成部分,其中數據庫管理系統可以接收一些命令,對數據文件進行添加、刪除、修改、查詢等操作。那麽這些命令就是 SQL .

  SQL:(Structured Query Language)是結構化查詢語縮寫。是一門專門與數據庫管理系統打交道的語言。

  SQL語言:是關系型數據庫的標準語言, 其主要用於存取數據,查詢數據,更新數據和管理數據庫系統等操作。

  具體可以把SQL分為4個部分:

    數據控制語言 ( DCL): 主要用於控制用戶的訪問權限。其中GRANT語句用於給用戶增加權限,REVOKE語句用於收回用戶的權限

    數據定義語言(DDL):DROP、CREATE、ALTER等語句;數據庫定義語言。主要用於定義數據庫,表,視圖,索引和觸發器等。CREATE語句主要用於創建數據庫,創建表,創建視圖。ALTER語句主要用於修改表的定義,修改視圖的定義。DROP語句主要用於刪除數據庫,刪除表和刪除視圖等。

    數據操作語言(DML):INSERT、UPDATE、DELETE語句;數據庫操作語言。主要用於插入數據,更新數據,刪除數據。INSERT語句用於插入數據,UPDATE語句用於更新數據,DELETE語句用於刪除數據.

    數據查詢語言(DQL):SELECT語句。主要用於查詢數據。

技術分享圖片
#1. 操作文件夾
        增:create database db1 charset utf8;
        查:show databases;
        改:alter database db1 charset latin1;
        刪除: drop database db1;


#2. 操作文件
    先切換到文件夾下:use db1
        增:create table t1(id int,name char);
        查:show tables
        改:alter table t1 modify name char(3);
              alter table t1 change name name1 char(2);
        刪:drop table t1;
    

#3. 操作文件中的內容/記錄
        增:insert into t1 values(1,egon1),(2,egon2),(3,egon3);
        查:select * from t1;
        改:update t1 set name=sb where id=2;
        刪:delete from t1 where id=1;

        清空表:
            delete from t1; #如果有自增id,新增的數據,仍然是以刪除前的最後一樣作為起始。
            truncate table t1;數據量大,刪除速度比上一條快,且直接從零開始,

            auto_increment 表示:自增
            primary key 表示:約束(不能重復且不能為空);加速查找
....

數據庫 之 基本概念