数据库的增删改查
创建一个day16的数据库(默认字符集)
create database day16;
创建一个day16_2的数据库,指定字符集为gbk
create database day16_2 character set gbk;
查看所有的数据库
show create database 数据库名;
删除数据库
drop database 数据库名;
修改数据库
alter database 数据库名 character set 字符集;
其他操作
使用该数据库
use 数据库名;
查看正在使用的数据库
select database();
数据库表的增删改查
创建数据库表
create table 表名(
列名 类型 [约束],
列名 类型 [约束]
…
);
primary key 主键
unique 唯一
not null 非空
auto_increment 自动增长,必须是设置了primary key之后,才可以使用auto_increment
查看所有的表
show table;
查看表的定义结构
desc 表名;
修改表
增加一列;alter table 表名 add 字段名 类型 约束;
- 修改列的类型约束; alter table 表名 modify 字段 类型 约束 ;
- 修改列的名称,类型,约束;alter table 表名 change 旧列 新列 类型 约束;
- 删除一列; alter table 表名 drop 列名;
- 修改表名 ; rename table 旧表名 to 新表名;
删除表
drop table 表名;
数据库表记录的增删改查
插入记录:
方式一: 插入指定列, 如果没有把这个列进行列出来, 以null进行自动赋值了.
insert into 表名(列,列…) values(值,值…);
方式二: 插入所有的列,如果哪列不想插入值,则需要赋值为null
insert into 表名 values(值,值…);
更新数据
update 表名 set 列=值,列=值[where 条件];
删除数据
delete from 表名 [where 条件];
truncate
truncate table 表;
把表直接DROP掉,然后再创建一个同样的新表。
删除的数据不能找回。执行速度比DELETE快。
单表查询
select * form 表
查询特定列
select 列名,列名,列名... from 表
去重查询
select distinct 字段名 from 表名;//要数据一模一样才能去重
distinct前面不能先出现列名
别名查询
select 列名 as 别名 ,列名 from 表 //列别名 as可以不写
运算查询(+,-,*,/等)
select pname ,price+10 as price from product;
条件查询
between...and... 区间查询
eg: where price between 1000 and 3000 相当于 1000<=price<=3000
in(值,值..)
select * from t_product where id in(1,3,5,7)
like 模糊查询 一般和_或者%一起使用(难点)
- _ 占一位
- % 占0或者n位
name like '张%' --查询姓张的用户, 名字的字数没有限制
name like '张_' --查询姓张的用户 并且名字是两个的字的
and 多条件同时满足
where 条件1 and 条件2 and 条件3
or 任意条件满足
where 条件1 or 条件2 or 条件3
排序查询
单列排序
SELECT 字段名 FROM 表名 [WHERE 条件] ORDER BY 字段名 [ASC|DESC]; //ASC: 升序,默认值; DESC: 降序
eg:以分数降序查询所有的学生
SELECT * FROM student ORDER BY score DESC
组合排序
同时对多个字段进行排序,如果第1个字段相等,则按第2个字段排序,依次类推
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];
eg:以分数降序查询所有的学生, 如果分数一致,再以age降序
SELECT * FROM student ORDER BY score DESC, age DESC
聚合函数
SELECT 聚合函数(列名) FROM 表名 [where 条件];
- max() 最大值
- min() 最小值
- sum() 求和
- avg() 平均值
- count() 统计数量
注意: 聚合函数会忽略空值NULL,
聚合函数之前不能加任何字段名,除非该字段名是用于分组的字段
聚合函数不能使用在where条件中
分组查询
SELECT 字段1,字段2… FROM 表名 [where 条件] GROUP BY 列 [HAVING 条件];
where和having的区别【面试】
where: 1)对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,即先过滤再分组。2) where后面不可以使用聚合函数
having: 1) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,即先分组再过滤。2) having后面可以使用聚合函数
分页查询
select … from … limit a ,b.
a:跳过多少条数据 【a=(当前页码-1)*b】
b: 一页查询的数量【固定的,自定义的】