MySql学习笔记

MySQL新手笔记

英文:844词 | 中文:5479字

Posted by YY——阳阳 on April 2, 2021

1、前言

DB:(database,数据库,数据库实际上在硬盘上以文件的形式存在)

DBMS(database management system(数据库管理系统)常见的有MySQL、Oracle、DB2等等)

SQL:结构化查询语句,便准通用的语言。高级语言,实际上内部先进性编译,在执行sql(sql由DBMS进行编译)

PS:DNMS负责执行sql语句,通过sql语句管理DB中的数据

2、什么是表?

表:table

表:table是数据库的基本组成单元,所有的数据都以表格形式组织,目的是具有可读性

表包括行(数据/记录data)和列(字段column)

3、sql语句分类

DQL(数据查询语言):查询语句

DML(数据操作语言):insert、delet、update对表中的数据增删改语句

DDL(数据定义语言):creat、drop、alter对表结构的增删改

TCL(事务控制语言):commit提交事务,rollback回滚事务(traction)

DCL(数据控制语言):grant授权、revoke撤销权限等

4、导入数据

第一步:登录mysql -uroot -p

第二步:查看有哪些数据库

show database;(mysql命令)

第三步:创建数据库

creat database bjpowernode;(mysql命令)

第四步:使用bjpowernode数据库

use bjpowernode;(mysql命令)

第五步:查看当前使用的数据库中有哪些表

show tables;(mysql命令)

第六步:初始化命令

source C:\Users\29854\Desktop\resources\bjpowernode.sql

以sql结尾的文件叫sql脚本

当一个文件的扩展名是.sql,并且文件中编写了大量的sql语句,称为sql脚本

PS:像批量执行SQL语句,用source命令完成初始化

5、基本命令

1、删除数据库:drop database bj;

2、查看表的结构:desc 表名;

3、表中的数据:select * from dept;

4、常用命令select database();select version();\c;结束一条语句

5、查看创建表时的语句:show create table emp;

6、简单的查询语句:

select 字段名1,2,3,... from 表名;

PS: 1、任何一条语句以“;”结尾 2、sql语句不区分大小写 3、字段可以参加数学运算 4、给查询结果的列重命名 select ename , sal12 as yearsal from emp; select ename , sal12 as ‘年薪’ from emp; 5、sql语句中字符串用单引号括起来

6、设置MySQL密码的不同姿势

0x01 用SET PASSWORD命令

首先登录MySQL。

格式:mysql> set password for 用户名@localhost = password('新密码'); 

例子:mysql> set password for root@localhost = password('123'); 

0x02 用mysqladmin

格式:mysqladmin -u用户名 -p旧密码 password 新密码 

例子:mysqladmin -uroot -p123456 password 123 

0x03 用UPDATE直接编辑user表

首先登录MySQL。

mysql> use mysql; 

mysql> update user set password=password('123') where user='root' and host='localhost'; 

mysql> flush privileges; 

0x04 使用GRANT语句

mysql>grant all on *.* to 'root'@'localhost' IDENTIFIED BY '你的密码'with grant option ;

mysql>flush privileges;

0x05 在忘记root密码或初始化密码的时候

以windows为例:   

1. 关闭正在运行的MySQL服务。  

2. 打开DOS窗口,转到mysql\bin目录。  

3. 输入mysqld --skip-grant-tables 回车。--skip-grant-tables 的意思是启动MySQL服务的时候跳过权限表认证。  

4. 再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。  

5. 输入mysql回车,如果成功,将出现MySQL提示符 >。  

6. 连接权限数据库: use mysql; 。  

6. 改密码:update user set password=password("123") where user="root";(别忘了最后加分号) 。  

7. 刷新权限(必须步骤):flush privileges; 。  

8. 退出 quit。  

9. 注销系统,再进入,使用用户名root和刚才设置的新密码123登录。

7、条件查询

语法格式:select 字段 from 表名 where 条件; cuiBKU.png

select ename from emp where sal = 5000;

select sal from emp where ename = 'SMITH'; //字符串用单引号括起来

select sal,ename from emp where sal>= 3000; //条件查询

select sal,ename from emp where sal <> 3000; //大于小于,等价于!=3000

select sal,ename from emp where sal <= 3000 and sal>=1100;

select sal,ename from emp where sal between 1000 and 3000; //闭区间,使用时左小右大;

