库
mysql -u username -p //回车之后输入密码即可进入
show databases; //查看数据库 一定要加分号
create database 库名 default charset=utf8; //创建数据库
drop database 库名; //删除数据库
use 库名; //打开数据库
quit; //退出
表
格式为create table (if not exists) 表名(字段名称1 字段类型 其他约束, 字段名称2 字段类型 其他约束,…) engine=innodb charset=utf-8
引擎可以不写,默认就是innodb,innodb必须有主键,如果不设置他会默认有一个字段6个字符作为主键。
create table if not exists users(
id int not null primary key auto_increment, //约束包括不允许为空,主键,自增
name varchar(4) not null,
age tinyint,
sex enum('男','女')
)engine=innodb default charset=utf8;
删除表: drop table 表名;
表结构: desc 表名;
对表进行操作
1.添加字段
# 语法:alter table 表名 add 添加的字段信息
-- 在 users 表中 追加 一个 num 字段
alter table users add num int not null;
-- 在指定字段后面追加字段。 在 users 表中 age字段后面, 添加一个 email 字段
alter table users add email varchar(50) after age;
-- 在指定字段后面追加字段,在 users 表中 age字段后面 添加一个 phone。
-- 注意一下只有关键词after没有before
alter table users add phone char(11) not null after age;
-- 在表的最前面添加一个字段
alter table users add aa int first;
2.删除字段
# 删除字段 alter table 表名 drop 被删除的字段名
alter table users drop aa;
3.修改字段
语法格式: alter table 表名 change|modify 被修改的字段信息
change: 可以修改字段名, modify: 不能修改字段名。
# 修改表中的 num 字段 类型,使用 modify 不修改表名
alter table users modify num tinyint not null default 12;
# 修改表中的 num 字段 为 int并且字段名为 nn
alter table users change num mm int;
# 注意:一般情况下,无特殊要求,不要轻易修改表结构
4.修改表名
alter table 原表名 rename as 新表名
5.修改自增值
alter table users auto_increment = 1000;
6.修改表引擎语句
alter table users engine = 'myisam';
增删改查
插入
//值跟字段一一对应插入
insert into 表名(字段1,字段2,字段3) values(值1,值2,值3);
//一次插入多个数据
insert into 表名(字段1,字段2,字段3) values(a值1,a值2,a值3),(b值1,b值2,b值3);
//按照表的默认数据顺序插入,假设表字段有三个,或者是只需要写三个,可以直接这样操作,也同样允许像2一样多个插入
insert into 表名 values(值1,值2,值3);
查询
select * from 表名; //查询所有
select 字段1,字段2,字段3 from 表名; //查询结果集返回的列包括字段1,2,3
select * from 表名 where 字段=某个值; //条件查询
修改,格式为update xx set xx
update 表名 set 字段=某个值 where 条件;
update 表名 set 字段1=值1,字段2=值2 where 条件;
update 表名 set 字段=字段+值 where 条件;
删除
delete from 表名 where 字段=某个值; //删除,注意这里是直接delete+from
语句进阶
1.[where 搜索条件]
where查询中可以加AND, OR, IN, NOT IN, LIKE等
比如我想查我需要找年龄是25并且是女性的,可以这么写:
select * from users where age = 25 and sex = '女';
我想查我需要找年龄是25或者22的,可以这么写:
select * from users where age=22 or age = 25;
select * from users where age in (22, 25);
如果写成not in就是年龄不等于22也不等于25
但是要注意如果要找年龄是22或者25并且是女性的结果集的时候,因为AND的符号优先权大于OR,所以要加括号:
select * from users where (age=22 or age = 25) and sex = '女';
LIKE符号也被叫做通配符,是用来做模糊查找的。与LIKE结合的通常是"%“和”_"
-- like 语句 like某个确定的值 和 where name = '王五' 是一样
select * from users where name like '王五';
-- 使用 % 模糊搜索。%代表任意个任意字符
-- 查询name字段中包含五的,只要有五这个字都算
select * from users where name like '%五%';
-- 查询name字段中最后一个字符 为 五的。
-- 如果%在前面,那么后面的必须出现在结尾
select * from users where name like '%五';
-- 查询name字段中第一个字符 为 王 的
-- 如果%在前面,那么后面的必须出现在开头
select * from users where name like '王%';
-- 使用 _ 单个的下划线。表示一个任意字符。他占一个位置
-- 查询表中 name 字段为两个字符的数据
select * from users where name like '__';
这里是两个_,所以搜索出来的只能是两个字符的任意结果,比如一二,一二三不行
-- 查询 name 字段最后为五,的两个字符的数据
select * from users where name like '_五';
适配:1五
不适配:五1,12五,1五1,五
Mysql中的统计/聚合 函数:max(),min(),count(),sum(),avg()
计算 users 表中 最大年龄,最小年龄,年龄和及平均年龄
select max(age),min(age),sum(age),avg(age) from users;
也可以在计算的过程中用别名,查询结果一样
select max(age) as max_age, min(age) min_age,sum(age) sum_age, avg(age) avg_age from users;
两种别名命名方式:max(age) as max / max(age) max
注意,如果使用count的话,对于null会不统计。比如总共10数据,age这列有一个数据为null,那么count(*)=10, count(age)=9
2.[group by 分组字段 [having 分组条件]]
group by 语句根据一个或多个列对结果集进行分组。一般情况下,是用与数据的统计或计算,配合聚合函数使用。
比如1.统计两个班人数,和2.统计两个班男女人数
select classid,count(*) from users group by classid;
select classid,sex,count(*) as num from users group by classid,sex;
注意这里的classid和sex都要在group by后面再写一次,
如果不写的话会报错,因为不符合mysql语法。
其实按照逻辑思路,group by是分组的意思,其实就是你要把你需要的列都要进行分组。
我们要先对classid分组,然后再对男女分组。
因为count()是对group by分的组进行计算,如果sex不加在group by后面就没办法计算
having时在分组聚合计算后,对结果再一次进行过滤,类似于where。
where过滤的是行数据,having过滤的是分组数据
-- 要统计班级人数
select classid,count(*) from users group by classid;
-- 统计班级人数,并且要人数达到5人及以上
select classid,count(*) as num from users group by classid having num >=5;
3.[order by 排序字段 排序规则]
order by主要是给结果集排序,有升序和降序
注意一点是,他会按照顺序order by后面出现的顺序来排序。比如下面的age和id。所以会先给age排序,如果一样的话再按id排序。
也可以按照多个字段进行排序
select * from users order by age,id; //先按照age进行排序,age相同情况下,按照id进行排序
select * from users order by age,id desc; //降序
4.[limit 分页参数]
**limit n 提取最前面的n条,
limit m,n 取结果集的[m,n]之间的数据。**结果集和数组一样,从0开始。如果limit 1,3,说明取下标为[1,3]的。
-- 查询users表中的数据,只要3条
select * from users limit 3;
-- 跳过前4条数据,再取3条数据
select * from users limit 4,3;
-- limit一般应用在数据分页上面
-- 例如每页显示10条数据,第三页的 limit应该怎么写?
第一页 limit 0,10
第二页 limit 10,10
第三页 limit 20,10
第四页 limit 30,10
-- 提取 user表中 年龄最大的三个用户数据 怎么查询?
select * from users order by age desc limit 3;