看完这些MySQL笔记,再也不用担心不会MySQL了

mysql

0.数据库常见概念

0.1概念

数据库:
英文单词DataBase,简称DB。按照一定格式存储数据的一些文件的组合。
顾名思义:存储数据的仓库,实际上就是一堆文件。这些文件中存储了
具有特定格式的数据。

数据库管理系统:
DataBaseManagement,简称DBMS。
数据库管理系统是专门用来管理数据库中数据的,数据库管理系统可以
对数据库当中的数据进行增删改查。

常见的数据库管理系统:
MySQL、Oracle、MS SqlServer、DB2、sybase等…

SQL:结构化查询语言
程序员需要学习SQL语句,程序员通过编写SQL语句,然后DBMS负责执行SQL
语句,最终来完成数据库中数据的增删改查操作。

SQL是一套标准,程序员主要学习的就是SQL语句,这个SQL在mysql中可以使用,
同时在Oracle中也可以使用,在DB2中也可以使用。

三者之间的关系?
DBMS–执行–> SQL --操作–> DB

先安装数据库管理系统MySQL,然后学习SQL语句怎么写,编写SQL语句之后,DBMS
对SQL语句进行执行,最终来完成数据库的数据管理。

0.2 SQL语句分类

DQL:
数据查询语言(凡是带有select关键字的都是查询语句)
select…

DML:
数据操作语言(凡是对表当中的数据进行增删改的都是DML)
insert delete update
insert 增
delete 删
update 改

​ 这个主要是操作表中的数据data。

DDL:
数据定义语言
凡是带有create、drop、alter的都是DDL。
DDL主要操作的是表的结构。不是表中的数据。
create:新建,等同于增
drop:删除
alter:修改
这个增删改和DML不同,这个主要是对表结构进行操作。

TCL:
不是王牌电视。
是事务控制语言
包括:
事务提交:commit;
事务回滚:rollback;

DCL:
是数据控制语言。
例如:授权grant、撤销权限revoke…

0.3MYSQL中的数据类型

varchar(最长255)
可变长度的字符串,比较智能,节省空间。会根据实际的数据长度动态分配空间。

​ 优点:节省空间
​ 缺点:需要动态分配空间,速度慢。

char(最长255)
定长字符串,不管实际的数据长度是多少,分配固定长度的空间去存储数据。
使用不恰当的时候,可能会导致空间的浪费。

​ 优点:不需要动态分配空间,速度快。
​ 缺点:使用不当可能会导致空间的浪费。

varchar和char我们应该怎么选择?
​ 性别字段你选什么?因为性别是固定长度的字符串,所以选择char。
​ 姓名字段你选什么?每一个人的名字长度不同,所以选择varchar。

int(最长11)

​ 数字中的整数型。等同于java的int。

bigint
数字中的长整型。等同于java中的long。

float
单精度浮点型数据

double
双精度浮点型数据

date
短日期类型

datetime
长日期类型

clob
字符大对象
最多可以存储4G的字符串。
比如:存储一篇文章,存储一个说明。
超过255个字符的都要采用CLOB字符大对象来存储。
Character Large OBject:CLOB

blob
二进制大对象
Binary Large OBject
专门用来存储图片、声音、视频等流媒体数据。
往BLOB类型的字段上插入数据的时候,例如插入一个图片、视频等,
你需要使用IO流才行。

t_movie 电影表(专门存储电影信息的)
编号no(bigint)	名字name(varchar)		故事情节history(clob)	
上映日期playtime(date)		时长time(double)		海报image(blob)
类型type(char)							

0.4SQL脚本的执行

xxxx.sql这种文件被称为sql脚本文件。
sql脚本文件中编写了大量的sql语句。
我们执行sql脚本文件的时候,该文件中所有的sql语句会全部执行!
批量的执行SQL语句,可以使用sql脚本文件。

  • mysql> source D:\course\03-MySQL\document\vip.sql
    你在实际的工作中,第一天到了公司,项目经理会给你一个xxx.sql文件,你执行这个脚本文件,你电脑上的数据库数据就有了!

0.5数据库和表的导入导出

