系統管理">系統管理
mysql服務">啟動MySQL服務
通過windows服務管理器啟動MySQL服務
1
|
開始
-->運行-->輸入services.msc命令-->啟動MySQL服務
|
通過DOS命令啟動MySQL服務
1
|
net start mysql
|
停止MySQL服務
通過windows服務管理器啟動MySQL服務
1
|
開始
-->運行-->輸入services.msc命令-->停止MySQL服務
|
通過DOS命令停止MySQL服務
1
|
net stop mysql
|
數據庫">登錄MySQL數據庫
通過DOS命令來登陸:
1
|
mysql -h 主機的地址 -u 用戶名 -p 密碼
|
使用MySQL Command Line Client 登錄,它在你安裝MySQL的目錄中
數據庫的基本操作
創建數據庫的語法格式:
1
|
create
databases 數據庫名稱 ;
|
例:創建一個名稱為xiaoxu的數據庫,SQL語句如下:
1
|
create
databases xiaoxu ;
|
查看數據庫的語法格式:
1
|
show databases ;
|
查看某個已創建好的數據庫的語法格式:
1
|
show
create
databases 數據庫名稱 ;
|
修改數據庫編碼的語法格式:
1
|
alter
database
數據庫名稱
default
character
set
編碼方式
collate
編碼方式_bin ;
|
例:將數據庫xiaoxu 的編碼修改為 gbk,SQL語句如下所示:
1
|
alter
database
xiaoxu
default
character
set
gbk
collate
gbk_bin ;
|
刪除數據庫的語法格式:
1
|
drop
database
數據庫名稱 ;
|
數據表的基本操作
創建數據表語法格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
create
table
表名
{
字段名 1,數據類型[完整性約束條件],
字段名 2,數據類型[完整性約束條件],
...
字段名 n,數據類型[完整性約束條件],
}
|
查看數據表的語法格式:
1
2
3
4
5
6
7
8
9
|
show
create
table
表名 ;
或者
describe 表名 ;
簡寫為
desc
表名 ;
|
修改數據表:
1. 修改表名的語法格式:
1
|
alter
table
舊表名 rename [
to
] 新表名 ;
|
2.修改字段名的語法格式
1
|
alter
table
表名 change 舊字段名 新字段名 新數據類型 ;
|
例:將數據表grade中的name字段改為username,數據類型保持不變
1
|
alter
table
grade change
name
username
varchar
(20) ;
|
3. 修改字段的數據類型的語法格式
1
|
alter
table
表名
modify
字段名 數據類型 ;
|
例:將數據表grade中的id字段的數據類型由int(11)修改為int(20)
1
|
alter
table
grade
modify
id
int
(20) ;
|
4. 添加字段的語法格式
1
2
3
|
alter
table
表名
add
新字段名 數據類型
[約束條件] [
FIRST
|
AFTER
已存在的字段名]
|
例:將數據表grade中添加一個沒有約束條件的 int 類型的字段 age。
1
|
alter
table
grade
add
age
int
(10) ;
|
5. 刪除字段的語法格式:
1
|
alter
table
表名
drop
字段名 ;
|
6.修改字段的排列位置的語法格式:
1
|
alter
table
表名
modify
字段名1 數據類型
first
|
after
字段名2
|
例1:將數據表grade的username字段修改為表的第一個字段
1
|
alter
table
grade
modify
username
varchar
(20)
first
;
|
例2:將數據表grade的id字段插入到grade字段后面
1
|
alter
table
grade
modify
id
int
(20)
after
grade ;
|
7. 刪除數據表的語法格式
1
|
drop
table
表名 ;
|
添加、更新與刪除數據的操作
添加數據
1. 在表中,為所有字段添加數據的insert語句有兩種,分別如下:
insert 語句中指定所有字段名,其語法語法格式
1
2
3
|
insert
into
表名(字段名1,字段名2, ...)
value(值1,值2, ...)
|
例:向student表中添加一條新記錄,記錄中 id 字段的值為 1,name字段的值為’zhangsan’,grade字段的值為98.5
假設已創建如下表:
1
2
3
4
5
6
7
8
9
|
create
table
student(
id
int
(4),
name
varchar
(20)
not
null
,
grade
float
);
|
向student表中插入一條數據,代碼如下所示
1
2
3
|
insert
into
student(id,
name
,grade)
values
(1,
'zhangsan'
,98.5);
|
insert語句中不指定字段名,其語法格式
1
|
insert
into
表名
values
(值1,值2, ...)
|
注意:由於insert語句中沒有指定字段名,添加值的順序,必須和字段在表中已經定義的順序相同
例:向已添加紀錄的student表中添加一條新記錄,記錄中 id 字段的值為3,name字段的值為’wangwu’,grade字段的值為61.5,可參考第一種方法的例子
1
2
3
|
insert
into
student
values
(3,
'wangwu'
,61.5)
|
2. 為表中的指定字段添加數據,其語法格式
1
2
3
|
insert
into
表名(字段名1,字段2, ...)
values
(值1,值2, ...)
|
例:向student表中添加一條新記錄,記錄中 id 字段的值為 4,name字段的值為“zhaoliu”,grade字段不指定值
1
2
3
|
insert
into
student(id,
name
)
values
(4,
'zhaoliu'
) ;
|
insert語句的其它用法:
為表中指定的字段或者全部字段添加數據,其語法格式
1
2
3
|
insert
into
表名
set
字段名1 = 值1 [,字段名2 = 值2, ...]
|
例:向student表中添加一條新記錄,該條記錄中 id 字段的值為5,name字段的值為’boya’,grade字段的值為 99
1
2
3
|
insert
into
student
set
id = 5,
name
=
'boya'
, grade = 99 ;
|
為表中同時添加多條記錄,其語法格式
1
2
3
4
5
6
7
|
insert
into
表名 [(字段名1,字段名2, ...)]
values
(值1,值2, ...),(值1,值2, ...),
...
(值1,值2, ...) ;
|
例:向student表中添加三條新記錄。
假設已創建如下表:
1
2
3
4
5
6
7
8
9
|
create
table
student(
id
int
(4),
name
varchar
(20)
not
null
,
grade
float
);
|
添加新記錄如下
1
2
3
4
5
6
7
|
insert
into
student
values
(6,
'lilei'
,99),
(7,
'hanmeimei'
,100),
(8,
'poly'
,40.5) ;
|
更新數據
更新表中的記錄,其語法格式
1
2
3
4
5
|
update
表名
set
字段名1 = 值1 [,字段名2 = 值2, ...]
[
where
條件表達式]
|
update更新部分數據
更新student標准那個id字段值為1的記錄,將記錄中的name字段的值更改為’caocao’,grade字段的值更改為50。
在更新數據前,首先使用查詢語句查看id字段值為1的記錄,執行結果如下
1
2
3
|
select
*
from
student
where
id = 1 ;
|
更新結果如下
1
2
3
4
5
|
select
*
from
student
set
name
=
'caocao'
, grade = 50
where
id = 1 ;
|
例2:更新student表中 id 字段值小於4的記錄,將這些記錄的grade字段值都更新為 100。
在更新數據前,首先使用查詢語句查看 id 字段值小於 4 的記錄,執行結果如下
1
2
3
|
select
*
from
student
where
id < 4 ;
|
更新結果如下
1
2
3
4
5
|
update
student
set
grade = 100
where
id < 4 ;
|
update 更新全部數據
例:更新student表中全部記錄,將grade字段值都更新為80
1
2
3
|
update
student
set
grade = 80 ;
|
刪除數據
刪除數據有兩種方法:
第一種:delete語句
刪除表中的記錄,其語法格式
1
|
delete
from
表名 [
where
條件表達式]
|
delete刪除部分數據
例:在student表中,刪除id字段值為11的記錄。
在刪除之前,首先使用查詢語句查看id字段值為11的記錄,執行結果如下
select * from student
where id = 11 ;
delete刪除全部數據
在delete語句中,若沒用使用where子句,則會將表中的所有記錄都刪除
例:刪除student表中的所有記錄。
delete from student ;
第二種:truncate語句
truncate [table] 表名
例:刪除student表中的所有記錄
1
|
<code class=
"hljs sql"
>
truncate
table
student ;</code>
|
delete語句truncate語句的異同點
相同點:都能刪除表中的所有數據的功能。
不同點:
delte語句:
delete語句是DML語句;
delete 語句后面可以跟where子句,通過指定where子句中的條件表達式只刪除滿足條件的記錄;
delete語句刪除表中所有記錄后,再次向表中添加記錄時,自動增加字段的值為刪除時該字段的最大增加1;
使用delete語句時,每刪除一條記錄都會在日志中記錄。
truncate語句:
truncate語句通常被認為是DDL語句;
truncate語句只能用於刪除表中的所有記錄;
truncate語句刪除表中的數據后,再次向表中添加記錄時,自動增加字段的默認初始值重新由1開始;
使用truncate語句時,不會在日志中記錄刪除的內容,因此truncate語句的執行效率比delete語句高。
查詢數據
簡單查詢
select語句的語法格式如下
1
2
3
4
5
6
7
8
9
10
11
|
<code class=
"hljs sql"
>
select
[
distinct
] *| {字段名1,字段名2,字段名3, ...}
from
表名
[
where
條件表達式1]
[
group
by
字段名 [
having
條件表達式2]]
[
order
by
字段名 [
asc
|
desc
]]
[limit [offset] 記錄數]</code>
|
查詢所有字段有兩種方法
第一種:
在select語句中列出所有字段名來查詢表中的數據,其語法格式
1
|
<code class=
"hljs sql"
>
select
字段名1,字段名2, ...
from
表名 ;</code>
|
第二種:
使用星號(“*”)通配符來代替所有的字段名,其語法格式如下
1
|
<code class=
"hljs sql"
>
select
*
from
student ;</code>
|
查詢指定字段,其語法格式如下
1
|
<code class=
"hljs sql"
>
select
字段名1,字段名2, ...
from
表名 ;</code>
|
按條件查詢
帶關系運算符的查詢
在select語句中,最常見的是使用where子句指定查詢條件對數據進行過濾,其語法格式如下
1
2
3
4
5
|
<code class=
"hljs sql"
>
select
字段名1,字段名2, ...
from
表名
where
條件表達式 ;</code>
|
常見的關系運算符如下表所示
關系運算符 |
說明 |
關系運算符 |
說明 |
---|---|---|---|
= |
等 於 |
<= |
小於等於 |
< > |
不等於 |
> |
大 於 |
!= |
不等於 |
>= |
大於等於 |
< |
例:查詢student表中grade大於80的學生姓名。
1
|
<code class=
"hljs sql"
>
select
name
, grade
from
student
where
grade > 80;</code>
|
帶 in 關鍵字的查詢
in 關鍵字用於判斷某個字段的值是否在指定集合中,若字段的值在集合中,則滿足條件,該字段所在的記錄將被查詢出來。其語法格式如下
1
2
3
4
5
|
<code class=
"hljs sql"
>
select
* | 字段名1, 字段名2, ...
from
表名
where
字段名 [
not
]
in
(元素1, 元素2, ...)</code>
|
說明:在上面的語法格式中,“元素1, 元素2, …”表示集合眾的元素,即指定的條件范圍。not 是可選參數,使用not表示查詢不在in關鍵字指定集合范圍中的記錄。
例:查詢student表中id值為1、2、3的記錄。
1
|
<code class=
"hljs sql"
>
select
id, grade,
name
, gender
from
student
where
id
in
(1,2,3) ;</code>
|
帶between and 關鍵字的查詢
between and用於判斷某個字段的值是否在指定的范圍之內,其語法格式如下
1
2
3
4
5
|
<code class=
"hljs sql"
>
select
*|{字段名1, 字段名2, ...}
from
表名
where
字段名 [
not
]
between
值1
and
值2 ; </code>
|
說明:在上面的語法格式中,“值1”表示范圍條件的起始值,“值2”表示范圍條件的結束值。not是可選參數,使用not表示查詢指定范圍之外的記錄,通常情況下,“值1”小於“值2”,否則查詢不到任何結果。
例:查詢student表中id值在2~5之間的學生姓名。
1
|
<code class=
"hljs sql"
>
select
id,
name
from
student
where
id
between
2
and
5 ;</code>
|
空值查詢
在數據表中,某些列的值可能為空值(null),空值不同於0,也不同於空字符串。在MySQL語句中,使用 is null 關鍵字來判斷字段的值是否為空值,其語法格式如下
1
2
3
4
5
|
<code class=
"hljs sql"
>
select
*| 字段名1, 字段名2, ...
from
表名
where
字段名
is
[
not
]
null
;</code>
|
例:查詢student表中gender為空值的記錄。
1
|
<code class=
"hljs sql"
>
select
id,
name
, grade, gender
from
student
where
gender
is
null
;</code>
|
帶distinct關鍵字的查詢
很多表中某些字段的數據存在重復的值。有時,需要過濾掉查詢記錄中重復的值,可以使用distinct關鍵字來實現這種功能,其語法格式如下
1
|
<code class=
"hljs sql"
>
select
distinct
字段名
from
表名 ;</code>
|
說明:“字段名”表示要過濾重復記錄的字段
例:查詢student表中gender字段的值,查詢記錄不能重復。
1
|
<code class=
"hljs sql"
>
select
distinct
gender
from
student ;</code>
|
distinct關鍵字還可以作用於多個字段,其語法格式如下
1
2
3
|
<code class=
"hljs sql"
>
select
distinct
字段名1, 字段名2, ...
from
表名 ;</code>
|
說明:只有distinct關鍵字指定的多個字段值都相同,才會被認作是重復記錄
例:查詢student表中的gender和name字段,使用distinct關鍵字作用於這兩個字段。
1
|
<code class=
"hljs sql"
>
select
distinct
gender,
name
,
from
student ;</code>
|
帶like關鍵字的查詢
like關鍵字可以判斷連個字符串是否相匹配,其語法格式如下
1
2
3
4
5
|
<code class=
"hljs sql"
>
select
*|{字段名1, 字段名2, ...}
from
表名
where
字段名 [
not
]
like
'匹配字符串'
;</code>
|
說明:“匹配字符串”指定用來匹配的字符串,其值可以是一個普通字符串,也可以是包含百分號(%)和下划線(_)的通配字符串。百分號和下划線統稱為通配符。
百分號(%)通配符
百分號通配符能匹配任意長度的字符串,包括空字符串。例如,字符串“c%”匹配以字符c開始,任意長度的字符串,如“ct”、“cut”、“current”等等。
例1:查找student表中name字段值以字段“s”開頭的學生 id。
1
|
<code class=
"hljs sql"
>
select
id,
name
,
from
student
where
name
like
"s%"
;</code>
|
說明1:百分號通配符可以出現在通配字符串的任意位置
例2:查詢student表中name字段值以字符“w”開始,以字符“g”結束的學生id。
1
|
<code class=
"hljs sql"
>
select
id,
name
,
from
student
where
name
like
'w%g'
;</code>
|
說明2:在通配字符串中可以出現多個百分號通配符
例:查詢student表中name字段值包含字符“y”的學生id。
1
|
<code class=
"hljs sql"
>
select
id,
name
from
student
where
name
like
'%y%'
;</code>
|
下划線(_)通配符
下划線通配符與百分號通配符有些不同,下划線通配符只匹配單個字符。若要匹配多個字符,需要使用多個下划線通配符。
注意:若使用多個下划線匹配多個連續的字符,下划線之間不能有空格
例1:查詢student表中name字段值以字符串“wu”開始,以字符串“ong”結束,並且兩個字符串之間只有一個字符的記錄。
1
|
<code class=
"hljs sql"
>
select
*
from
student
where
name
like
"wu_ong"
;</code>
|
例2:查詢student表中name字段值包含7個字符,並且以字符串“ing”結束的記錄。
1
|
<code class=
"hljs sql"
>
select
*
from
student
where
name
like
'____ing'
;</code>
|
百分號和下划線通配符進行的查詢操作
注意:若要匹配字符串中的百分號和下划線,則使用右斜線(“\”)對百分號和下划線進行轉義
例:查詢student表中name字段值包括“%”的記錄。
假設student表中以存在如下記錄
1
2
3
|
<code class=
"hljs sql"
>
insert
into
student(
name
, grade, gender)
values
(
'sun%er'
, 95,
'男'
) ;</code>
|
帶and關鍵字的多條件查詢
在使用select語句中,有時為了使查詢結果更加精確,可以使用多個查詢條件,其語法格式如下
1
2
3
4
5
|
<code class=
"hljs sql"
>
select
*|{字段名1, 字段名2, ...}
from
表名
where
條件表達式1
and
條件表達式2 [...
and
條件表達式n] ;</code>
|
例:查詢student表中id字段值小於5,並且gender字段值為“女”的學生姓名。
1
|
<code class=
"hljs sql"
>
select
id,
name
, gender
from
student
where
id < 5
and
gender =
'女'
;</code>
|
帶or關鍵字的多條件查詢
在使用or關鍵字時,只要記錄滿足任意一個條件就會被查詢出來,其語法格式如下
1
2
3
4
5
|
<code class=
"hljs sql"
>
select
*|{字段名1, 字段名2, ...}
from
表名
where
條件表達式1
or
條件表達式2 [...
or
條件表達式n] ;</code>
|
例:查詢student表中id字段值小於3或者gender字段值為“女”的學生姓名。
1
|
<code class=
"hljs sql"
>
select
id,
name
,gender
from
student
where
id < 3
or
gender =
'女'
;</code>
|
or和and關鍵字一起使用的情況
注意:and的優先級高於or
例:查詢student表中gender字段值為“女”或者gender字段值為“男”,並且grade字段值為100的學生姓名。
1
2
3
4
5
|
<code class=
"hljs sql"
>
select
name
, grade, gender
from
student
where
gender =
'女'
or
gender =
'男'
and
grade = 100 ;</code>
|
高級查詢
聚合函數
實際開發中,經常需要對某些數據進行統計,例如統計某個字段的最大值、最小值、平均值等。
函數名稱 |
作用 |
函數名稱 |
作用 |
---|---|---|---|
count() |
返回某列的行數 |
max() |
返回某列的最大值 |
sum() |
返回某列值的和 |
min() |
返回某列的最小值 |
avg() |
返回某列的平均值 |
以上表中的函數對一組值進行統計,並返回唯一值,這些函數被稱為聚合函數。
count()函數
count()函數用來統計記錄的條數,其語法格式如下
1
|
<code class=
"hljs sql"
>
select
count
(*)
from
表名 ;</code>
|
例:查詢student表中一共有多少條記錄
1
|
<code class=
"hljs sql"
>
select
count
(*)
from
student ;</code>
|
sum()函數
sum()函數是求和函數,用於求出表中某個字段所有值的總和,其語法格式如下
1
|
<code class=
"hljs sql"
>
select
sum
(字段名)
from
表名 ;</code>
|
例:求出student表中grade字段的總和。
1
|
<code class=
"hljs sql"
>
select
sum
(grade)
from
student ;</code>
|
avg()函數
avg()函數用於求出某個字段所有值的平均值,其語法格式如下
1
|
<code class=
"hljs sql"
>
select
avg
(字段名)
from
表名 ;</code>
|
例:求出student表中grade字段的平均值
1
|
<code class=
"hljs sql"
>
select
avg
(grade)
from
student ;</code>
|
max()函數
max()函數是求最大值的函數,用於求出某個字段的最大值,其語法格式如下
1
|
<code class=
"hljs sql"
>
select
max
(字段名)
from
表名 ;</code>
|
例:求出student表中grade字段的最大值
1
|
<code class=
"hljs sql"
>
select
max
(grade)
from
student ;</code>
|
min()函數
min()函數是求最小值的函數,用於求出某個字段的最小值,其語法格式如下
1
|
<code class=
"hljs sql"
>
select
min
(字段名)
from
表名 ;</code>
|
例:求出student表中grade字段的最小值
1
|
<code class=
"hljs sql"
>
select
min
(grade)
from
student ;</code>
|
對查詢結果排序
使用 order by 對查詢結果進行排序,其語法格式如下
1
2
3
4
5
|
<code class=
"hljs sql"
>
select
字段名1, 字段名2, ...
from
表名
order
by
字段名1[
asc
|
desc
], 字段名2 [
asc
|
desc
] ...</code>
|
說明:參數 asc 表示按照升序進行排序,desc表示按照降序進行排序。默認情況下,按照 asc 方式進行排序。
例:查出 student 表中的所有記錄,並使用參數 asc 按照grade字段升序方式進行排列。
1
2
3
|
<code class=
"hljs sql"
>
select
*
from
student
order
by
grade
asc
;</code>
|
注意:在按照指定字段進行排序時,若某條記錄的字段值為null,則這條記錄會在第一條顯示,因為 null 值可以被認為是最小值
分組查詢
使用 group by 按某個字段或者多個字段中的值進行分組,字段中值相同的為一組,其語法格式如下
1
2
3
4
5
|
<code class=
"hljs sql"
>
select
字段名1, 字段名2, ...
from
表名
group
by
字段名1, 字段名2, ... [
having
條件表達式]</code>
|
說明:having關鍵字指定條件表達式對分組后的內容進行過濾,需要注意的是,group by 一般和聚合函數一起使用。
由於分組查詢比較復雜,下面分幾種情況對分組查詢進行詳解。
單獨使用 group by 分組
單獨使用 group by 關鍵字,查詢的是每個分組中的一條記錄。
例:查詢student表中的記錄,按照gender字段值進行分組。
1
|
<code class=
"hljs sql"
>
select
*
from
student
group
by
gender ;</code>
|
group by 和聚合函數一起使用
group by 和聚合函數一起使用,可以統計出某個或者某些字段在一個分組中的最大值、最小值、平均值等。
例:將student表按照gender字段值進行分組查詢,計算出每個分組中各有多少名學生。
1
|
<code class=
"hljs sql"
>
select
count
(*), gender
from
student
group
by
gender ;</code>
|
結果說明:group by 對student表按照gender字段中的不同值進行了分組,並通過count()函數統計出每個組個數。
group by 和 having關鍵字一起使用
例:將student表按照gender字段進行分組查詢,查詢出grade字段值之和小於300的分組。
1
|
<code class=
"hljs sql"
>
select
sum
(grade), gender
from
student
group
by
gender
having
sum
(grade) < 300 ;</code>
|
having 關鍵字和where關鍵字的異同點
相同點:都用於設置條件表達式對查詢結果進行過濾
不同點:
having關鍵字:
having關鍵字后可以跟聚合函數,通常情況下,having關鍵字都和group by 一起使用,用於對分組后的結果進行過濾。
where關鍵字:
where關鍵字不能后跟聚合函數。
使用 limit 限制查詢結果的數量
limit關鍵字可以指定查詢結果從哪一條記錄開始以及一共查詢多少條信息,其語法格式如下
1
2
3
4
5
|
<code class=
"hljs sql"
>
select
字段名1, 字段名2, ...
from
表名
limit [offset,]記錄數</code>
|
說明:limit 后面可以跟兩個參數,第一個參數“offset”表示偏移量,若偏移量為0,則從查詢結果的第一條記錄開始;偏移量為1,則從查詢結果中的第二條記錄開始,以此類推。offset為可選值,若不指定,其默認值為0。第二個參數“記錄數”表示返回查詢記錄的條數。
例1:查詢student表中的前4條記錄。
1
|
<code class=
"hljs sql"
>
select
*
from
student limit 4 ;</code>
|
例2:查詢student表中grade字段值從第5位到第8位的學生(從高到底)。
1
|
<code class=
"hljs sql"
>
select
*
from
student
order
by
grade
desc
limit 4, 4 ;</code>
|
為表和字段取別名
為表取別名的語法格式如下
1
|
<code class=
"hljs sql"
>
select
*
from
表名 [
as
] 別名 ;</code>
|
例:為student表起一個別名 s,並查詢student表中gender字段值為“女”的記錄。
1
|
<code class=
"hljs sql"
>
select
*
from
student
as
s
where
s.gender =
'女'
;</code>
|
為字段取別名的語法格式如下
1
|
<code class=
"hljs sql"
>
select
字段名 [
as
] 別名 [, 字段名 [
as
] 別名, ...]
from
表名 ;</code>
|
例:查詢student表中的所有記錄的name和gender字段值,並為這兩個字段起別名 stu_name 和 stu_gender。
1
|
<code class=
"hljs sql"
>
select
name
as
stu_name, gender stu_gender
from
student ;</code>
|