1.什麼是資料庫
資料庫是“按照資料結構來組織、存儲和管理資料的倉庫”。是一個長期存儲在計算機内的、有組織的、有共享的、統一管理的資料集合。
資料庫是以一定方式儲存在一起、能與多個使用者共享、具有盡可能小的備援度、與應用程式彼此獨立的資料集合,可視為電子化的檔案櫃——存儲電子檔案的處所,使用者可以對檔案中的資料進行新增、查詢、更新、删除等操作。
資料庫分關系型資料庫和非關系型資料庫。
1.1.關系型資料庫
關系型資料庫,是指采用了關系模型來組織資料的資料庫,其以行和列的形式存儲資料,以便于使用者了解,關系型資料庫這一系列的行和列被稱為表,一組表組成了資料庫。
下面是示例MySQL資料庫結構的大緻圖解
1.2.非關系型資料庫
NoSQL,泛指非關系型的資料庫。NoSQL最常見的解釋是“non-relational”, “Not Only SQL”也被很多人接受。NoSQL僅僅是一個概念,泛指非關系型的資料庫,差別于關系資料庫,它們不保證關系資料的ACID特性。
2.目前流行的有哪些關系型資料庫
2.1:MySQL
MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),它是一個小型的資料庫,因為其速度、可靠性和适應性而備受關注。MySQL資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。由于MySQL是開放源代碼免費的,是以任何人都可以在General Public License的許可下下載下傳并根據個性化的需要對其進行修改。MySQL一開始被sun公司十億美金收購,後來又被oracle以74億美金收購,可謂是一波三折,MySQL生命力還是挺頑強的,是以MySQL5.5以上的版本都是由Oracle推出的,我們現在使用的都是5.X版本。
2.2:oracle
oracle是由甲骨文公司的一款大型關系型資料庫管理系統,系統可移植性好、使用友善、功能強,适用于各類大、中、小、微機環境。它是一種高效率、可靠性好的、适應高吞吐量的資料庫方案。但是由于是收費的,大部分中小企業普遍不使用它。
2.3:DB2
IBM公司的資料庫産品,收費的。常應用在銀行系統中. 在中國的網際網路公司,要求去IOE(阿裡提出的IBM小型機、Oracle資料庫、EMC儲存設備)
2.4:SQLServer
MicroSoft 公司收費的中型的資料庫。C#、.net等語言常使用。
2.5:SyBase
已經淡出曆史舞台。提供了一個非常專業資料模組化的工具PowerDesigner。
2.6:SQLite
嵌入式的小型資料庫,應用在手機端。
3.MySQL的安裝圖解
3.1:在Windows上安裝
l 配置MysQL服務
l 啟動和關閉(必須以管理運作cmd指令視窗)
l 登入
格式1:cmd> mysql –u使用者名 –p密碼
例如:mysql -uroot –proot
格式2:cmd> mysql --user=使用者名 --host=ip位址 --password=密碼
3.1.1: SQLyog 安裝與使用
l 安裝:
提供的SQLyog軟體為免安裝版,可直接使用
l 使用:
輸入使用者名、密碼,點選連接配接按鈕,進行通路MySQL資料庫進行操作
在Query視窗中,輸入SQL代碼,選中要執行的SQL代碼,按F8鍵運作,或按執行按鈕運作。
3.2 Linux上安裝MySQL
3.2.1 第一種本地安裝,檢視Linux上是否 存在MySQL
rpm -qa|grep mysql
如果有,解除安裝方法:
因為Linux自帶MySQL,但是版本較低對現在的需求可能會很吃力
yum remove mysql mysql-server mysql-libs mysql-common
rm -rf /var/lib/mysql
rm /etc/my.cnf
檢視是否還有mysql軟體,有的話繼續删除。軟體解除安裝完畢後如果需要可以删除mysql的資料庫:/var/lib/mysql
如果沒有網絡環境可以使用參考資料中的mysql-rpm檔案夾下的mysql安裝包來安裝。
第一步:将以下檔案上傳到linux系統
第二步:使用rpm指令進行安裝
[root@bogon mysql-rpm]# rpm -ivh mysql-community-*
安裝後,啟動服務、設定密碼、遠端授權後既可以使用。
service mysqld start
設定root使用者密碼
mysql資料庫安裝完以後隻會有一個root管理者賬号,但是此時的root賬号還并沒有為其設定密碼,在第一次啟動mysql服務時,會進行資料庫的一些初始化工作,在輸出的一大串資訊中,我們看到有這樣一行資訊 :
/usr/bin/mysqladmin -u root password \'new-password\' // 為root賬号設定密碼
mysql遠端連接配接授權
mysql>GRANT ALL PRIVILEGES ON *.* TO \'myuser\'@\'%\' IDENTIFIED BY \'mypassword\' WITH GRANT OPTION;
注意:\'myuser\'、\'mypassword\' 需要替換成實際的使用者名和密碼。
3.2.2 第二種線上安裝方式
3.2.2.1 下載下傳rpm包
要使用yum 安裝mysql,要使用mysql的yum倉庫,先從官網下載下傳适合你系統的倉庫http://dev.mysql.com/downloads/repo/yum/,我們是centos6.4對應的rpm包為:mysql-community-release-el6-5.noarch.rpm,然後将mysql-community-release-el6-5.noarch.rpm上傳到linux系統。
3.2.2.2 安裝倉庫清單
注意:在上傳的mysql的rpm包目前目錄下,執行以下指令:
yum localinstall mysql-community-release-el6-5.noarch.rpm
4. SQL語句
4.1 什麼是SQL語句
全稱Structured Query Language,簡稱SQL,中文叫結構化查詢語言。
關系資料庫語言的國際标準。SQL92、SQL99
不隻是mysql還有其他資料庫,在SQL92或者SQL99這些國際SQL标準基礎之上,它們還擴充了自己的一些SQL語句,比如MySQL中的limit關鍵字
4.2 SQL分類
資料定義語言:簡稱DDL(Data Definition Language),用來定義資料庫對象:資料庫,表,列等。關鍵字:create,alter,drop等
資料操作語言:簡稱DML(Data Manipulation Language),用來對資料庫中表的記錄進行更新。關鍵字:insert,delete,update等
資料控制語言:簡稱DCL(Data Control Language),用來定義資料庫的通路權限和安全級别,及建立使用者;關鍵字:grant等
資料查詢語言:簡稱DQL(Data Query Language),用來查詢資料庫中表的記錄。關鍵字:select,from,where等
4.3 SQL語句的使用
建立資料庫:
文法:
* create database 資料庫名;
* create database 資料庫名 character set 字元集;
檢視資料庫:
檢視資料庫伺服器中的所有的資料庫:show databases;
檢視某個資料庫的定義的資訊:show create database 資料庫名;
删除資料庫:
drop database 資料庫名稱;
4.4 操作表
4.4.1 字段類型
常用的類型有:
數字型:int
浮點型:double
字元型:varchar(可變長字元串)
日期類型:date(隻有年月日,沒有時分秒)
datetime(年月日,時分秒)
boolean類型:不支援
分類 | 類型名稱 | 說明 |
整數類型 | tinyInt | 很小的整數 |
smallint | 小的整數 | |
mediumint | 中等大小的整數 | |
int(integer) | 普通大小的整數 | |
小數類型 | float | 單精度浮點數 |
double | 雙精度浮點數 | |
decimal(m,d) | 壓縮嚴格的定點數------開發時用 | |
日期類型 | year | YYYY 1901~2155 |
time | HH:MM:SS -838:59:59~838:59:59 | |
date | YYYY-MM-DD 1000-01-01~9999-12-3 | |
datetime-開發用 | YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:00~ 9999-12-31 23:59:59 | |
timestamp | YYYY-MM-DD HH:MM:SS 1970~01~01 00:00:01 UTC~2038-01-19 03:14:07UTC | |
文本、二進制類型 | CHAR(M) | M為0~255之間的整數 |
VARCHAR(M) | M為0~65535之間的整數 | |
TINYBLOB | 允許長度0~255位元組 | |
BLOB | 允許長度0~65535位元組 | |
MEDIUMBLOB | 允許長度0~167772150位元組 | |
LONGBLOB | 允許長度0~4294967295位元組 | |
TINYTEXT | 允許長度0~255位元組 | |
TEXT | 允許長度0~65535位元組 | |
MEDIUMTEXT | 允許長度0~167772150位元組 | |
LONGTEXT | 允許長度0~4294967295位元組 | |
VARBINARY(M) | 允許長度0~M個位元組的變長位元組字元串 | |
BINARY(M) | 允許長度0~M個位元組的定長位元組字元串 |
建立表:
create table 表名(
字段名 類型(長度) 限制,
字段名 類型(長度) 限制
);
單表限制:
* 主鍵限制:primary key
* 唯一限制:unique
* 非空限制:not null
* 注意:主鍵限制 = 唯一限制 + 非空限制
檢視表:
檢視資料庫中的所有表:show tables;
檢視表結構:desc 表名;
删除表:
drop table 表名;
修改表:
alter table 表名 add 列名 類型(長度) 限制; --修改表添加列.
alter table 表名 modify 列名 類型(長度) 限制; --修改表修改列的類型長度及限制.
alter table 表名 change 舊列名 新列名 類型(長度) 限制; --修改表修改列名.
alter table 表名 drop 列名; --修改表删除列.
rename table 表名 to 新表名; --修改表名
alter table 表名 character set 字元集; --修改表的字元集
4.4.2 向表中插入資料:insert
文法:
insert into 表 (列名1,列名2,列名3..) values (值1,值2,值3..); -- 向表中插入某些列
insert into 表 values (值1,值2,值3..); --向表中插入所有列
insert into 表 (列名1,列名2,列名3..) values select (列名1,列名2,列名3..) from 表
insert into 表 values select * from 表
注意:
1. 列名數與values後面的值的個數相等
2. 列的順序與插入的值得順序一緻
3. 列名的類型與插入的值要一緻.
4. 插入值得時候不能超過最大長度.
5. 值如果是字元串或者日期需要加引号’’ (一般是單引号)
4.4.3 更新記錄:update
文法:
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 條件;
注意:
1. 列名的類型與修改的值要一緻.
2. 修改值得時候不能超過最大長度.
3. 值如果是字元串或者日期需要加’’
4.4.4 删除: delete
文法:
delete from 表名 [where 條件];
4.5 查詢表
4.5.1 查詢語句
SELECT [DISTINCT]*[列名,列名] FROM 表 [WHERE 條件].
4.6 條件查詢
比較運算符 | > < <= >= = <> | 大于、小于、大于(小于)等于、不等于 |
BETWEEN ...AND... | 顯示在某一區間的值(含頭含尾) | |
IN(set) | 顯示在in清單中的值,例:in(100,200) | |
LIKE ‘張_’ | 模糊查詢,Like語句中,% 代表零個或多個任意字元,_ 代表一個字元,例first_name like ‘_a%’; | |
IS NULL | 判斷是否為空 | |
邏輯運算符 | and | 多個條件同時成立 |
or | 多個條件任一成立 | |
not | 不成立,例:where not(salary>100); |
4.7 聚合函數
特點:隻對單列進行操作
常用的聚合函數:
sum():求某一列的和
avg():求某一列的平均值
max():求某一列的最大值
min():求某一列的最小值
count():求某一列的元素個數
4.8 文法順序和執行順序(重要)
l MySQL查詢文法順序
1. SELECT
2. FROM
3. LEFT JOIN
4. ON
5. WHERE
6. GROUP BY
7. HAVING
8. ORDER BY
9. LIMIT
執行順序
示例SQL:
SELECT * FROM user LEFT JOIN order ON user.id = order.uid WHERE order.price > 1000 GROUP BY user.name HAVING count(1) > 5 ORDER BY user.name LIMIT 0,10
1. FROM(将最近的兩張表,進行笛卡爾積)---VT1(虛拟表)
2. ON(将VT1按照它的條件進行過濾)---VT2
3. LEFT JOIN(保留左表的記錄)---VT3
4. WHERE(過濾VT3中的記錄)--VT4…VTn
5. GROUP BY(對VT4的記錄進行分組)---VT5
6. HAVING(對VT5中的記錄進行過濾)---VT6
7. SELECT(對VT6中的記錄,選取指定的列)--VT7
8. ORDER BY(對VT7的記錄進行排序)--遊标
9. LIMIT(對排序之後的值進行分頁)
WHERE條件執行順序(影響性能)
1. MYSQL:從左往右去執行WHERE條件的。
2. Oracle:從右往左去執行WHERE條件的。
結論:寫WHERE條件的時候,優先級高的部分要去編寫過濾力度最大的條件語句。