1、DDL
常用数据类型
创建表
create table user(username varchar(30), password char(32));
查看表结构
desc user;
查看表创建语句
show create table user;
删除表
drop table user;
创建表指定字符集和引擎
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 进入数据库系统,创建数据库dudu,进入数据库dudu use dudu,然后才是创建表的过程
所有的符号都是英文。
创建表开始学习增删改
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类型如不不给值,默认是第一个
set类型如何插入?
set('吃', '喝', '嫖', '赌', '抽')
1 2 4 8 16
4|8|16 如果是后三个,可以这么写
28 也可以加起来,这么写
类别 |
详细解释 |
基本语法 |
select 字段 from 表; |
示例 |
select id,name,money from star; |
示例说明 |
查询star表中id,name,money字段 |
类别 |
详细解释 |
基本语法 |
select distinct 字段 from 表; |
示例 |
select distinct age,sex from star; |
示例说明 |
查询star表中age和sex组合的不重复结果 |
类别 |
详细解释 |
基本语法 |
select 字段 from 表 where 条件; |
示例 |
select * from star where age=43; |
示例说明 |
查询age为43的所有结果 |
符号 |
说明 |
> |
大于 |
< |
小于 |
>= |
大于等于 |
<= |
小于等于 |
!=或<> |
不等于 |
= |
等于 |
or |
或者 |
and |
并且 |
between and |
在某个闭区间 |
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]的闭区间的记录 |
select * from star where id in (3,4,8,10); |
查询star表中所有id在指定集合中的记录 |
类型 |
说明 |
基本语法 |
select 字段 from 表 order by字段 排序关键词 |
示例 |
select id,name,money from star order by money desc; |
示例说明 |
查询star表中的id,name,money字段,按照余额进行降序排序 |
关键词 |
说明 |
asc |
升序排列,从小到大(默认) |
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字段,按照余额进行降序排序,若余额全都一样,则再使用age进行升序排序 |
类型 |
说明 |
基本语法 |
select 字段 from 表 limit数量; |
示例 |
select id,name,money from star limit 5; |
示例说明 |
显示前五个记录 |
【对于查询或者排序后的结果集,如果希望只显示一部分,使用limit关键字对结果进行数量限制】
类型 |
说明 |
基本语法 |
select 字段 from 表 order by 字段 排序规则 limit 数量 |
示例 |
按照money来排序,显示前5个最有钱的记录 |
类型 |
说明 |
基本语法 |
select 字段 from 表 limit 偏移量,数量 |
示例 |
select id,name,money from star limit 0,3; |
示例说明 |
取从第一条开始的三条记录 |
类型 |
说明 |
sum |
求和 |
count |
统计总数 |
max |
最大值 |
min |
最小值 |
avg |
平均值 |
类型 |
说明 |
基本语法 |
select 函数(字段) from 表 |
示例 |
select count(id) from star; |
示例说明 |
查询star表的id总数 |
类型 |
说明 |
基本语法 |
select * from 表 group by 字段 |
示例 |
select * from star group by province; |
示例说明 |
按照province进行分组 |
类型 |
说明 |
基本语法 |
select * from 表 group by 字段 |
示例 |
select count(*),province from star group by province; |
示例说明 |
对分组进行单独统计 |
类型 |
说明 |
基本语法 |
select * from 表 group by 字段 having 条件 |
示例 |
select count(province) as result,province from star group by province having result>2; |
示例说明 |
对province分组并统计总数,将分组结果中大于2的分组显示出来 |
类型 |
说明 |
select |
选择的列 |
from |
表 |
where |
查询的条件 |
group by |
分组属性having分组过滤的条件 |
order by |
排序属性 |
limit |
起始记录位置,取记录的条数 |
2、DML
增删改语句
操作前的准备
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;
类别 |
详细解释 |
基本语法 |
insert into 表 values(值1,值2,值n); |
示例 |
insert into star values('王宝强',0,'河北',32,0); |
示例说明 |
向user表中插入值id为1,姓名为王宝强,余额为0,省份为河北,年龄为32,性别为0(男) |
类别 |
详细解释 |
基本语法 |
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(男) |
【注意】
- 插入数据可以不传值的情况:
1.自增的字段可以不用传值(每插入一条该字段的值会自动加1)
2.有默认值
3.可为空的字段可以不传值
- 插入记录2的方式为更为常用的用法
类别 |
详细解释 |
基本语法 |
delete from 表 where 条件; |
示例 |
delete from star where id=1; |
示例说明 |
删除表中id为1的行 |
类别 |
详细解释 |
基本语法 |
update 表 set 字段1=值1,字段2=值2 where 条件; |
示例 |
update star set money=100,sex=1 where id=5; |
示例说明 |
将star表中id为1的行的money设为100,sex设为1 |
类别 |
详细解释 |
基本语法 |
select * from 表; |
示例 |
select * from star; |
示例说明 |
查询star表中所有字段的所有结果 |
3、可视化工具
当你去操作数据库的时候,其实有3中方式
(1)使用mysql自带的客户端进行操作
(2)使用一些第三方的可视化工具管理数据库 比如navicate、sqlyog
(3)使用代码去操作数据库,比如python、java、php
4、DQL
query : 查询
模糊查询:like '%德%' 只要有 德 字的都符合要求
% 代表任意多的字符
like '柳_' 叫 柳某 的都符合要求
_ 代表一个任意字符
limit:
limit 2 : 在结果集中只要前两个
limit offset, number : offset代表偏移量,number代表数量
LIMIT number1 OFFSET number2 : number1 是数量 number2 是偏移量
上网的时候,经常会有分页,每页显示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
分组:
字段只能出现分组字段和统计信息,其它的字段出现没有意义
select province, count(*) from user group by province;
select province, count(*) as c from user group by province having c>=2;
【注】having经常跟在group by的后面,where是跟在表的后面
select使用顺序
SELECT xxx FROM xxx WHERE xxx GROUP BY xxx HAVING xxx ORDER BY xxx LIMIT xxx;
取出拥有年龄大于30岁的明星个数大于两个且第二多的省份
多表联合
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);
隐式内连接
select user.name as uname, goods.name as gname from user, goods where user.gid=goods.gid;
显示内连接
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; |
示例说明 |
查询用户表中哪些用户购买过商品,并将商品信息显示出来 |
【说明:以上方式称为隐式内连接,因为没有出现join关键字】
类型 |
说明 |
基本语法 |
select 表1.字段[as 别名],表n.字段 from 表1 inner join 表2 on 条件; |
示例 |
select username,name from user inner join goods on user.gid=goods.gid; |
示例说明 |
查询用户中哪些用户购买过商品,并将商品信息显示出来 |
【说明:以上方式的inner关键字换成cross同样可以,其实也可以省略】