Linux-mysql

如果忘记数据库密码处理方法

#vim /etc/my.cnf       			 mysql配置文件
#skip-grant-tables      		 跳过密码认证
#systemctl restart mysqld 		 重启mysql
#现在连接数据库不需要密码 直接登陆,登陆过后可以修改密码

查看数据库:

show databases;

创建数据库:

create database 数据库名;

删除数据库:

drop database 库名;

创建用户;

create user 用户名 @'地址或者localhost或者%' identified by 'Chenmeng.123';
(localhost表示本机,%表示任何地方,by 后面跟新密码)

这里可以关闭密码强度验证
退出mysql客户端:quit
vim /etc/my.cnf

最后一段加上:validate_password=off
重启mysql服务端:systemctl restart mysqld

查看用户:

use mysql;  进去mysql这个数据库
select user ,host from user; 

对用户授权

grant all privileges on 数据库.表名 to 用户名@'地址';
(实例:grant all privileges on *.* to chenmeng@'%';)
#星号表示所有
也可以修改root的远程登陆权限
(update user set host='%' where user='root';)

刷新权限

flush privileges; 

– 创建数据库

create database studentsystem default charset utf8;    -- 数据库已经存在会报错
create database if not exists studentsystem default charset utf8;   -- 数据库已经存在的时候不会报错
-- create database if not exists 数据库名称 default chaset 编码方式;

– 删除数据库

drop database studentsystem;    -- 如果数据库不存在会报错
drop database if exists studentsystem;   -- 如果数据库不存在不会报错
-- drop database if exists 数据库名; 

– 创建表

use studentsystem;   -- 先切换数据库

create table student(name_id varchar(5),age int,tel char(11));
-- create table 表名(字段名1 字段类型1,字段名2 字段类型2,...);  --varchar可变长度字符串 char不可变长度 int整型 float浮点型

create table if not exists tb_student(
										id int not null auto_increment,     -- id为学号,int为整数类型,not null不可为空,auto_increment为自增,如果不指定,id则自动增加
										name varchar(20) not null,          -- name为姓名,varchar为可变字符串
										sex boolean default 1,              -- sex为性别,布尔类型,默认值为1
										birth date,				                  -- birth为生日,时间类型,不写默认可为空
										primary key(id))                    -- primary key(id)为主键,唯一标识
										engine=innodb default charset=utf8; -- engine设置存储引擎,charset设置编码

– 查看表结构

desc tb_student; 
-- desc 表名;

– 修改表与添加外键

alter table tb_student add collid int not null;
-- alte table 表名 add 列名 类型 是否为空;




alter table tb_student add constraint fk foreign key (id) references tb_college (id);
-- alter table 表1 add constraint 约束名称 foreign key (要添加表的字段) references 表2(要引用的字段)
-- 表名1 为要给那个表添加外键,表2 为要引用的表,约束名称任意起名
-- 这段命令可以简单理解为:'修改那张表( ) 添加约束 约束名称 要修改表的字段 参考于( )张表的字段; 

– 删除表

drop table tb_student;
-- drop table 表名;

– 增加表的数据

insert tb_college values(default,'Python技术','北京千峰互联网科技有限公司');  -- 这个表设置有自增,如果不写列名,后面写default
insert into tb_college (name,intro) values ('外国语学院','学习英文的知名学院'); -- 写有列名的表,在列名后增加数据
insert into tb_college(name,intro) values ('JAVA技术','西安互联网科技公司');
-- insert into 表名(列名,...) values (要添加数据的数据,...);

– 获取当前时间与日期

now() ;获取当前时间;
curdate();获取当前日期;
insert into tb_student (id,name,sex,birth,collid) values (1001,'芒果','女',curdate(),5);
-- insert into 表名(列名) values (要添加的内容,在日期这个字段可以直接用获取当前日期的函数来替代);

– 删除表的数据

delete from tb_college where id=4;
delete from tb_college where id=4 and name='Python';
-- delete from 表名 where 条件;

– 修改表的数据

update tb_college set intro='Python是开发效率最高的语言' where id=2;
-- update 表名 set 列名 条件;

– 查看表的数据