select ename from emp where ename between 'A' and 'C';//除了数字,还可以是字符串方面,左闭右开

找出那些人没有津贴。null在数据库中不是一个值,代表什么也没有,为空,必须使用is null或者is not null ```mysql select ename,sal,comm from emp where comm is null;

select ename,sal,comm from emp where comm is not null; ``` [![cuFjYR.png](https://z3.ax1x.com/2021/04/03/cuFjYR.png)](https://imgtu.com/i/cuFjYR)
  • and和or一起用
      select ename,sal,deptno from emp where sal > 1000 and deptno = 20 or deptno = 30;
      select ename,sal,deptno from emp where sal > 1000 and (deptno = 20 or deptno = 30);
    

注意优先级的顺序,and>or;以后优先级的顺序不确定的时候直接使用小括号

cuE9de.png

  • in等同于or:
      select ename,job from emp where job = 'MANAGER' or job = 'salesman';
    
      select ename,job from emp where job in ('manager','salesman');
    

cuVSlq.png

PS:in里边的变量不是区间select ename,job from emp where job in (100,200);

  • not in

  • 模糊查询like

    找出名字中当中有o的(在模糊查询中掌握两个特殊符号,一个是%,一个是_)

    %代表任意多个字符,_代表任意一个字符

//找出名字中第二个字母是A的
select ename from emp where ename like '_A%';

//找出名字中有下划线的
select ename from emp where ename like '%\_%';

//最后一个字母是T
select ename from emp where ename like '%T';

cuZJVU.png

8、排序和分组函数

升序、降序

select ename,sal from emp order by sal;//默认升序

//升序asc
select ename,sal from emp order by sal asc;
//降序desc
select ename,sal from emp order by sal desc;
//首先按照降序排列,当工资相同时再按照名字的升序排列
select ename,sal from emp order by sal desc,ename asc; //越靠前的字段越能起到主导作用。只有当前边的字段相等时,后边才会执行

//找出工作岗位是salesman的员工,降序排序
select ename,job,sal from emp where job = 'salesman' order by sal desc;

分组函数(多行处理函数【输入多行输出一行】)

//所有的分组函数都是对“某一组“数据进行操作,一共5个
count  取得记录数
sum 求和
avg 取平均值
max 取最大值
min 取最小值

分组函数自动忽略空值(null),不需要手动加where条件排除空值 select count(ename) from emp; select count(*) from emp; select sum(sal) from emp; select max(sal) from emp; select min(sal) from emp; select avg(sal) from emp; 一切数据库规定,只要有null参与的运算,结果一定是null ifnull(可能为null的数据,被当作什么处理)//空处理函数if(null,0)

//找出工资水品高于平均薪资的员工
select ename,sal from emp where sal > avg(sal);//ERROR 1111 (HY000): Invalid use of group function无效使用分组函数
//分组函数不能直接在where后边,因为group by在where之后执行。
select ..    		5
from ..				1
where ..			2
group by ..			3
having ..			4
order by ..			6

//解决方法
第一步:找出平均工资
select avg(sal) from emp;
第二步:找出高于平均工资的员工
select ename,sal from emp where sal > 2073.214286;

//合并语句(语句嵌套)
select ename,sal from emp where sal > (select avg(sal) from emp);
  • ps:count()和count(具体某个字段)的区别。count()统计总记录条数;count(某个字段)统计字段中不为null的数据总数量。

group by和having

  • group by :按照某个字段或者某些字段进行分组;
  • having:对分组之后的数据进行再次过滤;
group by
select max(sal) from emp group by job;//找出某个岗位的最高薪资
select max(sal),job from emp group by job;//优化
select max(sal),ename from emp group by job;//数据库报错,因为ename不止五行,语法规则严谨。当一条语句中有group by的话,select后面只能跟分组函数和参与分组的字段。

PS:分组函数一般会和group by联合使用,这也是被称为分组函数的原因。任何一个分组函数(count sum avg max min)都是在group by 语句执行结束后才会执行。当一条语句没有group by,整张表数据自成一组。

 select job,avg(sal) from emp group by job;//平均工资

多个字段能不能联合起来一块分组?

案例:找出每个部门不同工作岗位的最高薪资。

select 
	deptno,job,max(sal)
from
	emp
group by
	deptno,job;
having

找出每个部门的最高薪资,要求显示薪资大于2500的数据。

select max(sal),deptno from emp group by deptno;