# 请先安装datagrip再在root数据库中运行下面的命令


# 好的,你应该没有把我们创建的test数据库删除吧?让我们继续

# 增加
insert into user(username,password) values(1,2);
# 看看user表吧
select * from user;
# 是不是是1,1,2?
# 你已经插入了数据!为什么没有为user_id指定?因为这个字段是主键且自增
# 它唯一,且当你不设置值时它会按照数据库的记录自动设置

# 当然你可以不定义字段,为所有字段插入数据
insert into user values(3,4,5);
select * from user;
# 看到了吗?user_id变成了3,当你为所有字段插入数据时就必须要手动定义user_id了
# 让我们再来插入一条数据看看user_id
insert into user(username,password) values(7,8);
select * from user;
# 这时候主键就按你设置的最大user_id向后自增了

# 你想批量插入很多数据怎么办呢?看下面,字符串和日期需要被双引号包裹
insert into user(username, password) values (11,11),("wocao","真帅"),(13,13);
select * from user;
# 看,我们使用,分隔,批量插入了三个数据!
# 批量向所有字段插入也同理!不过我们通常不会手动为user_id即自增主键设置值
# 你可以看看下面代码,也可以尝试,不推荐在开发中使用
insert into user values (15,15,15),(16,16,16);
select * from user;

# 好的,下面我们开始修改数据
update user set username = "小豆", password = "真帅";
select * from user;
# 哦,我的天!我修改了所有行的username和password!这非常不安全!我们需要where来限制我们的修改!
# where通常用来过滤条件,是我们的操作不会影响到所有行,它普遍出现在update select delete
update user set username = "这次", password = "没问题了吧?" where user_id = 19;
select * from user;
# 上面我只修改了19行,使用了where user_id = 19这个限制,当然这不局限于此
# 你可以使用 where user_id >= 5 and user_id < 10 或者 where user_id != 15
# 至于更多,你可以搜索 [mysql where 详解]

# 好吧,也该到了查了,上面使用了这么多select,该接触了!
select * from user; # 这个是不加限制查询user表中所有数据的所有字段
select distinct username from user; # 返回指定字段不同内容的行 distinct
select username as bb from user; # 将username字段设置别名为bb 这里as可以省略如下
select username bb from user;
select * from user where user_id = 16; # 你也可以使用where
select * from user where username = "这次"; # 当然不局限于user_id
select username,password from user; # 当然可以限制查询多少字段啦
select count(*) from user; # 获取总数也可以
# 这里有一些聚合函数 count 数据行数 avg 返回某字段列的平均值 sum 返回某字段列的总和 max 某字段列的最大值 min 某字段列的最小值
select max(user_id) from user; # 最大值

# 下面是更多的条件查询的条件,请善用搜索
select * from user where user_id between 5 and 8; # 查询user_id 为 5~8的用户(不包括8)
select * from user where user_id in (15,18,20,22); # 查询 user_id 为 15,18,20,22 中的行数据
select * from user where username is null ; # 查询 username 为 null 的行数据
select * from user where user_id = 19 and username = "这次"; # 查询 user_id 为19 且 username 为 这次 的行数据
select * from user where user_id = 19 or username = "这次"; # 查询 user_id 为19 或 username 为 这次 的行数据
select * from user where user_id != 19; # 查询 user_id 不为 19 的行数据

# 下面是删除
delete from user; # 不加限制时会删除表所有数据,这很危险!请加以限制
delete from user where user_id = 1;
select * from user; # 我们可以看到user_id为1的字段被删除了

# 分组查询
select username,count(*) from user group by username; # 分组查询
select username,count(*) from user group by username having count(*) > 2; # 分组后查询当前组行数大于2的组

# 排序
select * from user order by user_id desc ; # 根据user_id降序
select * from user order by username desc ; # 根据username排序,如果是特殊字符 如中文,则按照ascii码排序,请善用搜索
select * from user order by username desc, user_id desc ; # 根据username排序,如果是特殊字符 如中文,则按照ascii码排序,如果内容相同则按第二个规则user_id降序

# 分页
select * from user limit 2; # 正序排序方法获取2个数据
select * from user limit 2,5; # 从第二条开始(不包括第二条)向后获取5条数据