前言
讲一下MySQL的一些基本操作
1. DDL
#库操作
show databases;#展示所有数据库
select database();#查询当前数据库,看当前是哪个数据库
#drop database ck;#删除数据库,如果不存在就报错
drop database if exists ck;#如果存在就删,不存在的话就不报错,不做处理
#create database ck;#创建数据库,已经存在就报错
#create database if not exists ck;#创建数据库,不存在才创建
#create database ck default charset utf8mb4;#编码使用utf8mb4就是系统默认的编码规则
use test;#使用数据库,就会切换到这个数据库
#表操作
show tables;#这个会展示当前数据库里面的所有表,只展示表名
#desc 表名;就是打印出这个表
#show create table 表名;查寻这个表的建表语句
create table user2(
id int comment '编号',
name varchar(50) comment '姓名',
age int comment '年龄',
gender varchar(1) comment '性别'
)comment '用户表';#这就是一个建表操作
#添加字段,就是添加一行
alter table user2 add nickname varchar(20) comment '昵称';
#修改字段,就是修改一行
alter table user2 change nickname username varchar(20) comment '昵称';#注释可以不写
#删除字段,就是删除一行
alter table user2 drop username;
#修改表名
alter table user2 rename to user1;
#删除表
drop table if exists user1;
#删除表,并重新创建该表,意思就是相当于清空了原来的数据,全部数据都没了
truncate table user2;
2. DML
有些时候会出现Connection refused: connect这种错误,这个的原因就是
mysql没有启动的原因
win+r输入services.msc去启动就可以了
2.1 插入操作
insert into user (id, name, age) values ('1','ck',19);
左边是这个(id, name, age),右边就要对应才行,顺序可以交换
双击user就可以查表了
select * from user;
或者这样也可以查表
insert into user (id, name) values ('1','ck');
也可以这样写,没写的就是默认为null
insert into user values ('3','hh',30);
不写左边括号的属性值的话,这个属性就是字段,,就会默认用的(id, name, age)属性,挨着挨着来的
insert into user values ('4','hh',30),('5','hh',30);
这样写就是插入多排
2.2 修改数据
update user set name = 'aaaaaaa' where age =19;
这个的意思就是将age=19的那一行的name改成aaaaaaa
update user set name = 'aaaaaaa',age=100 where age =19;
当然也可以改多个
**update user set age = 20;**
这个是把每一行的age都改为20
有危险提示,继续执行就是了
2.3 删除
delete from user where name = 'ck';
这个就是删除name=ck的行
delete from user ;
这个就是删除所有行
3. DQL
3.1 基本查询
select age from user;
打印所有age数据
select age,name from user;
也可以打印多行
select age,name,id from user;
查询所有
或者这样
select * from user;
select age as '年龄' from user;
查询本来是age,但是这个取别名,打印出来就是别名年龄了
select age '年龄' from user;
也可以去掉as
as就是取别名
select distinct age '年龄' from user;
加上distinct就是去掉重复的
3.2 条件查询
select * from form where age = 12;
打印*也就是name,age,id但是查询的只是age = 12的时候
select * from form where age > 12;
select * from form where age >= 13;
select * from form where id is null;
这个查询的是null
select * from form where id is not null;
select * from form where id != 1;
查询的时候不会管null,除非专门针对null
select * from form where id <> 1;
<>与!=是一样的
select * from form where age>=30&&age<=90;
select * from form where age>=30 and age<=90;
and与&&是一样的作用
select * from form where age between 30 and 90;
这个是查询30到90的age,包括30和90,,betweed对应的是最小值,and对应的是最大值,不能倒过来,倒过来就不行了
select * from form where age = 30 && id = 3;
select * from form where age = 30 or age =90 or age =12;
select * from form where age in(30,90,12);
这个in和上面的or是一样的效果
select * from form where age like '__';
like是对位数进行限制,这个就是打印两位数,两个字符的age
一个下划线就是一位数
select * from form where age like '_';
select * from form where name like '%d';
这个%指的是任意位数,这个意思就是打印name最后一个为d的
等价于
select * from form where name like '____d';
3.3 聚合函数
select count(*) from form;
count是用来计数的,count(*)就是计算有多少行
select count(id) from form;
这个count(id)就是算id的数据有多少个,null不纳入计算
select avg(age) from form;
这个是算所有age数据的平均数
select min(age) from form;
这个是算age的最小值
select max(age) from form;
select sum(age) from form where age<90;
这个是对所有小于90的age求和
3.4 分组查询
select count(*) from form group by name;
这个的意思就是按照名字的不同来分组,打印每组的个数
还可以打印名字出来,然后打印每个名字类型有多少个
select name,count(*) from form group by name;
select name,avg(age) from form group by name;
这个就是先根据名字来分组,然后计算每组的平均年龄
select name,count(*) from form where age<30 group by name;
这个的意思就是把年龄小于30的按照名字分组,并打印出每组人数
select name,count(*) from form where age<30 group by name having count(*)>=2;
这个的意思就是打印出分组之后,数量大于2的
select name,count(*) 数量 from form where age<30 group by name having count(*)>=2;
这个就是取个别名
where先执行,然后是聚合函数,然后是having
查询的字段一般是你分组的字段,其他字段没有意义
3.5 排序查询
select * from form order by age asc;
这个是打印所有字段,然后打印的顺序就是按照年龄从小到大的顺序
select * from form order by age desc;
desc就是降序
select * from form order by age ;
默认不写就是升序
select * from form order by age asc,id asc;
这个就是按照年龄排序,年龄相同就比id
3.6 分页查询
select * from form limit 0,10;
这个就是将表中的默认顺序,从索引0往后打印10个
select * from form limit 10;
不写第一个参数就是默认从索引0开始往后10个
select * from form limit 10,10;
如果后面没有10个,那么该打印多少个就打印多少个
这个就是从索引为10的往后打印10个
为什么叫做分页查询呢,因为每页数量固定,那么就可以查询每页数量了
3.7 编写顺序
select +字段列表+from +表名列表+where+条件列表+group by+分组字段列表+having+分组后条件列表+order by+排序字段列表 +limit +分页参数
3.8 执行顺序
先from
再where
group by
having
select
order by
limit
4. DCL
这个就是用来管理数据库的用户和用户的权限的,管理用户的对库和表的权限,一般这里的语言只对数据库管理人员有要求,普通的开发人员了解一下就可以了
4.1 管理用户
点击数据库mysql,里面找到表user,就可以看到我们的用户了
其中那个Host是主机地址,我们创建用户的时候就要用到
create user 'aaaaa'@'localhost' identified by '123456';
这个就是创建用户,用户名为aaaaa,然后主机地址为localhost,密码是123456,这个主机地址就是我们这个计算机
create user 'aaaaa'@'%' identified by '123456';
这个就表示我们创建的用户可以任意主机访问数据库
可以看出,我们现在创建的用户没什么权限,只能登录,不能真正的访问数据库
alter user 'aaaaa'@'%' identified with mysql_native_password by '1122';
这个就是把我们刚刚创建的用户的密码修改成1122
drop user 'aaaaa'@'%' ;
这个就是删除用户
4.2 权限控制
show grants for 'aaaaa'@'localhost';
这个就是展示这个用户的所有权限
可以看出这个用户什么权限都没有
grant all on test.* to 'aaaaa'@'localhost';
show grants for 'aaaaa'@'localhost';
这个是赋予权限意思,赋予aaaaa这个用户test这个库的所有表的所有权限
revoke all on test.* from 'aaaaa'@'localhost';
这个就是撤销权限的意思,,撤销aaaaa这个用户test这个库的所有表的所有权限
show grants for 'aaaaa'@'localhost';
总结
这一篇博客主要是mysql的sql语句的语法,下一次讲函数