select * from tb_college;                 --查看所有
select * from tb_college where id=2;      --查看id=2的列
select name from tb_college where id=6;   --查看id=6,字段为name的列
select name from tb_student;       --查看tb_student里面的字段为name的列
--select 查看的字段 from 表名;




select name as 姓名 ,sex as 性别 from tb_student;   -- 给名字和性别起别名查看
--select 要查看的字段1 as 别名,要查看的字段2 as,... 别名 from 表名;



#用判断分支语句来输出
select name as 姓名,
case sex when 1 then '男' else '女' end as 性别 from tb_student;    --加上判断分支语句
--select name as 姓名,
--case 列名 when 条件 then 为真输出 else 为假输出 end 结束输出 as 别名 from 表名;



#给字段起别名
select name as 姓名,if (sex,男,女) as 性别 from tb_student;
--select 列名 as 别名,if(要判断的字段,条件为真的结果,条件为假的结果) as 别名 from 表名;
#(注意if语法只能在mysql里面用,别的数据库可能不支持);



select * from tb_student where sex='女';  --只查询性别为女的数据
--select 列名 from 表名 where 条件;


#计算日期类型时间差
select name as 姓名,datediff(curdate(),birth) / 365 as 年龄 from tb_student where sex='女'; 
--select 字段名 as 别名,datediff(curdate(),生日) / 365 as 别名,from 表名 where sex ='女';
#datediff(a,b) 计算a和b的时间差
#curdate()  获取当前时间



#排序
#order by 列名  asc(从小到大) desc (从大到小)
select name as 姓名,datediff(curdate(),birth) / 365 as 年龄 from tb_student where sex='女' order by 	年龄 desc;
-- 查看数据语句结束后,在后面跟 order by 被排序的字段 升序或者降序;




#查询80后的出生日期
select name,birth from tb_student where birth >='1980-1-1' and birth  <= '1989-12-31';
--select 要查询的字段1,字段2 from 表名 where 生日大于1980-1-1而且小于1989-12-31;
或
select name,birth from tb_student where birth between '1980-1-1' and '1989-12-31';
-- berween ...and... 在什么什么之间
-- select 字段 from 表名 where berween 被查询的字段 between 第一个条件 and 第二个条件;



#查询姓夏的所有人
select name,sex from tb_student where name like '夏%';
-- '%' 表示通配符,可以匹配0个或者多个字符


# 查询姓夏,名字是两个字的人
select name from tb_student where name like '夏_';
--'_'表示一个字符


#查询名字里面带有'萌'字或者带'玉'的字
select name from tb_student where name like '%萌%' or name like %玉%';
-- 语法:要查寻的字符 like 条件;


#查询没有录入姓名别的人
select name,sex from tb_student where sex is null;


#查询已经录入了性别的人
select sex form tb_student where sex is not null ;


#查询生日(去重)
select distinct birth from tb_student;


#查询生日并且把没有录入生日的学生去除(去重并且去掉null值)
select distinct birth from tb_student where birth is not null;


#查询性别为男,出生日期从大到小排序
select name,sex from tb_student where sex=1 order by birth;


#查询年龄最小的出生日期(聚合函数)  聚合函数忽略计算
select max(birth) from tb_student;   --年份越大年龄越小
select min(birth)from tb_student;     --年份越小年龄越大
(min,max,avg,sum,count)最小 最大 平均 求和 计数   

#查询性别为男的人
select sex from tb_student where sex=1;


#查询男女分别的总人数用分组的方法
select count(id)  from tb_student group by sex;   -- 先用性别分组,然后count函数计数。
select min(birth) from tb_student group by sex;   --先用性别分组,然后分别找出男女学生生日最小的那个
(group 为分组函数,经常和聚合函数搭配使用)


###假设有个学生分数的表
计算学生的平均分
select avg(分数字段) from 表名 where id=111;    --计算id=111的学生平均分


#计算每个学生的平均分
select avg(分数字段) from 表名 group by id;  --用id进行了分组
select 学号 round(avg(分数列),1) from 表名 group by id;      --round(a,b) a为数值,b为小数点后保留几位小数 


#查询平均分数大于等于90的学号和成绩
select id ,round(avg(分数列),1) from 表名 group by id having 分数列 >=90;
-- 分组之前要筛选的数据使用where语句,分组之后用having语句


