所謂數據庫,就是存儲數據的倉庫。數據有多種形式:文字,圖片,電影mysql
管理數據庫的軟件就被稱爲數據庫系統。數據庫系統通常分爲兩個部分:數據庫(DB),數據庫管理系統(DBMS)sql
動態網站基本上都是要對數據進行操做。例如新聞網站:當咱們瀏覽新聞的時候,網頁的內容會常常發生變化,框架是不會變的。這就是一個典型的動態網頁。動態網頁的數據就是存儲在數據庫裏面。數據庫
PHP鏈接數據庫執行過程服務器
理由很簡單,全都免費,中小企業的福音框架
SQL:結構化查詢語言ide
SQL能夠分爲4個部分:DML,DDL,DQL,DCL函數
DML:數據操做語言,用於操做數據庫中的數據,例如insert,update,delete網站
DDL:數據定義語言,用於定義和管理數據對象,create,drop,alter編碼
DQL:數據查詢語言,用於查詢數據的,selectspa
DCL:數據控制語言,主要用於權限上面的修改,GRANT,commit,rollback
既然要操做數據庫,那麼首先須要鏈接數據庫
語法:mysql -h 服務器主機地址 –u 用戶名 –p 用戶密碼
-h:指定所要鏈接的數據庫服務器的位置,能夠是IP地址,也能夠是服務器域名
-u:數據庫服務器所使用的用戶名
-p:鏈接數據庫服務器所使用的密碼
Show databases
Mysql裏面默認的用戶是root,咱們能夠經過grant語句來建立新用戶而且受權
語法:
Grant 權限 on 數據庫.數據表 to 用戶名@登陸主機 identified by 「密碼」
示例:建立一個叫作xiejie的用戶,權限是能夠操做全部的數據庫的全部表,密碼是123
all 表明全部權限
*.* 表明全部數據庫的全部數據庫表
查看mysql數據庫裏面的全部用戶
語法:
Select distinct concat(‘user:’ ’’,user,’’’@’’’,host,’’’;’)as query from mysql.user
查看具體某一個用戶的權限
語法:
Show grants for ‘用戶名’@’主機名’;
刪除用戶
方法一:
語法:drop user ‘用戶名’@’主機名’
以下:
方法二:
語法:
Delete from mysql.user where host=’主機名’ and user=’用戶名’
示例:
Drop和delete的區別
Drop就是徹底刪除,包括權限表裏面對應的權限信息和其餘相關信息
Delete只是將該用戶刪除,並無刪除權限表相關的數據。後期若是從新創建一個同名的用戶的話,權限就會繼承以前的權限
建立數據庫
語法:create database 數據庫名;
查看字符集
語法:show variables like ‘char%’;
校對規則:所謂校對規則,就是排序的方式,比較的規則。簡單來說就是按照什麼樣的規則進行排序
查看mysql裏面的校對規則:
Show collation;
Mysql中校對規則部分截圖
_ci:對大小寫不敏感
_cs:對大小寫敏感
_bin:基於二進制編碼進行比較
因此咱們建立數據庫的時候能夠指定字符集和校對規則
語法:
Create database 數據庫名 character set 字符集 collate 校對規則
若是要使用數據庫,須要先指定哪個數據庫
Use 數據庫名
刪除數據庫
語法:drop database 數據庫名
修改已經建立好了的數據庫的字符集和校對規則
語法:
Alter database 數據庫名
[character set 字符集 collate 校對規則];
查看當前使用的數據庫
Select database()
查看數據庫
方法有2種:
顯示全部的數據庫
Show databases
顯示數據庫建立語句
Show create database 數據庫名
咱們能夠在後面添加一個\G,使其格式化輸出,方便咱們查看
數據表相關
創建數據表
語法:
Create table 表名(字段名1 數據類型,字段名2 數據類型,字段名2 數據類型…);
建立數據表的時候也能夠指定表的字符集和校對規則
查看數據表:3種方法
方法1:
Describe 表名
有一個簡寫:desc就是Describe的簡寫
查看全部數據表
Show tables
查看建表語句
Show create table 表名\G
加了\G的狀況
數據表相關操做
修改表名
Alter table 原表名 rename 新表名
方法2:rename table 舊錶名 to 新表名
給數據表添加列
語法:alter table 表名 add 新列名 數據類型
若是想要新添加的字段在全部字段的最開頭,後面再添加一個first關鍵字便可
修改某一個字段位於另一個字段後面
語法:alter table 表名
Modify 字段名1 數據類型 after 字段名2
刪除某列
Alter table 表名
Drop 列名
修改字段的數據類型
語法:alter table 表名
Change 原字段名 新字段名 新數據類型
刪除表
Drop table 表名
MySQL裏面的數據類型
MySQL裏面的數據類型大體能夠分爲5類:整數數據類型,浮點型數據類型,字符串數據類型,日期時間數據類型,二進制數據類型
整數數據類型
整數數據類型大體又分爲5類:TINYINT(1),SMALLINT(2),MEDIUMINT(3),INT(4),BIGINT(8)
浮點型數據類型:分爲3種,float(4),double(8),decimal(17)
字符串數據類型:分爲6種,char,varchar,TINYTEXT,TEXT,MEDIUMTEXT,LONGTEXT
char和varchar:char是定長,varchar是變長
char(5)abc 實際佔用內存仍是5個字節
varchar(5)abc 根據數據的長度實際佔用的長度會改變,這裏由於abc只有3個字節,因此只佔用3個字節
這兩個不存在誰好誰壞,char是省時間,varchar省空間
時間日期數據類型:分爲5種,DATE,TIME,YEAR,DATETIME,TIMESTAMP
時間戳:所謂時間戳,就是從1970年1月1日0時0分0秒到如今的總秒數
數據的完整性
要實現數據的完整性,方法有4種:實體完整性,域完整性,引用完整性,自定義完整
實體完整性
所謂實體,就是一條完整的數據,換句話說,就是一行信息
姓名 |
年齡 |
分數 |
性別 |
張三 |
18 |
100 |
男 |
李四 |
20 |
99 |
女 |
保證明體完整性:主鍵約束和惟一約束
在建立表的時候,在字段後面添加primary key關鍵字
例如:建立表時id做爲主鍵示例:
主鍵事實上就等於非空+惟一
指定某個字段爲主鍵的方法二:
惟一約束:unique指定某一字段的值必須是惟一的
設置了惟一約束之後,字段的值就必須是惟一值
證實:主鍵=非空加惟一
域完整性:數據類型,非空約束,默認約束,檢查約束(mysql不支持檢查約束)
所謂域,就是指一列
數據類型:咱們在建立表的時候指定數據類型,必定程度就是實現了域完整性(列完整性)例如age列是填寫年齡的,咱們將其數據類型指定爲int後該列的數據類型就只能是int型,從而保證了域完整性
非空約束:not null
默認約束:給某一個字段默認值
Default
引用完整性
引用完整性是經過外鍵約束來實現
一個表的某一個字段是引用的另一張表的主鍵,該字段就被稱之爲外鍵
示例:有兩張表:班級班,一個是學生表
班級表:有3個班,分別是pg37,pg39和youxiban
學生表:
自定義完整性
就是由用戶本身指定約束條件。
設置字段自動增長 auto_increment
設置了自動增加後字段能夠自動增加
注意:設置自動增加時,該字段須要是主鍵或者設置了非空約束
存儲引擎
所謂存儲引擎,實際上就是指存儲表的類型是什麼
查看mysql裏面的存儲引擎
Show engines;
MyISAM:以前mysql主打的是MyISAM存儲引擎
InnoDB:如今mysql主打的是InnoDB
使用DML語句更改數據
DML語句無外乎就是3個,增長,刪除,修改
添加語句
Insert into 表名(要添加信息的字段名) values (對應字段的值)
若是是給全部字段添加數據
Insert into 表名 values (對應字段的值)
Insert into 表名
Set 字段名1=值1,字段名2=值2…
更新數據
Update 表名
Set 字段名1=值1,字段名2=值2…
須要注意的是:更新數據必定要和where進行配合使用
刪除數據
方法有2種:
經過delete關鍵字來刪除數據
語法:delete from 表名
Where 條件表達式
注意點:刪除某條數據之後,再從新添加新的數據,新的數據的主鍵部分的編號不作改變
刪除數據,後面的數據的主鍵編號也不會改變
刪除所有數據
Delete from 表名
Truncate 表名
Delete和truncate區別:
Truncate的狀況:
Delete的狀況
表的複製
方法一:
Create table 新表名 like 舊錶名
注意:該方法只會複製表的結構,內容是不會被拷貝過去的
語法2:
Create table 新表名 as
(select * from 舊錶名)
注意:該方法雖然能夠複製內容,可是表結構不能獲得徹底的複製,自動增加和主鍵會丟失
語法3:
Create table 新表名 like 舊錶名;
Insert into 新表名 select * from 舊錶名;
DQL語句
DQL語句其實就是查詢語句,就只有一個select
Select * from 表名
Select 字段名1,字段名2… from 表名
按條件查詢
用where關鍵字對信息進行過濾
= |
等於 |
> |
大於 |
!= |
不等於 |
< |
小於 |
>= |
大於等於 |
<> |
也是表示不等於 |
<= |
小於等於 |
|
|
例如:查詢年齡大於20歲的人的姓名
In:判斷一個字段的值是否在一個集合裏面
能夠和not關鍵進行配合,表示不在某一個集合
Between..and:表示是一個範圍
例如:要找18-20之間的人
能夠和not配合,表示再也不某一個範圍
空值查詢
Is null 表明空值查詢
查詢非空
Distinct:排除重複值
示例:找出學生有哪些年齡
注意:distinct只能放在查詢字段的最前面,不能放在後面,放在後面會報錯
模糊查詢
模糊查詢使用like關鍵字配合%和_
查詢名字裏面含有z字母的人
下劃線表明的意思就是一個_就匹配一個字符
須要注意空格也要匹配一個字符,因此也須要一個_
若是要查詢的內容裏面也包含了%或者下劃線,那麼須要對其進行轉義\
And
兩個條件都必須知足
Or:知足一個條件就能夠
聚合函數和分組
聚合函數以下表
函數名 |
做用 |
函數名 |
做用 |
Count() |
返回某列的行數 |
Max() |
最大值 |
Sum() |
返回某列的和 |
Min() |
最小值 |
Avg() |
返回某列的平均值 |
|
|
主要注意一個平均數的計算
若是是使用系統提供的avg()函數,則有null值得字段不會被計算進去,根據實際業務需求,若是想要將null計算到平均數裏面,則須要本身定義。
排序
排序的關鍵字是order by
升序 ASC 降序DESC
升序的關鍵字ASC是能夠省略的
降序desc
分組:使用的關鍵字爲group by
以下:
還有一個和group by關鍵字一塊兒配合的使用的是having
Having:用於過濾
Where:用於過濾
Where是在分組前進行過濾,having是在分組後進行過濾
先用where進行id過濾,而後進行分組,最後再過濾出分組後的成績
限制查詢結果
Limit:能夠指定返回多少行數據
語法:limit a,b
A:表明開始的小標
B:表明總共顯示多少條
例如:1-100 5-15 limit 4,11
爲表取別名
關鍵字as
聯表查詢
所謂聯表查詢,就是將多個表橫向鏈接起來,進行查詢。相比子查詢,要更加容易理解。
所謂外鍵,就是指一個字段去引用另一張表的主鍵字段
外鍵約束:所謂外鍵約束,就是由於系統並不知道兩張表之間的關係,因此咱們添加外鍵約束來讓系統知道兩張表是存在引用關係
刪除外鍵
語法:alter table 表名(表名是有外鍵的那一張表)
Drop foreign key 外鍵名
表與表之間的關係:一對一,一對多,多對多
一對一:人與身份證之間的關係
一對多:好比學生和班級之間的關係就是一對多,一個學生只可能屬於一個班級,可是一個班級能夠對應多個學生
多對多:例如菜市場,一個商家能夠對應多個買主,一個買主也能夠去多個商家買菜
聯表查詢能夠分爲3類:內鏈接,外連接,以及自鏈接
內鏈接:inner join
在mysql裏面,若是直接執行inner join可是不給條件的話,會得出笛卡爾乘積。
這裏有兩張表
學生表 班級表
接下來咱們來執行不給條件的內鏈接,會獲得笛卡爾乘積
在mysql裏面,若是內鏈接不給條件,那麼能夠獲得笛卡爾乘積,這是mysql的特殊處理機制。在其餘數據庫管理系統裏面要獲得笛卡爾乘積,使用的關鍵字爲cross join。
在mysql裏面,使用cross join也可以正常的獲得笛卡爾乘積
語法:(內鏈接中的inner關鍵字能夠省略)
Select 字段 from 表1 join 表2 on 表1.字段=表2.字段
除了on之外,還有where關鍵字是能夠用的
雖然兩個關鍵字都可以得出相同的效果,可是on的效率要高於where
On:在內聯以前就進行過濾
Where:產生了笛卡爾乘積之後進行過濾
外鏈接:
外鏈接分爲3種:左外鏈接,右外鏈接,全外鏈接(mysql不支持全外鏈接)
使用union能夠模擬出全外鏈接
左外鏈接:顯示左表的所有數據
以下:修改學生表的數據以下,添加niuer同窗,班級編號爲4,可是在班級表裏面沒有編號爲4的班級
接下來進行左外鏈接,把左邊表的數據所有顯示出來
右外鏈接示例
首先給班級表添加新的數據,以下:
接下來進行右外鏈接,所謂右外鏈接,就是將右表的數據所有顯示出來,無論左表有沒有,若是左表沒有,顯示爲null
關於左表和右表的判斷,很是簡單,join左邊的就是左表,join右邊的就是右表
全外鏈接:在標準的sql,全外鏈接的關鍵字爲full join
左表右表的數據都顯示出來,雖然mysql不支持全外鏈接,可是可使用union模擬全外鏈接
自鏈接:所謂自鏈接,就是本身鏈接本身,自鏈接的表來源源於同一張表,自鏈接其實就是內聯或者外聯的一種特殊狀況
例如:有以下職員表
EmpID:員工編號 empName:員工姓名 leaderID:領導編號
查詢員工的姓名和所屬領導的姓名
複合條件鏈接查詢
所謂複合條件鏈接查詢,就是指在鏈接查詢的基礎添加一些過濾條件,如排序,limit