MySQL數據庫知識複習

 

  1. 什麼是數據庫?

所謂數據庫,就是存儲數據的倉庫。數據有多種形式:文字,圖片,電影mysql

 

  1. 什麼是數據庫系統?

管理數據庫的軟件就被稱爲數據庫系統。數據庫系統通常分爲兩個部分:數據庫(DB),數據庫管理系統(DBMSsql

  1. 數據庫在Web程序開發中重要地位

動態網站基本上都是要對數據進行操做。例如新聞網站:當咱們瀏覽新聞的時候,網頁的內容會常常發生變化,框架是不會變的。這就是一個典型的動態網頁。動態網頁的數據就是存儲在數據庫裏面。數據庫

PHP鏈接數據庫執行過程服務器

 

 

 

 

 

  1. 爲何選擇MySQLPHP進行合做

理由很簡單,全都免費,中小企業的福音框架

 

  1. 結構化查詢語言

SQL:結構化查詢語言ide

SQL能夠分爲4個部分:DMLDDLDQLDCL函數

DML:數據操做語言,用於操做數據庫中的數據,例如insertupdatedelete網站

DDL:數據定義語言,用於定義和管理數據對象,createdropalter編碼

DQL:數據查詢語言,用於查詢數據的,selectspa

DCL:數據控制語言,主要用於權限上面的修改,GRANTcommitrollback

 

  1. 數據庫相關操做

既然要操做數據庫,那麼首先須要鏈接數據庫

語法:mysql  -h 服務器主機地址 –u 用戶名 –p 用戶密碼

-h:指定所要鏈接的數據庫服務器的位置,能夠是IP地址,也能夠是服務器域名

-u:數據庫服務器所使用的用戶名  

-p:鏈接數據庫服務器所使用的密碼

 

  1. 查看當前數據庫系統裏面的全部數據庫

Show  databases

 

  1. 建立新用戶並受權

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=’用戶名’

示例:

 

Dropdelete的區別

Drop就是徹底刪除,包括權限表裏面對應的權限信息和其餘相關信息

Delete只是將該用戶刪除,並無刪除權限表相關的數據。後期若是從新創建一個同名的用戶的話,權限就會繼承以前的權限

 

  1. 數據庫相關操做

建立數據庫

語法: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 新表名

 

方法2rename table 舊錶名 to 新表名

 

 

給數據表添加列

語法:alter table 表名 add 新列名 數據類型

 

 

若是想要新添加的字段在全部字段的最開頭,後面再添加一個first關鍵字便可

 

 

修改某一個字段位於另一個字段後面

語法:alter table 表名

  Modify 字段名1 數據類型 after 字段名2

 

 

刪除某列

Alter table 表名

Drop 列名

 

 

修改字段的數據類型

語法:alter table 表名

 Change  原字段名  新字段名  新數據類型

 

 

刪除表

Drop table 表名

 

 

 

MySQL裏面的數據類型

MySQL裏面的數據類型大體能夠分爲5類:整數數據類型,浮點型數據類型,字符串數據類型,日期時間數據類型,二進制數據類型

 

整數數據類型

整數數據類型大體又分爲5類:TINYINT1),SMALLINT2),MEDIUMINT3),INT4),BIGINT8

 

浮點型數據類型:分爲3種,float4),double8),decimal17

 

字符串數據類型:分爲6種,charvarcharTINYTEXTTEXTMEDIUMTEXTLONGTEXT

charvarcharchar是定長,varchar是變長

char5abc  實際佔用內存仍是5個字節

varchar5abc  根據數據的長度實際佔用的長度會改變,這裏由於abc只有3個字節,因此只佔用3個字節

這兩個不存在誰好誰壞,char是省時間,varchar省空間

 

時間日期數據類型:分爲5種,DATETIMEYEARDATETIMETIMESTAMP

時間戳:所謂時間戳,就是從197011000秒到如今的總秒數

 

 

數據的完整性

要實現數據的完整性,方法有4種:實體完整性,域完整性,引用完整性,自定義完整

 

實體完整性

所謂實體,就是一條完整的數據,換句話說,就是一行信息

姓名

年齡

分數

性別

張三

18

100

李四

20

99

保證明體完整性:主鍵約束和惟一約束

在建立表的時候,在字段後面添加primary key關鍵字

例如:建立表時id做爲主鍵示例:

 

主鍵事實上就等於非空+惟一

指定某個字段爲主鍵的方法二:

 

 

惟一約束:unique指定某一字段的值必須是惟一的

 

設置了惟一約束之後,字段的值就必須是惟一值

 

證實:主鍵=非空加惟一

 

 

域完整性:數據類型,非空約束,默認約束,檢查約束(mysql不支持檢查約束)

所謂域,就是指一列

數據類型:咱們在建立表的時候指定數據類型,必定程度就是實現了域完整性(列完整性)例如age列是填寫年齡的,咱們將其數據類型指定爲int後該列的數據類型就只能是int型,從而保證了域完整性

 

非空約束:not null

 

 

默認約束:給某一個字段默認值

Default

 

 

引用完整性

引用完整性是經過外鍵約束來實現

一個表的某一個字段是引用的另一張表的主鍵,該字段就被稱之爲外鍵

示例:有兩張表:班級班,一個是學生表

班級表:有3個班,分別是pg37pg39youxiban

 

學生表:

 

 

 

自定義完整性

就是由用戶本身指定約束條件。

 

設置字段自動增長  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 表名

 

 

Deletetruncate區別:

  1. Truncate是直接銷燬表,而後從新創建一個如出一轍的表,delete則是一條一條的進行刪除,若是是要刪除全表的話,truncate的效率要比delete要高
  2. 雖然truncate效率比delete高,可是沒有delete靈活,由於delete能夠指定具體刪除某一條數據
  3. Truncate通常是被認爲DDL語句,delete是被分爲DML語句
  4. Truncate刪除全部數據後再從新添加數據,自動增加的字段從新從1開始增加,可是delete的話從刪除前的最大值+1開始

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

 

 

 

聯表查詢

  1. 什麼是聯表查詢?

所謂聯表查詢,就是將多個表橫向鏈接起來,進行查詢。相比子查詢,要更加容易理解。

 

  1. 外鍵

所謂外鍵,就是指一個字段去引用另一張表的主鍵字段

外鍵約束:所謂外鍵約束,就是由於系統並不知道兩張表之間的關係,因此咱們添加外鍵約束來讓系統知道兩張表是存在引用關係

 

刪除外鍵

語法:alter  table  表名(表名是有外鍵的那一張表)

  Drop foreign key 外鍵名

 

  1. 表與表之間的關係

表與表之間的關係:一對一,一對多,多對多

一對一:人與身份證之間的關係

一對多:好比學生和班級之間的關係就是一對多,一個學生只可能屬於一個班級,可是一個班級能夠對應多個學生

多對多:例如菜市場,一個商家能夠對應多個買主,一個買主也能夠去多個商家買菜

 

  1. 聯表查詢

聯表查詢能夠分爲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

相關文章
相關標籤/搜索