数据导出?
	注意:在windows的dos命令窗口中:
		mysqldump bjpowernode>D:\bjpowernode.sql -uroot -p123456
	可以导出指定的表吗?
		mysqldump bjpowernode emp>D:\bjpowernode.sql -uroot -p123456

数据导入?
	注意:需要先登录到mysql数据库服务器上。
	然后创建数据库:create database bjpowernode;
	使用数据库:use bjpowernode
	然后初始化数据库:source D:\bjpowernode.sql

1.数据库操作

show databases; 查看mysql中有哪些数据库

use test; 表示正在使用一个名字叫做test的数据库。

create database db01; 创建数据库

show tables; 查看某个数据库下有哪些表

select version(); 查看mysql数据库的版本号

select database(); 查看当前使用的是哪个数据库

\c 用来终止一条命令的输入。

2.建表操作

2.1创建一个表create

学号、姓名、年龄、性别、邮箱地址
	create table t_student(
		no int,
		name varchar(32),
		sex char(1),
		age int(3),
		email varchar(255)
	);

2.2删除一个表drop

	drop table t_student; // 当这张表不存在的时候会报错!
	// 如果这张表存在的话,删除
	drop table if exists t_student;
  • 对表结构的修改需要使用:alter属于DDL语句
  • desc t_student 查看表结构

2.3插入数据insert

  • insert into 表名(字段名1,字段名2,字段名3…) values(值1,值2,值3);
insert into t_student(no,name,sex,age,email)
	values(1,'zhangsan','m',20,'zhangsan@123.com');
insert into t_student(email,name,sex,age,no)
	values('lisi@123.com','lisi','f',20,2);
insert into t_student(no) values(3);
//省略字段名
insert into t_student values(2, 'lisi', 'f', 20, 'lisi@123.com');
  • insert语句但凡是执行成功了,那么必然会多一条记录。没有给其它字段指定值的话,默认值是NULL。

一次插入多条数据

  • insert into t_user(字段名1,字段名2) values(),(),(),();
insert into t_user(id,name,birth,create_time) values
		(1,'zs','1980-10-11',now()), 
		(2,'lisi','1981-10-11',now()),
		(3,'wangwu','1982-10-11',now());

2.4修改数据update

  • update 表名 set 字段名1=值1,字段名2=值2,字段名3=值3… where 条件;

  • 没有条件限制会导致所有数据全部更新。

update t_user set name = 'jack', birth = '2000-10-11' where id = 2;

update t_user set name = 'jack', birth = '2000-10-11', create_time = now() where id = 2;

2.5删除数据

delete语句删除数据的原理?(delete属于DML语句!!!)

  • 表中的数据被删除了,但是这个数据在硬盘上的真实存储空间不会被释放!!!
  • 这种删除缺点是:删除效率比较低。
  • 这种删除优点是:支持回滚,后悔了可以再恢复数据!!!

truncate语句删除数据的原理?

  • 这种删除效率比较高,表被一次截断,物理删除。
  • 这种删除缺点:不支持回滚。
  • 这种删除优点:快速。
2.5.1delete
  • delete from 表名 where 条件;

  • 没有条件,整张表的数据会全部删除!

  • delete from t_user where id = 2;

2.5.2truncate
  • truncate table dept_bak; (这种操作属于DDL操作。)

下列演示内容所用表

emp 员工表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JWQrH8lT-1638966502115)(MYSQL.assets/image-20210916200546681-16317939521161.png)]

salgarde 工资等级表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Hg5E1Kq-1638966502123)(MYSQL.assets/image-20210916200651226-16317940225032.png)]

dept 部门表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1dgwKTYj-1638966502124)(MYSQL.assets/image-20210916200740955-16317940622233.png)]

3.基础增删改

3.单表查询

3.1基础条件查询

  • select 字段1,字段2,字段3… from 表名 where 条件;

= 等于

查询薪资等于800的员工姓名和编号?
		select empno,ename from emp where sal = 800;
	查询SMITH的编号和薪资?
		select empno,sal from emp where ename = 'SMITH'; //字符串使用单引号

<>或!= 不等于

