1、mysql的啓動和鏈接mysql
1.、服務控制(啓動、查看狀態、中止、重啓,重載)正則表達式
兩種方法(Ubuntu系統)sql
-
- sudo /etc/init.d/mysql start | status | stop | restart | reload
- service mysql start | status | stop | restart | reload
2 、鏈接數據庫數據庫
-
- mysql -h主機地址 -u用戶名 [-P3306] -p密碼
2、庫的管理函數
一、建立庫(指定字符集)性能
create database 庫名;測試
create database 庫名 default charset = utf8 #指定字符集ui
二、查看庫的字符集spa
show create database 庫名;rest
三、查看當前所在庫
select database();
四、切換庫
use 庫名;
五、查看庫已有表
show tables;
六、刪除庫
drop database 庫名;
3、表管理(表的建立、查看、刪除)
一、建立表
create table 表名(字段名1 數據類型1,字段2 數據類型2...);
create table 表名(字段名1 數據類型1,字段2 數據類型2...)default charset = utf8;
二、查看錶的字符集和存儲引擎
show create table 表名;
三、查看錶結構
desc 表名;
四、刪除表
drop 表名;
4、表字段管理
一、添加字段(add)
alter table 表名 add 字段名 數據類型; #默認添加到末尾
alter table 表名 add 字段名 數據類型 first; #添加到第一個字段
alter table 表名 add 字段名 數據類型 after 字段名; # 添加到指定字段後面
二、修改字段數據類型
alter table 表名 modify 字段名 新數據類型;
注: 修改數據類型時會受到表中原有數據類型的限制
三、修改字段名
alter table 表名 change 舊名 新名 數據類型;
四、刪除字段
alter table 表名 drop 字段名;
五、修改表名
alter table 表名 rename 新表名;
5、表記錄操做(表內容的增、刪、改、查)
一、插入表記錄
insert into 表名 values(記錄1的字段的值),(記錄2的字段的值)...;
insert into 表名(指定要插入的字段名) values(記錄1的字段的值),(記錄2的字段的值)...;
注意: 沒有指定插入字段名的話,後面必須插入所有字段的值,若是指定了只需插入指定字段值便可。
二、查詢表記錄
select * from 表名; # 查看全部的表記錄
select 字段1,字段2...... from 表名; # 查看指定字段記錄
注:其它更復雜的查詢後面逐步說明
三、刪除表記錄
delete from 表名 where 條件;
注:delete 語句後面若是不加where子句,會將表中全部記錄刪除。
四、更新表記錄
update 表名 set 字段1=值1,字段2=值2...... where 條件;
注意:update 語句後面若是不加where子句,會將表中全部記錄修改。
進階查詢部分
PS:此表做爲下面示例所用(表名:sanguo)
id |
name |
gongji |
fangyu |
sex |
country |
1 |
諸葛亮 |
120 |
20 |
男 |
蜀國 |
2 |
司馬懿 |
119 |
25 |
男 |
魏國 |
3 |
關5羽 |
188 |
60 |
男 |
蜀國 |
4 |
趙雲6 |
200 |
66 |
男 |
魏國 |
5 |
孫權 |
100 |
60 |
男 |
吳國 |
6 |
貂蟬 |
666 |
10 |
女 |
魏國 |
7 |
NULL |
1000 |
99 |
女 |
魏國 |
8 |
|
1005 |
88 |
女 |
蜀國 |
9 |
9周瑜 |
80 |
100 |
男 |
吳國 |
10 |
黃忠 |
130 |
80 |
男 |
蜀國 |
11 |
孫策 |
110 |
90 |
男 |
吳國 |
12 |
荀粲 |
80 |
100 |
男 |
魏國 |
13 |
華佗 |
60 |
200 |
男 |
NULL |
6、where 子句
ps:配合查詢、修改、刪除操做
語法格式(以查詢爲例):
select * from 表名 where 條件;
一、where 子句後的運算符操做
數值比較運算符:=、!=、>、>=、<、<=
字符比較運算符:=、!=
示例:
找出攻擊力高於150的英雄和攻擊值
select name,gongji from sanguo where gongji > 150;
找出防護力不等於100的英雄信息
select * from sanguo where fangyu != 100;
二、邏輯比較
運算符:and 、or
and:兩個或多個條件須要同時知足
or:兩個或多個條件知足一條便可
示例:
找出攻擊值大於200的蜀國英雄的名字和攻擊值
select name,gongji from sanguo where gongji > 200 and country = "蜀國";
將吳國英雄中攻擊值爲110的英雄的攻擊值設置爲100,防護值設置爲60
update sanguo set gongji=100 where gongji=110;
三、範圍內比較
between and 、in、not in
語法:
字段名 between 值1 and 值2
字段名 in 值1 或 字段名 in (值1,值2...)
字段名 not in 值1
示例:
查找攻擊值在100-200之間的蜀國英雄信息
select * from sanguo where gongji between 100 and 200;
找到蜀國和吳國之外國家的女英雄信息
select * from sanguo where sex="女" and country not in ("蜀國","吳國");
四、查詢空
is null 、is not null
示例:
查找姓名爲NULL的蜀國女英雄信息
select * from sanguo where name is null and sex="女";
查找姓名爲""的英雄的id、姓名和國家
select * from sanguo where name="";
注意:
null 爲空值,必須用 is 或者 is not 去匹配,而""爲空字符串,用 = 或者 != 去匹配。
五、模糊比較
語法:where 字段名 like 表達式;
表達式:
_ : 匹配單個字符
% : 匹配0到多個字符(null不會被匹配)
示例:
匹配名字中至少有兩個字的英雄
select * from sanguo where name like "_%_";
匹配名字爲三個字的英雄
select * from sanguo where name like "___";
匹配姓趙的英雄
select * from sanguo where name like "趙%";
六、正則匹配查詢 regexp
語法:where 字段名 regexp 正則表達式;
經常使用的正則表達式符號:
^ : 以...開頭
$ : 以...結尾
. : 匹配任意一個字符
[] : 包含...內容
* : 匹配前面的子表達式零次或屢次
示例:
匹配名字中帶數字的英雄信息
select * from sanguo where name regexp "[0-9]";
匹配名字中以數字開頭的記錄
select * from sanguo where name regexp "^[0-9]";
匹配名字中以數字結尾的記錄
select * from sanguo where name regexp "[0-9]$";
匹配以 司 開頭,以 懿 結尾的記錄
select * from sanguo where name regexp "^司.*懿$";
7、order by子句(排序)
語法格式:order by 字段名 排序方式;
排序方式:asc(默認):升序 desc:降序
示例:
將英雄按防護值從低到高排序
select * from sanguo order by fangyu asc;
#asc 可不寫
將蜀國英雄按攻擊值從高到底排序
select * from sanguo where country = "蜀國" order by gongji desc;
將魏蜀兩國的男英雄中名字中爲三個字的英雄按防護值升序排列
select * from sanguo
where sex = "男" and country in ("魏國","蜀國") and name like "___"
order by fangyu;
8、limit子句
做用:用於限制顯示查詢的記錄條數
語法:limit m,n;
m:表示從第m+1條開始顯示記錄
n:表示顯示多少條記錄
# m能夠省略
# 永遠放在SQL語句的最後面
示例:
查找防護值倒數第2名到倒數第4名的蜀國英雄記錄
select * from sanguo where country = "蜀國" order by fangyu limit 1,3;
查找攻擊值前3名且名字不爲空值的蜀國英雄的姓名、攻擊值和國家
select name,gongji,country from sanguo
where country = "蜀國" and name is not null
order by gongji desc limit 3;
9、聚合函數
avg(字段名):求字段的平均值
sum(字段名):求和
max(字段名):求最大值
min(字段名):求最小值
count(字段名):統計該字段記錄的條數
示例:
找到最強攻擊值是多少
select max(gongji) as best from sanguo;
注:這裏的as 至關於設置一個別名best,能夠省略。
統計一下id,name兩個字段分別有多少記錄
select count(id),count(name) from sanguo;
統計蜀國英雄中攻擊值大於200的英雄的數量
select count(*) from sanguo where country="蜀國" and gongji > 200;
# count(*)的意思是指被篩選出來的記錄只要有一個字段不是空值就會被統計
10、group by子句(先分組,再聚合)
做用:給查詢的結果進行分組
語法:group by 字段名;
示例:
統計sanguo表中一共有哪幾個國家
select country from sanguo group by country;
計算全部國家的平均攻擊力
select countr,avg(gongji) from sanguo group by country;
# 先分組,在求分組後每組的(國家)平均攻擊力,最後將國家去重顯示出來。
查找全部國家中,英雄數量最多的前2名的國家的名稱及英雄數量
select country,count(*) as 英雄數量 from sanguo
group by country order by 英雄數量 desc limit 2;
# 可使用中文做爲別名
11、having
示例:
找出平均攻擊力大於105的國家的前2名,顯示國家名稱和平均攻擊力
select country,avg(gongji) from sanguo
group by country having avg(gongji) > 105
order by avg(gongji) desc limit 2;
注:1.having 語句一般與group by 語句聯合使用,用來過濾有group by語句返回的記錄集
2.having語句彌補了where條件子句不能與聚合函數聯合使用的不足,where操做的
是表中實際的字段,having操做的是集合函數生成的顯示列
12、distinct
做用:不顯示字段的重複值
示例:
sanguo表中一共有哪些個國家
select distinct country from sanguo;
計算蜀國一共有多少個英雄
select count(distinct name) from sanguo where country = "蜀國";
注:1.distinct處理的是distinct和from之間的全部字段,全部字段的值必須徹底相同才能夠去重
2.distinct不能對任何字段作聚合處理
十3、查詢表記錄時能夠作數學運算
+ 、-、 *、/、 %
示例:
查詢時顯示全部英雄的攻擊力 * 10
select name,gongji*10,country from sanguo;
總結(執行順序)
一、where ...
二、group by ...
三、select ... 聚合函數 from 表名
四、having ...
五、order by ...
六、limit ...
約束
做用:
爲了保證數據的完整性、一致性、有效性,能夠限制無效的數據插入到數據表中
約束分類:
默認約束(default)
做用:在插入記錄時,若是不給該字段賦值,則使用默認值
格式:
字段名 數據類型 default 默認值,
非空約束
做用:不容許該字段的值有空值NULL記錄
格式:
字段名 數據類型 not null
示例:
建立一張表,name字段的默認值是「張三」
create table t1(name varchar(20) default "張三", age tinyint unsigned);
向表中添加一個字段,值不能爲空
alter table t1 add id int not null;
索引
定義:
對數據庫中表的一列或者多列的值進行排序的一種結構(MySQL中索引用Btree方式)
索引的優缺點:
優勢:
能夠加快數據的檢索速度
缺點:
當對錶中的數據進行增長、修改、刪除的時候,索引須要動態維護,下降了數據的維護速度
索引須要佔用物理存儲空間(數據庫目錄/var/lib/mysql)
建立索引:
# name字段
create index name on t1(name);
ps:能夠開啓性能測試,有索引和無索引的檢索用時區別
1.開啓性能測試
show variables like "%pro%";
set profiling = 1;
2.查看性能分析結果
show profiles;
# 與沒有索引的進行對比
3.關閉性能測試
set profiling = 0;