#查询年龄最大的学生的姓名(子查询/嵌套查询)
select name from tb_student where birth =(select min(birth) from tb_student);
 -- 常用查询语法



#查询选了两门以上的课程学生姓名(子查询/分组条件/集合运算)
sid 代表学号 
tb_record选课的表  tb_student 学生资料表

select sid,count(sid) from tb_record group by sid;
-- 用学号分组,然后数学号出现的次数,在输出学号和学号出现的次数
select sid from tb_record group by sid having count(sid)>2;   #省略掉了选课的数量
--这个是筛选出选课数量超过2次的学号    --这里假设输出三元组
select name from tb_student where id in (select sid from tb_record group by sid having count(sid)>2;
--把筛选出来的三元组作为条件输入到另外一个查询里面




#查询三张表,1.名字/2.学号/3.成绩  分别对应三张表
-- 假设有三张表,tb_studet/tb_college/tb_course 
-- 里面有约束关系,tb_student.id=tb_course.id=tb_college.id

select name,couname,score 
from tb_student,tb_college,tb_score 
where tb_student.id=tb_college.id and tb_course.id=tb_college and score is not null;
-- 理解为:查询tb_student,tb_college,tb_score这三张表的名字,学号,成绩   
-- 条件为:在成绩不为空的情况下 三张表的关系必须满足这个where条件.一般为表的外键约束
-- 如果遇到列名相同,则需要用  表名.列名 来写条件

或

select name,couname,score 
from tb_student inner join tb_college on tb_student.id=tb_college inner join tb_score on tb_score.id=tb_college.id
where score is not null;
-- from 表1 inner join 要连接的表2 on 连接条件
-- 注意inner join(内连接) 不能查询到不满足条件的数据






#分页查询
select name,couname,score 
from tb_student,tb_college,tb_score 
where tb_student.id=tb_college.id and tb_course.id=tb_college and score is not null
order by score desc limit 10,5;
-- limit a,b    a跳过多少条,b取多少条数据
-- limit 10,5   跳过前10条,取5条数据2




# 左外连接/右外连接(子查询)
select name,id from tb_student left join 
(select id,count(sid) from tb_college group by sid)tb_temp
on sid=id;  -- 左外
或
select name,id from 
(select id,count(sid) from tb_college group by sid) tb_temp
right join tb_student on sid=id; -- 右外
-- left outer join 保证left前的表可以查询到不满足条件的数据,保证可以查询完整
-- right outer join 保证right后的表可以查询到不满足条件的数据,保证可以查询完整
-- outer 可以省略不写




#查询语句优先级
select ..
	from 表名
	where 条件
	group by 列
	having 条件
	order by 列1 asc,列2 desc
	limit a offset b;

select ...
	from 表1,表2,表3                     -- 小表靠右,大表靠左
	where 条件1 and 条件2 and 条件3      -- 能够筛选掉最多纪录的条件方右边
-- 右驱动执行




#explain 解释(关键字)
explain select * from tb_student where id=1001;             -- type:const    性能最好的查询
explain select * from tb_student where id='王大锤';         -- type:all      性能最差的查询
-- 如果开发中遇到全表查询,需要优化性能可以创建索引          -- tepe:ref      索引查询(性能可以得到提高,但是浪费空间)




#查询创建索引(相当于创建了目录,查询性能会提高)
create index inx_emp_ename on tb_emp(ename);
-- create index 索引名 on 表名(列名);
-- 索引增加了查询性能,但是会降低增删改的性能                -- 一般索引建立在常用查询的列上(非主键列)


#删除索引
drop index inx_emp_ename on tb_emp;
-- drop index 索引名 on 表名;



#创建视图
create view vw_simple_emp as select id,name,sex,collid from tb_student;
-- 创建视图相当于是创建了表的快照,可以快速查询到指定的列
-- 相当于给予了使用vw_simple_emp这张表使用者的查询 id,name,sex,collid 列的权限.

– 获取帮助

?               -- 列出sql命令
? data types;   -- 列出数据类型;
? varchar;      -- 列出命令的解释;

– mysql自带函数 详解、应用

mysql函数的详解和应用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像风一样的男人@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值