數據庫的基本概念
數據
- 描述事物的符號記錄稱爲數據(Data)
- 包括數字、文字、圖形、圖像、聲音、檔案記錄等
- 以“記錄”形式按統一的格式進行存儲
表
- 將不同的記錄組織在一起,就形成了“表”
- 是用來存儲具體數據的
數據庫
- 數據庫就是表的集合,是存儲數據的倉庫
- 以一定的組織方式存儲的相互有關的數據
數據庫系統發展史
第一代數據庫
- 自20世紀60年代起,第一代數據庫系統問世。它們是層次模型與網狀模型的數據庫系統,爲統一管理和共享數據提供了有力的支撐
第二代數據庫
- 20世紀70年代初,第二代數據庫——關係數據庫開始出現
- 20世紀80年代初,IBM公司的關係數據庫系統DB2問世,作爲第二代數據庫系統的關係數據庫,開始逐步取代層次與網狀模型的數據庫,成爲占主導地位的數據庫,成爲行業主流。到目前爲止,關係數據庫系統仍佔領數據庫應用的主要地位
第三代數據庫
- 自20世紀80年代起,各種適應不同領域的新型數據庫系統不斷涌現,如工程數據庫、多媒體數據庫、圖形數據庫、智能數據庫、分佈式數據庫及面向對象數據庫等,特別是面向對象數據庫系統,由於其實用性強、適應面廣而受到人們的青睞
- 20世紀90年代後期,形成了多種數據庫系統共同支撐應用的局面。當然,在商務應用方面,依然還是關係數據庫佔主流,不過,已經有一些新的元素被添加進主流商務數據庫系統中。例如,Oracle支持的"關係—對象”數據庫模型
當今主流數據庫介紹
SQL Server (微軟公司產品)
- 面向Windows操作系統
- 簡單、易用
Oracle (甲骨文公司產品)
- 面向所有主流平臺
- 安全、完善,操作複雜
DB2 (IBM公司產品)
- 面向所有主流平臺
- 大型、安全、完善
MySQL (甲骨文公司收購)
- 免費、開源、體積小
關係數據庫
- 關係數據庫系統是基於關係模型的數據庫系統,它的基本概念來自於關係模型
- 關係模型建立在關係代數的理論基礎上,數據結構使用簡單易懂的二維數據表,可以用簡單的“實體—關係”圖來直接 表示
- 下面E-R圖中包含了實體(數據對象)、關係和屬性三要素
實體
- 也稱爲實例,對應現實世界中可區別於其他對象的“事件”或“事物”,如銀行客戶、銀行賬戶等
屬性
- 實體所具有的某一特性,一個實體可以有多個屬性。例如,"銀行客戶”實體集中的每個實體均具有姓名、住址、電話等屬性
聯繫
- 實體集之間的對應關係稱爲聯繫,也稱爲關係。例如,銀行客戶和銀行賬戶之間存在“儲蓄”的關係
所有實體及實體之間聯繫的集合構成一個關係數據庫
關係數據庫的存儲結構是二維表格,反映事物及其聯繫的數據是以表格形式保存的
在每個二維表中, 每一行稱爲一條記錄,用來描述一個對象的信息;每一列稱爲一個字段,用來描述對象的一個屬性
關係數據庫應用
關係型數據庫
- Oracle,MySQL
- SQLServer、Sybase
- Informix、access
- DB2、FoxPRO
關係型數據庫應用舉例
- 12306用戶信息系統
- 淘寶賬號信息系統,支付寶賬號系統、移動、電信、聯通手機信號信息系統、計費系統銀行用戶賬號系統
- 網站用戶信息系統
非關係數據庫介紹
- 非關係數據庫也被稱作NoSQL(Not Only SQL),存儲數據不以關係模型爲依據,不需要固定的表格式
- 非關係型數據庫作爲關係數據庫的一個補充,在日益快速發展的網絡時代,發揮着高效率與高性能
- 非關係型數據庫的優點
- 數據庫高併發讀寫的需求
- 對海量數據高效率存儲與訪問
- 數據庫的高擴展性與高可用性的需求
非關係型數據庫存儲方式
- 鍵-值方式(key-value),以鍵爲依據存儲、刪、改數據
- 列存儲(Column-oriented),將相關的數據存儲在列族中
- 文檔的方式,數據庫由一系列數據項組成,每個數據項都有名稱與對應的值
- 圖形方式,實體爲頂點,關係爲邊,數據保存爲一個圖形
非關係數據庫產品
-
Memcached是一 個開源的、高性能的、具有分佈式內存對象的緩存系統,以key-value方式存儲數據
- 緩存數據以減輕數據庫壓力並能加快訪問速度
- 加速動態Web應用
- 緩存的內容保存在內存中
- redis也是一 個以key-value方式存儲數據的,數據也是保存在內存中,但會定期將數據寫入磁盤中
- 相對於FMemcached有以下特點
- 支持內存緩存
- 支持持久化.
- 數據類型更多
- 支持集羣、分佈式
- 支持隊列
redis應用舉例
- 數據庫前端緩存
- session共享
- 當需要緩存除了key/value之外的更多數據類型時
- 當緩存的數據需要長久保存時
MySQL數據庫介紹
- MySQL是一款深受歡迎的開源關係型數據庫
- Oracle旗下的產品
- 遵守了GPL協議,可以免費使用與修改
- 特點
- 性能卓越、服務穩定
- 開源、無版權限制、成本低
- 多線程、多用戶
- 基於C/S (客戶端/服務器)架構
- 安全可靠
MySQL商業版與社區版
- MySQL商業版是由MySQL AB公司負責開發與維護,需要付費才能使用
- MySQL社區版是由分散在世界各地的MySQL開發者、愛好者一起開發與維護,可以免費使用
- 兩者區別
- 商業版組織管理與測試環節更加嚴格,穩定性更好
- 商業版不遵守GPL
- 商業版可獲得7*24小時的服務,如故障維護與打補丁等
MySQL產品陣營
- 第一陣營: 5.0-5.1陣營,可說是早期產品的延續
- 第二陣營: 5.4-5.7陣營,更好地整合了MySQL AB公司、社區、第三方公司開的存儲引擎,從而提高性能
- 第三陣營: 6.0-7.1陣營,就是MySQL Cluster版本,爲適應新時代集羣對數據庫的需求而開發
- MySQL下載網址
MySQL安裝實例
- 在VMware虛擬機中打開Linux系統,並下載MySQL壓縮包到宿主機,並設置保存MySQL壓縮包的文件夾共享,方便Linux系統掛載使用 MySQL5.7下載
[root@localhost ~]# yum install gcc gcc-c++ make ncurses ncurses-devel bison cmake -y //安裝環境包
已加載插件:fastestmirror, langpacks
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
...
已安裝:
bison.x86_64 0:3.0.4-2.el7 cmake.x86_64 0:2.8.12.2-2.el7
gcc.x86_64 0:4.8.5-39.el7 gcc-c++.x86_64 0:4.8.5-39.el7
ncurses-devel.x86_64 0:5.9-14.20130511.el7_4
作爲依賴被安裝:
cpp.x86_64 0:4.8.5-39.el7 glibc-devel.x86_64 0:2.17-292.el7
glibc-headers.x86_64 0:2.17-292.el7 kernel-headers.x86_64 0:3.10.0-1062.4.3.el7
libmpc.x86_64 0:1.0.1-3.el7 libstdc++-devel.x86_64 0:4.8.5-39.el7
m4.x86_64 0:1.4.16-10.el7
更新完畢:
make.x86_64 1:3.82-24.el7 ncurses.x86_64 0:5.9-14.20130511.el7_4
作爲依賴被升級:
glibc.x86_64 0:2.17-292.el7 glibc-common.x86_64 0:2.17-292.el7
libgcc.x86_64 0:4.8.5-39.el7 libgomp.x86_64 0:4.8.5-39.el7
libstdc++.x86_64 0:4.8.5-39.el7 ncurses-base.noarch 0:5.9-14.20130511.el7_4
ncurses-libs.x86_64 0:5.9-14.20130511.el7_4
完畢!
[root@localhost ~]# useradd -s /sbin/nologin mysql //創建MySQL程序型用戶
[root@localhost ~]# mount.cifs //192.168.100.8/shares /mnt/ //將宿主機中MySQL壓縮包路徑掛載到Linux系統中
Password for root@//192.168.100.8/shares:
[root@localhost ~]# cd /mnt/ //進入掛載點目錄
[root@localhost mnt]# tar zxvf mysql-boost-5.7.20.tar.gz -C /opt //解壓MySQL壓縮包到opt目錄
......
mysql-5.7.20/boost/boost_1_59_0/boost/unordered/detail/extract_key.hpp
mysql-5.7.20/boost/boost_1_59_0/boost/unordered/detail/buckets.hpp
mysql-5.7.20/boost/boost_1_59_0/boost/unordered/detail/allocate.hpp
mysql-5.7.20/boost/boost_1_59_0/boost/unordered/detail/util.hpp
mysql-5.7.20/boost/boost_1_59_0/boost/unordered/unordered_map.hpp
mysql-5.7.20/boost/boost_1_59_0/boost/unordered/unordered_set.hpp
mysql-5.7.20/boost/boost_1_59_0/boost/unordered/unordered_set_fwd.hpp
mysql-5.7.20/boost/boost_1_59_0/boost/unordered/unordered_map_fwd.hpp
mysql-5.7.20/boost/boost_1_59_0/boost/timer.hpp
[root@localhost mnt]# cd /opt/mysql-5.7.20/
[root@localhost mysql-5.7.20]# cmake \ //配置mysql
> -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ //指定安裝路徑
> -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ //指定mysql.sock.路徑
> -DSYSCONFDIR=/etc \ //指定配置文件存放位置
> -DSYSTEMD_PID_DIR=/usr/local/mysql \ //指定pid文件存放爲位置
> -DDEFAULT_CHARSET=utf8 \ //字符集格式utf-8
> -DDEFAULT_COLLATION=utf8_general_ci \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \ //開啓存儲引擎
> -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
> -DMYSQL_DATADIR=/usr/local/mysql/data \ //指定數據存放位置
> -DWITH_BOOST=boost \ //關聯支持c++運行庫
> -DWITH_SYSTEMD=1 //開啓systemd
....
-- CMAKE_C_LINK_FLAGS:
-- CMAKE_CXX_LINK_FLAGS:
-- CMAKE_C_FLAGS_RELWITHDEBINFO: -O3 -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -DDBUG_OFF
-- CMAKE_CXX_FLAGS_RELWITHDEBINFO: -O3 -g -fabi-version=2 -fno-omit-frame-pointer -fno-strict-aliasing -DDBUG_OFF
-- Configuring done
-- Generating done
-- Build files have been written to: /opt/mysql-5.7.20
[root@localhost mysql-5.7.20]# make //make過程(時間比較長,耐心等待)
....
[100%] Building CXX object libmysqld/examples/CMakeFiles/mysql_embedded.dir/__/__/client/readline.cc.o
Linking CXX executable mysql_embedded
[100%] Built target mysql_embedded
Scanning dependencies of target mysqltest_embedded
[100%] Building CXX object libmysqld/examples/CMakeFiles/mysqltest_embedded.dir/__/__/client/mysqltest.cc.o
Linking CXX executable mysqltest_embedded
[100%] Built target mysqltest_embedded
Scanning dependencies of target my_safe_process
[100%] Building CXX object mysql-test/lib/My/SafeProcess/CMakeFiles/my_safe_process.dir/safe_process.cc.o
Linking CXX executable my_safe_process
[100%] Built target my_safe_process
[root@localhost mysql-5.7.20]# make install //安裝
...
-- Installing: /usr/local/mysql/./COPYING-test
-- Installing: /usr/local/mysql/./README-test
-- Up-to-date: /usr/local/mysql/mysql-test/mtr
-- Up-to-date: /usr/local/mysql/mysql-test/mysql-test-run
-- Installing: /usr/local/mysql/mysql-test/lib/My/SafeProcess/my_safe_process
-- Up-to-date: /usr/local/mysql/mysql-test/lib/My/SafeProcess/my_safe_process
-- Installing: /usr/local/mysql/mysql-test/lib/My/SafeProcess/Base.pm
-- Installing: /usr/local/mysql/support-files/mysqld_multi.server
-- Installing: /usr/local/mysql/support-files/mysql-log-rotate
-- Installing: /usr/local/mysql/support-files/magic
-- Installing: /usr/local/mysql/share/aclocal/mysql.m4
-- Installing: /usr/local/mysql/support-files/mysql.server
[root@localhost mysql-5.7.20]# cd /usr/local/ //進入安裝目錄
[root@localhost local]# chown -R mysql.mysql mysql/ //mysql目錄更改用戶與組
[root@localhost local]# mv /etc/my.cnf /etc/my.cnf.bak //更改配置文件名稱
[root@localhost local]# vim /etc/my.cnf //重新編輯配置文件
[client]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysql]
port = 3306
default-character-set=utf8
socket = /usr/local/mysql/mysql.sock
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
:wq
[root@localhost local]# vim /etc/profile
...
PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
export PATH //重新聲明環境變量
:wq
[root@localhost local]# source /etc/profile //重新執行
[root@localhost local]# cd /usr/local/mysql/bin //進入MySQL命令目錄
[root@localhost bin]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data //初始化數據庫
2019-12-02T11:51:28.112082Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-12-02T11:51:28.263398Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-12-02T11:51:28.287408Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-12-02T11:51:28.341284Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 131f32df-14fa-11ea-87e6-000c297265cb.
2019-12-02T11:51:28.342106Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-12-02T11:51:28.342452Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
[root@localhost ~]# cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /lib/systemd/system/
//將MySQL啓動腳本夫複製到系統system目錄下
[root@localhost ~]# systemctl enable mysqld.service //設置MySQL爲開機自啓動
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
[root@localhost ~]# systemctl start mysqld.service //啓動MySQL
[root@localhost ~]# mysqladmin -u root -p password //設置MySQL數據庫密碼
Enter password: //沒有原始密碼,直接回車
New password: //輸入新密碼
Confirm new password: //再次輸入密碼
Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
//安全提示
[root@localhost ~]# mysql -u root -p //登錄MySQL
Enter password: 輸入密碼
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.20 Source distribution
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases; //查看數據庫
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)