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

mysql为空时候不进行修改_mysql为空时候不进行修改

但是要注意如果要找年龄是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

mysql为空时候不进行修改_mysql为空时候不进行修改_02


注意,如果使用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;

mysql为空时候不进行修改_数据_03

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后面就没办法计算

mysql为空时候不进行修改_数据_04


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;