查询薪资不等于800的员工姓名和编号?
	select empno,ename from emp where sal != 800;
	select empno,ename from emp where sal <> 800; // 小于号和大于号组成的不等号

< 小于 <= 小于等于

查询薪资小于等于3000的员工姓名和编号?
		select empno,ename,sal from emp where sal <= 3000;

(>)大于 ** ** (>=) 大于等于

查询薪资大于等于3000的员工姓名和编号?
select empno,ename,sal from emp where sal >= 3000;

betweenand. 两个值之间, 等同于 >= and <=
查询薪资在24503000之间的员工信息?包括24503000
	第一种方式:>= and <=and是并且的意思。)
		select empno,ename,sal from emp where sal >= 2450 and sal <= 3000;	

is null 为 null(is not null 不为空)

查询哪些员工的津贴/补助为null?
		mysql> select empno,ename,sal,comm from emp where comm = null;

查询哪些员工的津贴/补助不为nullselect empno,ename,sal,comm from emp where comm is not null;

and 并且 or 或者

select  * from emp where sal > 2500 and (deptno = 10 or deptno = 20);

andor同时出现,and优先级较高。如果想让or先执行,需要加“小括号”,以后在开发中,如果不确定优先级,就加小括号就行了。

in 包含,相当于多个 or (not in 不在这个范围中)

查询工作岗位是MANAGER和SALESMAN的员工?
select empno,ename,job from emp where job = 'MANAGER' or job = 'SALESMAN';
select empno,ename,job from emp where job in('MANAGER', 'SALESMAN');

not 可以取非,主要用在 is 或 in 中

is null
is not null
in
not in

like

称为模糊查询,支持%或下划线匹配

  • %匹配任意多个字符
  • 下划线:任意一个字符。
  • (%是一个特殊的符号,_ 也是一个特殊符号)

找出名字中含有O的?
	mysql> select ename from emp where ename like '%O%';

找出名字中有“_”的?
	select name from t_student where name like '%_%'; //这样不行。

	mysql> select name from t_student where name like '%\_%'; // \转义字符。

distinct

  • 把查询结果去除重复记录【distinct】

  • distinct只能出现在所有字段的最前方。

  • distinct出现在job,deptno两个字段之前,表示两个字段联合起来去重。

  • select distinct job from emp;

  • select distinct job,deptno from emp;

3.2排序

查询所有员工薪资,排序?

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

指定降序:desc

  • select ename,sal from emp order by sal desc;
查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,
	再按照名字升序排列。
	select 
		ename,sal
	from
		emp
	order by
		sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。

3.3分页

  • limit作用:将查询结果集的一部分取出来。通常使用在分页查询当中。
    • 完整用法:limit startIndex, length startIndex是起始下标,length是长度。
    • 起始下标从0开始。
    • 缺省用法:limit 5; 这是取前5.

按照薪资降序,取出排名在前5名的员工?

select 
		ename,sal
	from
		emp
	order by 
		sal desc
	limit 5; //取前5	limit 0,5;
mysql当中limitorder by之后执行!!!!!!

取出工资排名在[3-5]名的员工?

	select 
		ename,sal
	from
		emp
	order by
		sal desc
	limit
		2, 3;
2表示起始位置从下标2开始,就是第三条记录。
3表示长度。
  • 每页显示3条记录

    • 第1页:limit 0,3 [0 1 2]
    • 第2页:limit 3,3 [3 4 5]
    • 第3页:limit 6,3 [6 7 8]
  • 每页显示pageSize条记录

    • 第pageNo页:limit (pageNo - 1) * pageSize , pageSize

4.函数

4.1单行处理函数

  • 单行处理函数的特点:一个输入对应一个输出。
    • 和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应1个输出!)
lower 转换小写
	mysql> select lower(ename) as ename from emp;
upper 转换大写
		mysql> select * from t_student;
substr 取子串(substr( 被截取的字符串, 起始下标,截取的长度)select substr(ename, 1, 1) as ename from emp;
		注意:起始下标从1开始,没有0.
		找出员工名字第一个字母是A的员工信息?
			第一种方式:模糊查询
				select
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小念i

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

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

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

打赏作者

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

抵扣说明:

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

余额充值