MySQL簡介:MySQL是開源免費的數據庫,小型的數據庫.已經被Oracle收購了.MySQL5.5版本以後都是由Oracle發佈的版本,MySQL以前被SUN公司收購,而SUN公司如今又被Oracle公司收購,因此如今MySQL也是屬於Oracle旗下的一款產品。mysql
1.什麼是MySQL?linux
維基百科上這麼解釋:sql
MySQL本來是一個開放源碼的關係數據庫管理系統,原開發者爲瑞典的MySQL AB公司,該公司於2008年被昇陽微系統(Sun Microsystems)收購。2009年,甲骨文公司(Oracle)收購昇陽微系統公司,MySQL成爲Oracle旗下產品。
MySQL在過去因爲 性能高、成本低、可靠性好,已經成爲最流行的開源數據庫,所以被普遍地應用在Internet上的中小型網站中。隨着MySQL的不斷成熟,它也逐漸用於更多大規模網站和應用
但被甲骨文公司收購後,Oracle大幅調漲MySQL商業版的售價,且甲骨文公司再也不支持另外一個自由軟件項目OpenSolaris的發展,所以致使自由軟件社羣們對於Oracle是否還會持續支持 MySQL社羣版(MySQL之中惟一的免費版本 有所隱憂,MySQL的創始人麥克爾·維德紐斯以MySQL爲基礎,成立分支計劃MariaDB。而原先一些使用MySQL的開源軟件逐漸轉向MariaDB或其它的數據庫數據庫
2.爲何要使用MySQL?centos
主要有如下幾點:服務器
(1).mysql性能卓越,服務穩定,不多出現異常宕機。網絡
(2).mysql開放源代碼且無版權制約,自主性及使用成本低。架構
(3).mysql歷史悠久,社區及用戶很是活躍,遇到問題,能夠尋求幫助。ide
(4).mysql軟件體積小,安裝使用簡單,而且易於維護,安裝及維護成本低。函數
(5).mysql品牌口碑效應,使得企業無需考慮就直接用之,lamp,lnmp流行架構。
(6).mysql支持多種操做系統,提供多種API接口,支持多種開發語言,特別對流行的PHP語言有很好的支持。
3.MySQL安裝
首先在這裏咱們來教你們用linux來安裝咱們的MySQL,在linux裏有兩種方式一:rpm軟件包管理,rpm至關於咱們的本地安裝,二:yum安裝,yum安裝就至關於在線安裝,好了如今來進入咱們的安裝教程:
在線安裝方式
1.打開虛擬機:
查看是否有MySQL軟件:rpm -qa|grep mysql
有的話咱們可使用卸載方式:
yum remove mysql mysql-server mysql-libs mysql-common
rm -rf /var/lib/mysql
rm /etc/my.cnf
查看是否還有mysql軟件,有的話繼續刪除。
軟件卸載完畢後若是須要能夠刪除mysql的數據庫:/var/lib/mysql
2.下載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.安裝倉庫列表:
注意:在上傳的mysql的rpm包當前目錄下,執行如下命令:
yum localinstall mysql-community-release-el6-5.noarch.rpm
4.安裝mysql
yum install mysql-community-server
Rpm本地安裝方式
若是沒有網絡環境可使用參考資料中的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' 須要替換成實際的用戶名和密碼。
關閉linux的防火牆
[root@bogon linux]# service iptables stop
iptables:清除防火牆規則: [肯定]
iptables:將鏈設置爲政策 ACCEPT:filter [肯定]
iptables:正在卸載模塊: [肯定]
1.數據庫操做:database
建立數據庫
語法:
* create database 數據庫名;
* create database 數據庫名 character set 字符集;
查看數據庫
查看數據庫服務器中全部的數據庫:show database;
查看某個數據庫定義的信息:show create database 數據庫名;
刪除數據庫
drop database 數據庫名稱;
其餘的數據庫操做命令
切換數據庫: use 數據庫名;
查看正在使用的數據庫:select database();
表操做: table
字段類型
經常使用的類型有:
數字型: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 表名(
字段名 類型(長度) 約束,
字段名 類型(長度) 約束
);
查看錶
查看數據庫中的全部表: show tables;
查看錶結構: desc 表名;
刪除表
drop table 表名;
修改表
alter table 表名 add 列名 類型(長度) 約束; --修改表添加列.
alter table 表名 modify 列名 類型(長度) 約束; --修改表修改列的類型長度及約束.
alter table 表名 change 舊列名 新列名 類型(長度) 約束; --修改表修改列名.
alter table 表名 drop 列名; --修改表刪除列
rename table 表名 to 新表名; --修改表名
alter table 表名 character set 字符集; --修改表的字符集
插入記錄
語法:
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. 值若是是字符串或者日期須要加引號’’ (通常是單引號)
更新記錄
語法:
update 表名 set 字段名=值,字段名=值;
update 表名 set 字段名=值,字段名=值 where 條件;
注意:
1. 列名的類型與修改的值要一致.
2. 修改值得時候不能超過最大長度.
3.值若是是字符串或者日期須要加’’.
刪除記錄
delete from 表名 [where 條件];
sql查詢
1.查詢商品名稱爲十三香的商品全部信息:
* select * from product where pname = '十三香';
2.查詢商品價格>60元的全部的商品信息:
* select * from product where price > 60;
where後的條件寫法:
* > ,<,=,>=,<=,<>
* like 使用佔位符 _ 和 % _表明一個字符 %表明任意個字符.
* select * from product where pname like '%新%';
* in在某個範圍中得到值(exists).
* select * from product where pid in (2,5,8);
比較運算符 |
> < <= >= = <> |
大於、小於、大於(小於)等於、不等於 |
BETWEEN ...AND... |
顯示在某一區間的值(含頭含尾) |
|
IN(set) |
顯示在in列表中的值,例:in(100,200) |
|
LIKE ‘張_’ |
模糊查詢,Like語句中,% 表明零個或多個任意字符,_ 表明一個字符,例first_name like ‘_a%’; |
|
IS NULL |
判斷是否爲空 |
|
邏輯運算符 |
and |
多個條件同時成立 |
or |
多個條件任一成立 |
|
not |
不成立,例:where not(salary>100); |
排序
SQL語法關鍵字:
ORDER BY
ASC(升序) DESC(降序)
聚合函數(組函數)
特色:只對單列進行操做
經常使用的聚合函數:
sum():求某一列的和
avg():求某一列的平均值
max():求某一列的最大值
min():求某一列的最小值
count():求某一列的元素個數
分組
SQL語法關鍵字:
GROUP BY
HAVING
注意事項:
1. select語句中的列(非聚合函數列),必須出如今group by子句中
2. group by子句中的列,不必定要出如今select語句中
3.聚合函數只能出現select語句中或者having語句中,必定不能出如今where語句中。
語法順序和執行順序(重要) ***
MySQL查詢語法順序
1. SELECT
2. FROM
3. LEFT JOIN
4. ON
5. WHERE
6. GROUP BY
7. HAVING
8. ORDER BY
9. LIMIT
執行順序
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條件的時候,優先級高的部分要去編寫過濾力度最大的條件語句。
表與表之間的關係
一對一關係
常見實例:一夫一妻
一對多關係
常見實例:會員和訂單
多對多關係(須要中間表實現)
常見實例:商品和訂單
外鍵
如何操做外鍵
主表添加外鍵的格式:
alter table 表名 add [constraint][約束名稱] foreign key (主表外鍵字段) references 從表(從表主鍵)
主表刪除外鍵的格式:
alter table 表名 drop foreign key 外鍵約束名稱
使用外鍵目的:
保證數據完整性(數據保存在多張表中的時候)
在互聯網項目中,通常狀況下,不建議創建外鍵關係。
一對多關係
一個分類對應多個商品
總結:有外鍵的就是多的一方。
注意事項:
一對多關係和一對一關係的建立很相似,惟一區別就是外鍵不惟一。
一對多關係建立:
添加外鍵列
添加外鍵約束
多對多關係
同一個商品對應多個訂單,一個訂單對應多個商品
注意事項:
須要中間表去完成多對多關係的建立
多對多關係其實就是兩個一對多關係的組合
多對多關係建立:
建立中間表,並在其中建立多對多關係中兩張表的外鍵列
在中間表中添加外鍵約束
在中間表中添加聯合主鍵約束
JOIN 按照功能大體分爲以下三類:
CROSS JOIN(交叉鏈接)
INNER JOIN(內鏈接或等值鏈接)。
OUTER JOIN(外鏈接)
交叉鏈接
交叉鏈接的關鍵字:CROSS JOIN
隱式交叉鏈接
SELECT * FROM A,B
顯示交叉鏈接
SELECT * FROM A CROSS JOIN B
內鏈接
內鏈接的關鍵字:INNER JOIN
隱式內鏈接
SELECT * FROM A,B WHERE A.id = B.id
顯示內鏈接
SELECT * FROM A INNER JOIN B ON A.id = B.id
分頁查詢
MySQL的分頁關鍵字是:LIMIT
格式:
SELECT * FROM TABLE LIMIT [offset,] rows
MySQL事務處理
事務概述:
MySQL 事務主要用於處理操做量大,複雜度高的數據。好比說,在人員管理系統中,你刪除一我的員,
你即須要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數據庫操做語句就構成一個事務!
通常來講,事務是必須知足4個條件(ACID):
Atomicity(原子性)
Consistency(穩定性)
Isolation(隔離性)
Durability(可靠性)
對於ACID的解釋以下:
原子性:構成事務的的全部操做必須是一個邏輯單元,要麼所有執行,要麼所有不執行。
穩定性(一致性):數據庫在事務執行先後狀態都必須是穩定的。
隔離性:事務之間不會相互影響。
可靠性(持久性):事務執行成功後必須所有寫入磁盤