1、DDL
常用數(shù)據(jù)類型
創(chuàng)建表
create table user(username varchar(30), password char(32));
查看表結(jié)構(gòu)
desc user;
查看表創(chuàng)建語句
show create table user;
刪除表
drop table user;
創(chuàng)建表指定字符集和引擎
create table user(username varchar(30), password char(32)) engine=innodb default charset=utf8;
修改字段類型
alter table user modify username varchar(20);
添加字段
alter table user add email varchar(30)
alter table user add email varchar(30) after username;
增刪改查 curd操作
首先通過mysql -uroot -p 進(jìn)入數(shù)據(jù)庫系統(tǒng),創(chuàng)建數(shù)據(jù)庫dudu,進(jìn)入數(shù)據(jù)庫dudu use dudu,然后才是創(chuàng)建表的過程
所有的符號都是英文。
創(chuàng)建表開始學(xué)習(xí)增刪改
mysql> create table user(
-> id int auto_increment,
-> name varchar(30) not null,
-> money int not null,
-> province varchar(20) default null,
-> age tinyint unsigned not null,
-> sex enum('女', '男') not null,
-> primary key(id)
-> )engine=innodb default charset=utf8;
【注】單選在插入值的時候,可以直接使用1 2,那么1代表女,2代表男,enum類型如不不給值,默認(rèn)是第一個
set類型如何插入?
set('吃', '喝', '嫖', '賭', '抽')
1 2 4 8 16
4|8|16 如果是后三個,可以這么寫
28 也可以加起來,這么寫
類別 |
詳細(xì)解釋 |
基本語法 |
select 字段 from 表; |
示例 |
select id,name,money from star; |
示例說明 |
查詢star表中id,name,money字段 |
類別 |
詳細(xì)解釋 |
基本語法 |
select distinct 字段 from 表; |
示例 |
select distinct age,sex from star; |
示例說明 |
查詢star表中age和sex組合的不重復(fù)結(jié)果 |
類別 |
詳細(xì)解釋 |
基本語法 |
select 字段 from 表 where 條件; |
示例 |
select * from star where age=43; |
示例說明 |
查詢age為43的所有結(jié)果 |
符號 |
說明 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
!=或<> |
不等于 |
= |
等于 |
or |
或者 |
and |
并且 |
between and |
在某個閉區(qū)間 |
in / not in |
在/不在指定的集合中 |
like |
模糊查詢 |
示例 |
說明 |
select * from star where id<10 and province='湖北'; |
查詢star表中所有id小于10并且province為湖北 |
select * from star where id between 3 and 10; |
查詢star表中所有id在[3,10]的閉區(qū)間的記錄 |
select * from star where id in (3,4,8,10); |
查詢star表中所有id在指定集合中的記錄 |
類型 |
說明 |
基本語法 |
select 字段 from 表 order by字段 排序關(guān)鍵詞 |
示例 |
select id,name,money from star order by money desc; |
示例說明 |
查詢star表中的id,name,money字段,按照余額進(jìn)行降序排序 |
關(guān)鍵詞 |
說明 |
asc |
升序排列,從小到大(默認(rèn)) |
desc |
降序排列,從大到小 |
類型 |
說明 |
基本語法 |
select 字段 from 表 order by 字段1 desc or asc,...,字段n desc or asc; |
示例 |
select id,name,money from star order by money desc,age asc; |
示例說明 |
查詢star表中的id,name,money字段,按照余額進(jìn)行降序排序,若余額全都一樣,則再使用age進(jìn)行升序排序 |
類型 |
說明 |
基本語法 |
select 字段 from 表 limit數(shù)量; |
示例 |
select id,name,money from star limit 5; |
示例說明 |
顯示前五個記錄 |
【對于查詢或者排序后的結(jié)果集,如果希望只顯示一部分,使用limit關(guān)鍵字對結(jié)果進(jìn)行數(shù)量限制】
類型 |
說明 |
基本語法 |
select 字段 from 表 order by 字段 排序規(guī)則 limit 數(shù)量 |
示例 |
按照money來排序,顯示前5個最有錢的記錄 |
類型 |
說明 |
基本語法 |
select 字段 from 表 limit 偏移量,數(shù)量 |
示例 |
select id,name,money from star limit 0,3; |
示例說明 |
取從第一條開始的三條記錄 |
類型 |
說明 |
sum |
求和 |
count |
統(tǒng)計總數(shù) |
max |
最大值 |
min |
最小值 |
avg |
平均值 |
類型 |
說明 |
基本語法 |
select 函數(shù)(字段) from 表 |
示例 |
select count(id) from star; |
示例說明 |
查詢star表的id總數(shù) |
類型 |
說明 |
基本語法 |
select * from 表 group by 字段 |
示例 |
select * from star group by province; |
示例說明 |
按照province進(jìn)行分組 |
類型 |
說明 |
基本語法 |
select * from 表 group by 字段 |
示例 |
select count(*),province from star group by province; |
示例說明 |
對分組進(jìn)行單獨統(tǒng)計 |
類型 |
說明 |
基本語法 |
select * from 表 group by 字段 having 條件 |
示例 |
select count(province) as result,province from star group by province having result>2; |
示例說明 |
對province分組并統(tǒng)計總數(shù),將分組結(jié)果中大于2的分組顯示出來 |
類型 |
說明 |
select |
選擇的列 |
from |
表 |
where |
查詢的條件 |
group by |
分組屬性having分組過濾的條件 |
order by |
排序?qū)傩?/td>
|
limit |
起始記錄位置,取記錄的條數(shù) |
2、DML
增刪改語句
操作前的準(zhǔn)備
create table user(
id int auto_increment,
name varchar(30) not null,
money float not null,
province varchar(32) default null,
age tinyint unsigned not null,
sex tinyint not null,
primary key(id)
)engine=innoDB defaultcharset=utf8;
類別 |
詳細(xì)解釋 |
基本語法 |
insert into 表 values(值1,值2,值n); |
示例 |
insert into star values('王寶強',0,'河北',32,0); |
示例說明 |
向user表中插入值id為1,姓名為王寶強,余額為0,省份為河北,年齡為32,性別為0(男) |
類別 |
詳細(xì)解釋 |
基本語法 |
insert into 表(字段1,字段2,字段n) values (值1,值2,值n); |
示例 |
insert into star (name,money,province,age,sex) values ('郭德綱',1000000,'天津',43,0); |
示例說明 |
向user表中插入值,姓名為郭德綱,余額為1000000,省份為天津,年齡為43,性別為0(男) |
【注意】
- 插入數(shù)據(jù)可以不傳值的情況:
1.自增的字段可以不用傳值(每插入一條該字段的值會自動加1)
2.有默認(rèn)值
3.可為空的字段可以不傳值
- 插入記錄2的方式為更為常用的用法
類別 |
詳細(xì)解釋 |
基本語法 |
delete from 表 where 條件; |
示例 |
delete from star where id=1; |
示例說明 |
刪除表中id為1的行 |
類別 |
詳細(xì)解釋 |
基本語法 |
update 表 set 字段1=值1,字段2=值2 where 條件; |
示例 |
update star set money=100,sex=1 where id=5; |
示例說明 |
將star表中id為1的行的money設(shè)為100,sex設(shè)為1 |
類別 |
詳細(xì)解釋 |
基本語法 |
select * from 表; |
示例 |
select * from star; |
示例說明 |
查詢star表中所有字段的所有結(jié)果 |
3、可視化工具
當(dāng)你去操作數(shù)據(jù)庫的時候,其實有3中方式
(1)使用mysql自帶的客戶端進(jìn)行操作
(2)使用一些第三方的可視化工具管理數(shù)據(jù)庫 比如navicate、sqlyog
(3)使用代碼去操作數(shù)據(jù)庫,比如python、java、php
4、DQL
query : 查詢
模糊查詢:like '%德%' 只要有 德 字的都符合要求
% 代表任意多的字符
like '柳_' 叫 柳某 的都符合要求
_ 代表一個任意字符
limit:
limit 2 : 在結(jié)果集中只要前兩個
limit offset, number : offset代表偏移量,number代表數(shù)量
LIMIT number1 OFFSET number2 : number1 是數(shù)量 number2 是偏移量
上網(wǎng)的時候,經(jīng)常會有分頁,每頁顯示10條,
第一頁:select * from table limit 0, 10
第二頁:select * from table limit 10, 10
第三頁:select * from table limit 20, 10
第n頁:select * from table limit (n-1)*10, 10
分組:
字段只能出現(xiàn)分組字段和統(tǒng)計信息,其它的字段出現(xiàn)沒有意義
select province, count(*) from user group by province;
select province, count(*) as c from user group by province having c>=2;
【注】having經(jīng)常跟在group by的后面,where是跟在表的后面
select使用順序
SELECT xxx FROM xxx WHERE xxx GROUP BY xxx HAVING xxx ORDER BY xxx LIMIT xxx;
取出擁有年齡大于30歲的明星個數(shù)大于兩個且第二多的省份
多表聯(lián)合
mysql> create table user(
-> id int auto_increment,
-> name varchar(30) not null,
-> gid varchar(10) default 0,
-> primary key(id)
-> )engine=innodb default charset=utf8;
mysql> create table goods(
-> gid int auto_increment,
-> name varchar(30) not null,
-> price int not null,
-> category varchar(20) not null,
-> primary key(gid)
-> )engine=innodb default charset=utf8;
mysql> insert into user(name, gid) values('郭德綱', 1),
-> ('岳云鵬', 2),
-> ('曹云金', 0),
-> ('于謙', 3),
-> ('牛群', 1),
-> ('馮鞏', 1),
-> ('大兵', 4),
-> ('馬三立', 0),
-> ('賈玲', 2);
隱式內(nèi)連接
select user.name as uname, goods.name as gname from user, goods where user.gid=goods.gid;
顯示內(nèi)連接
select * from user as u join goods as g on u.gid=g.gid;
select u.name as uname, g.name as gname from user as u join goods as g on u.gid=g.gid;
三表鏈接格式
select * from user as u join goods as g on u.gid=g.gid join price as p on g.pid=p.pid
類型 |
說明 |
基本語法 |
select 表1.字段[as 別名],表n.字段 from 表1[別名],表n where 條件; |
示例 |
select username,name from user ,goods where user.gid=goods.gid; |
示例說明 |
查詢用戶表中哪些用戶購買過商品,并將商品信息顯示出來 |
【說明:以上方式稱為隱式內(nèi)連接,因為沒有出現(xiàn)join關(guān)鍵字】
類型 |
說明 |
基本語法 |
select 表1.字段[as 別名],表n.字段 from 表1 inner join 表2 on 條件; |
示例 |
select username,name from user inner join goods on user.gid=goods.gid; |
示例說明 |
查詢用戶中哪些用戶購買過商品,并將商品信息顯示出來 |
【說明:以上方式的inner關(guān)鍵字換成cross同樣可以,其實也可以省略】