三種數據組織管理模式:
層次性:很難描述對象之間的關係,冗餘大,數據與程序耦合度不高。
網狀型:在對象之間建立關係,但複雜度高,並沒改變數據與程序的耦合度。
關係型:關係稱爲二維表,即表,行表示實體,列表示實體的某方面的屬性,數據被記錄在二維關係中,降低了數據與程序的程度耦合。
面向對象的關係模型:
將對應的數據定義一個對象,在表中存放對象的實體化對應與磁盤的某個位置,表中是指針。
xml,擴展標記語言,在不同的數據庫軟件之間導入或導出
RDBMS:關係型數據管理系統,是個軟件,提供兩個視圖
Oracle,甲骨文
RMAN,數據庫備份、恢復工具
DATA GUARD非高可用集羣,但類似能提供高可用
RAC 真應用集羣
認證:OCA,OCP,OCM
版本:oracle8i,9i,10g,11g,現在最常用的是9i
DB2,IBM公司的,
目前在國內的證券等傾向DB2
SQL Server,只能做在Window上
數據庫的正在發展趨勢:
NoSQL:非關係型數據庫,基於key-value,即鍵值對,存儲讀出非常快,時時在線。
Realtime:把數據庫應在內存中,所用操作在內存中,不往磁盤存儲。
邏輯視圖:通過sql接口管理
表:數據庫的核心
索引:加速查找速度,例書的目錄
視圖:數據庫的對象,存儲SELECT語句
用戶:獲取資源的權限。
以下從編程的角度,由開發人員的開發的組件:
觸發器:當數據庫中的表做出一定的修改,相應的另一邊也要做出操作,即一邊發生變化另一邊要響應。
存儲例程:存儲過程和存儲函數,直接存儲在服務器中
事件:類似任務計劃
物理視圖:對應的工具來實現管理
存儲在磁盤的方式,通常由文件組成,文件的存儲方式不同。一表一個文件,多表一個文件(表空間).Oracle直接使用裸設備存儲,存取速度快
普通用戶只能操作邏輯視圖,管理員都要關注。
DataBase:
開發DBA:數據庫設計,存儲過程,存儲函數,觸發器
管理DBA:數據庫備份、恢復,數據庫軟件的管理,用戶管理,安全管理,架構設計,實施
DBMS基本功能:
Managing storage管理存儲
Maintaining security管理安全
Maintaining metadata管理源數據
Managing transactions管理事務
Supporting connectivity支持連接管理
Optimizing performance性能優化
Providing back-up and recovery mechanisma提供備份恢復的機制
Processing requests for data retrieval and modfication處理數據的檢索與修改
對於表,使用不同的索引,篩選的結果可能也不一樣
同一個SQL語句,同一個索引可以有多條路徑,可以從中選最優的。
ACID:事務的特性,A原子性,C一致性,I隔離性,D持久性。
SQL:結構化查詢語言,類似腳本,但比腳本簡單,功能強大,由SQL解釋器完成。
DDL:數據庫定義語言
CREATE,DROP
DML:數據管理
SELECT,INSERT,DELETE,UPDATE
ANSI:數據庫的標準,以年份定義的
SQL-86,SQL-89,SQL-92,
標準非常嚴格,但效率非常低
SQL-92標準的三個級別:
Entry:基礎標準(實體)
Intermediate:中級
Full:完全
SQL-99:劃分爲CoreSQL核心級別
SQL-03:引進了XML
結構化編程:(即擴展)
Oracle, PL/SQL PL過程化
SQL Server, T-SQL
MySQL, SQL
範式:數據庫設計遵循的標準
約束:
候選鍵:能夠表示表中唯一標識某行的字段。
primary key 主鍵,不允許爲空
foreign key 外鍵,在兩個表之間建立關聯
檢查性約束,對字段的約束,例:ages大於1小於200
unique key 唯一鍵,對應可以爲空
MySQL的端口3306
MySQL的官方名稱:“My S-Q-L”或“My Sequel”
MySQL的特性:
1、speed速度快,完全多線程,查詢緩存,不僅可以緩存SELECT語句,還可以緩存結果。
2、Reliability可靠性
3、scalability伸縮性
4、Ease of use 易用
5、Potability and Standdands Complicance可移植性標準,兼容性好
6、Multiuser Support支持多用戶
7、Internationalization國際化,即支持多種語言
8、wide Application Support廣泛的應用程序,(C,C++,Java,Perl,PHP,)(JDBC,ODBC,NET)
9、Open Source開源
MySQL的版本:
Alpha 內部測試
Beta 公開測試
GA版本,在生產環境中使用,是我們用的版本
4.1曾加了子查詢
5.0引入了觸發器,遊標,存儲過程
5.1引入了表分區,基於行的複製,可插入式的存儲引擎,事件調度器
MySQL Community社區版
MySQL Enterprise企業版,需付費的
MySQL的軟件版本:
MySQL Server MySQL服務器
MySQL Cluster MySQL集羣
MySQL Proxy MySQL代理
MySQL Adminitrator整合起來的圖形的管理工具,至少包含兩個組件MySQL Query Browser和MySQL Workbench設計工具
MySQL Migration Toolkit 移植工具
MySQL Embedded Server 潛入式
MySQL Drivers and Connectors 驅動和連接器
存儲引擎:用於實現物理文件的管理的接口,5.1之前的My1SAM不支持事務,之後是InnoDB完全事務,從性能上MySAM較好。
MySQL的工作特徵:
五個主要組件:連接/線程處理,分析器,查詢緩存,優化器,存儲引擎。
connection pool:連接池,包括認證,線程重用,連接限制,內存檢查,緩存
SQL Interface:DML DDL
Paser;詞法分析器(查詢翻譯,對象權限)
Optimlzer:詞法優化(路徑選擇)
Cache & Buffers:緩存,加速工作效率
存儲引擎:索引,真正存放數據,最終放在文件系統中。
複製:提供負載均衡,多臺服務器,提供相同的數據,主服務器可讀可寫,從服務器可讀。
分區:對錶進行切分
MySQL RPM Packages:
MySQL-client客戶端
MySQL-devel開發包,頭文件,庫文件
MySQL-enbedded潛入式,很小
MySQL-debuginf o調試
MySQL-shared共享庫
MySQL-shared-compat兼容老版本的共享庫
MySQL-test測試組件
PLATFORM.src.rpm源碼的rpm
二進制解壓就能使用的綠色軟件所包含的目錄及子目錄:bin,data,include,lib,man,mysql-test,scripts,share,sql-bench,support-files
在unix上是個集中式的配置文件,爲各種工具提供配置
mysqld按順序查找配置文件
/etc/my.cnf
/etc/mysql/my.cnf
$MYSQL_HOME/my.cnf安裝目錄,默認basedir,datadir
/path/to/file when defaults-extra-file=/path/to/file is specified
~/.my.cnf隱藏文件,登錄到liunx系統上的當前用戶
配置文件最終生效的是所有,若有重複從下往上優先,後找到的覆蓋之前的。
在Windows找配置文件的順序
%WINDIR%\my.init或%WINDIR%\my.cnf
C:\my.ini,C:\my.cnf
%INSTALLDIR%\my.ini,%INSTALLDIR%\my.cnf
/path/to/file when defaults-extra-file=/path/to/file is specified
MySQL的認證結構:
用戶名+主機名,表示誰從那臺主機可以登錄
用戶加密碼:
1、mysqladmin -uroot password 'redhat'
mysqladmin -uroot password 'redhat' -p指定原密碼
mysqladmin -uroot -h127.0.0.1 password 'redhat'
2、mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('redhat');
3、mysql> UPDATA user SET PASSWORD = PASSWORD('redhat') WHERE USER='root' and HOST='mysql.magedu.com';
刪除用戶:
mysql> DROP USER ''@localhost;匿名的
mysql> DROP USER 'root'@'::1';
重讀
mysql> FLUSH PRIVILEGES
創建用戶:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%.%' IDENTIFIED BY 'redhat'
安裝MySQL:
1、下載軟件包mysql-5.5.15-linux2.6-i686.tar.gz
rpm -qa | grep mysql 查看系統是否安裝
tar xf mysql-5.5.15-linux2.6-i686.tar.gz -C /usr/local
cd /usr/local
ln -sv mysql-5.5.15-linux2.6-i686 mysql
cd mysql
ls
2、創建邏輯卷
fdisk /dev/sdb
n
5
+10G
t
8e
n
6
+10G
t
8e
w
partprobe /dev/sdb
pvcreate /dev/sdb{5,6}
vgcreate myvg /dev/sdb{5,6}
vgs
lvcreate -L 10G -n mydata myvg
lvs
mke2fs -j -L MYDATA /dev/myvg/mydata
mkdir /mydata
vim /etc/fstab
LABEL=MYDATA /mydata ext3 defaults 0 0
mount -a
mount
(mount /dev/mapper/myvg-mydata /mydata)
3、mkdir -pv /mydata/data
ll /mydata/
groupadd -r mysql
useradd -g mysql -r -M -s /sbin/nologin mysql
id mysql
pwd
ll
chown -R mysql:mysql .
chown -R mysql:mysql /mydata/data/
ls
4、初始化及配置
script/mysql_install_db --datadir=/mydata/data/ --user=mysql
ll
chown -R root .
ln -sv /usr/local/mysql/include /usr/include/mysql
vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib
ldconfig
ls
ls man/
vim /etc/man.config
MANPATH /usr/local/mysql/man
man mysqld
vim /etc/profile
PATH=$PATH:/usr/local/mysql/bin
在export之前
. /etc/profile 生效
4、cd support-files/
ls
cp my-large.cnf /etc/my.cnf
vim /etc/my.cnf
datadir = /mydata/data
在[mysqld]中添加
cp mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld
service mysqld start
5、mysql連接
mysql> use mysql;設置默認表
mysql> SHOW TABLES;
mysql> DESC user;查看錶
mysql> SELECT HOST,USER,PASSWORD from user;
mysql> SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('redhat');
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'172.16.%.%' IDENTIFIED BY 'redhat';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.%.%' IDENTIFIED BY 'redhat';
mysql> DROP USER ''@localhost;刪除匿名的
mysql> FLUSH PRIVILEGES;
mysql> \q
在Windows中安裝MySQL
mysql -uroot -p -h172.16.6.1連接測試