1、字符集和存储引擎
设置主键索引:
create table qianfeng(id int auto_increment primary key, name varchar(30))engine=innodb, default charset=utf8;
create table qianfeng(id int auto_increment, name varchar(30), primary key(id))engine=innodb, default charset=utf8;
2、DML
insert
第一种形式:
insert into star values(1, '王宝强', 0, '河北' ,32, 0);
【注】所有字段的值都得一一写出来,而且和表中字段要对应
第二种形式:
insert into star(name, money, province, age, sex) values('郭德纲', 1000000, '天津', 43, 0);
【注】指定字段,后面的值和前面的字段一一对应
第三种形式:
insert into star(name, money, province, age, sex)
values('黄晓明', 2000000, '山东', 39, 0),
( 'angelababy', 3000000, '上海', 27, 1),
( '陈赫', 150000, '福建', 31, 0);
一次性插入多条数据,中间使用逗号隔开
delete
删除数据,【注】使用delete一定要记得使用where条件限制
delete from stars where name='郭德纲';
update
更新数组,【注】也一定要记得使用where条件限制
update stars set money=4000, age=33 where id=1;
3、DQL(重中之重)
基础查询
select * from 表名;
指定字段查询(重复和不重复)
select id, name, money from stars;
select distinct province from stars;
屏蔽掉查询出来重复的数据
条件查询
select * from stars where id<10 and province='湖北';
select * from stars where id between 3 and 10;
select * from stars where id between 3 and 10;
select * from stars where name like '_超';
_的意思是匹配一个任意字符
select * from stars where name like '%超';
%的意思就是匹配前面所有的字符,上面的语句代表以超结尾的所有记录
结果集排序
select * from stars order by money desc;
desc:降序排列
asc:升序排列,(默认属性)
select * from stars order by money desc, age desc;
如果金钱相等的话,再按照年龄降序排列
限制结果集
select * from stars order by money desc limit 1;
只显示最有钱那一个明星
select * from stars order by money desc limit 2, 1;
limit后面的参数
1:偏移量,从0开始
2:数量,要取出的数据个数
通过limit实现分页,每页显示5条数据
0 1 2 3 4 5 6 7 8 9 10
第一页: limit 0, 5;
第二页: limit 5, 5;
第三页: limit 10, 5;
。。。
第n页: limit (n-1)*5, 5;
常用统计函数
max
min
avg:平均值
sum:求和
count:个数
分组
分组统计
select * from stars group by province;
按照省份分组,但是这样显示的结果没有实际的意义。
select province, count(province) from stars group by province;
按照省份分组,并且显示每一组有多少人
select province as pro, count(province) as count from stars group by province;
结果集过滤
select province as pro, count(province) as count from stars group by province having count > 2;
对分组之后的结果限制,只显示个数大于2个的省份。
【注】对分组结果进行限制要使用having,其作用和where一样,但是where一般用在表的后面,having用在分组结果后面。
整体使用
多表联合查询
链接
select * from user join goods;
结果为两个表的笛卡尔乘积,这种结果对我们没有意义
内连接
隐式
select user.name, goods.name from user, goods where user.gid=goods.gid;
查询对我们有意义的数据
显式
select user.name, goods.name from user join goods on user.gid=goods.gid;
select u.name, g.name from user as u join goods as g on u.gid=g.gid;
显示内连接,显示我们需要的数据,可以给表起别名,使用join on,on后面跟着链接两个表的条件
外连接
左连接
select * from user left join goods on user.gid=goods.gid;
左边的表格全部显示,如果有gid不相等的,右面的数据显示为空
右连接
select * from user right join goods on user.gid=goods.gid;
右边的表格全部显示,如果有gid不相等的,左面的数据显示为空
子查询
记录联合
两个表同时更新
清空表记录
4、DCL
事务
基本使用(了解)
5、DTL(了解)
创建用户
删除用户
修改密码
授予权限
剥夺权限
Select * from b where s in (1,2,3,4)
要注意字段类型,如果是数字类型用
Select * from b where s in (1,2,3,4)
如果是字符串类型用
Select * from b where s in ('1','2','3','4')