文章目录

  • 一、数据库概述
    • 1.1 数据库简介
    • 1.2 数据库相关概念
  • 二、SQL语言
    • 2.1 SQL语法要求
    • 2.2 语句分类
    • 2.3 DDL
    • 2.4 DML
    • 2.5 DQL
      • 2.5.1 基础查询
      • 2.5.2 条件查询
      • 2.5.3 排序查询
      • 2.5.4 函数
      • 2.5.5 笛卡尔乘积
      • 2.5.6 sql92 和 sql99 语法
      • 2.5.7 子查询
      • 2.5.8 分页查询
      • 2.5.9 合并查询(联合查询)
  • 三、事务

一、数据库概述

1.1 数据库简介

什么是数据库?

数据库是持久化数据的一种介质,可以理解成用来存储和管理数据的仓库!
持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。持久化的大多数时候是将内存中的数据存储在数据库中,当然也可以存储在磁盘文件、XML数据文件中。

为什么要使用数据库?

  • 可将数据持久化到硬盘
  • 可存储大量数据
  • 方便检索
  • 保证数据的一致性、完整性
  • 安全,可共享
  • 通过组合分析,可以产生新数据

1.2 数据库相关概念

DB
数据库(database ):存储数据的“仓库”。它保存了一系列有组织的数据。

DBMS
数据库管理系统( Database Management System)。数据库是通过DBMS 创建和操作的容器

DBMS分为两类:

  • 基于共享文件系统的DBMSAccess
  • 基于客户机——服务器的DBMSMySQLOracleSqlServer

SQL
结构化查询语言( Structure Query Language ):专门用来与数据库通信的语言

登录 MySQLmysql -u root -p root (-h localhost)

二、SQL语言

SQLStructured Query Language)是“结构化查询语言”,它是对关系型数据库的操作语言。它可以应用到所有关系型数据库中,例如:MySQLOracleSQL Server等。SQL常见标准有:sql92sql99

2.1 SQL语法要求

  • SQL语句可以单行或多行书写,以分号结尾
  • 可以用空格和缩进来来增强语句的可读性
  • 关键字不区别大小写,建议使用大写

2.2 语句分类

  • DDLData Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;
  • DMLData Manipulation Language):数据操作语言,用来定义数据库记录(数据);
  • DCLData Control Language):数据控制语言,用来定义访问权限和安全级别;
  • DQLData Query Language):数据查询语言,用来查询记录(数据)。

2.3 DDL

库的管理:

创建库:create database [if not exists] 库名
删除库 :drop database [if exists] 库名

表的管理:

① 创建表

create table [if not exists]表名(
字段名 数据类型 [约束] auto_increment,--设置自增长列
字段名 数据类型    [约束],
...
);

② 修改表

alter table 表名 [change|modify|drop|add] column 字段名 字段类型;

修改表名alter table 表名 rename to 新表名;

修改列名alter table 表名 change column 列名 新列名 新数据类型

修改字段类型alter table 表名 modify column 列名 新数据类型

添加新列alter table 表名 add column 列名 数据类型

③ 删除表

drop table if exists 表名

④ 复制表

  • 仅复制表结构:create table 新表名 like 表名
  • 复制表结构+数据:creat table 新表名 select * from 表名
  • 仅复制表中的某些列结构
create table 新表名
select 列名,列名from 表名 where 0

2.4 DML

insert:

① 插入单行

insert into 表名(字段名,字段名,字段名...)
values(值1,值2,值3...);

② 插入多行
方式一:

insert into 表名(字段名,字段名,字段名...)
values(值1,值2,值3...),(值1,值2,值3...)...;

方式二:

insert into 表名(字段名,字段名,字段名...)
select * from 表名

update:

① 单表修改

update 表名 set 字段名 = 新值,字段名=新值 where 条件

② 多表修改

#sql92

update 表名1, 表名2 set 表名1.字段名 = 新值, 表名2.字段名 = 新值 where 条件

#sql99【推荐】

update 表名1 join 表名2
on 表关系
set 表名1.字段名 = 新值, 表名2.字段名 = 新值
where 条件

delete:

① 单表删除

delete  from 表 where 条件;

② 多表级联删除

delete  表1,表2 from 表1 别名,表2 别名 where 连接条件 and 筛选条件;

③ truncate

truncate table 表

deletetruncate的对比:

  1. delete可以添加where条件;truncate不可以添加where条件
  2. truncate效率较高
  3. delete删除后,返回受影响的行数;truncate删除后,没有返回受影响的行数
  4. delete删除带自增长列的表,再插入时,自增长列的值从断点处开始新增;truncate删除带自增长列的表,再插入时,自增长列的值从1开始新增
  5. delete支持事务的回滚;truncate不支持事务的回滚
  6. delete属于DMLtruncate属于DDL

2.5 DQL

2.5.1 基础查询

select 查询列表 from 表名
  • 查询的结果集是一个虚拟表,并没有真实存在
  • 查询列表支持常量、字段(列)、表达式、函数(方法)等
  • 去重:distinct
  • 起别名:as或空格
  • 常见函数: database()version()user()ifnull()concat()DESC

2.5.2 条件查询

--sql语句执行顺序如下
select 查询列表--3
from 表名   --1
where 条件表达式;--2

条件表达式的写法:

  • 关系表达式:><>=<==<>!=
  • 逻辑表达式:andornot
  • 模糊查询:likebetween andinis null

2.5.3 排序查询

select 查询列表--3
from 表名--1
where 条件--2
order by 排序列表 asc|desc;--4
  • asc代表的是升序,默认;desc代表的是降序
  • 排序列表支持单个字段、表达式、函数、别名,也支持以上的组合
  • order by子句一般放在查询语句的最后!

2.5.4 函数

① 数学函数:

  1. abs:绝对值
  2. mod:取余
  3. floor:向下取整
  4. truncate:截断
  5. ceil:向上取整
  6. round:四舍五入
  7. rand:随机数

注意:

sql中的round支持两个重载,规则:先按绝对值四舍五入,然后再添加正负。round(x):只保留整数部位;round(x,d):保留小数点后一位。

javaMath.round只支持一个参数,规则:Math.round(x)等价于Math.floor(x+0.5) Math.round(x)

② 字符函数

  1. upper:转换成大写
  2. lower:转换成小写
  3. length:获取字节长度
  4. char_length:获取字符长度
  5. substr:截取子串
  6. trim:去掉前后空格或字符
  7. concat:拼接
  8. strcmp:比较两个字符串大小(-1,0,1)
  9. instr:获取子串第一次出现的索引,如果找不到,返回0;格式:instr(字符串,子串)。注意:sql中起始索引,一般从1开始!

③ 日期函数

  1. now:当前日期+时间
  2. curdate:当前日期
  3. curtime:当前时间
  4. datediff:两个日期天数差
  5. date_format:日期转字符
  6. str_to_date:字符转日期

④ 流程控制函数

  1. if函数:格式:if(条件,结果1,结果2):类似于三目运算符
  2. case结构

⑤ 聚合函数(分组函数)

本质上就是一种函数,语法:select 函数名(实参列表);

单行函数(常见函数):有几行,最终有几个结果;
分组函数(聚合函数):一组中有多行,但最终一个结果,一般用作统计。

分组函数:

  1. sum(参数):求和
  2. avg(参数):平均
  3. max(参数):求最大值
  4. min(参数):求最小值
  5. count(参数):统计个数
  6. count(*):回在给定的选择中(当前条件下的表)

⑥ 分组查询

select 查询列表--4
from 表名--1
where 分组前条件--2
group by 分组的字段--3
having 分组后条件--5
order by 排序列表--6

特点:

  1. 查询列表往往是:分组函数和分组后的字段。换句话说,和分组函数一同查询的字段,一般就是分组后的字段。
  2. 分组查询的筛选有两种:分组前筛选和分组后筛选
连接关键字 位置 筛选的结果集
分组前筛选 where group by前面 原始表
分组后筛选 having group by后面 分组后的查询结果(虚拟表)
  1. 分组查询可以通过单个字段,也可以通过多个字段,中间用逗号隔开

⑦ 连接查询

查询语句中涉及到的字段来自于多张表,将这种查询称为多表连接查询

select 查询列表 from 表名1,表名2;

2.5.5 笛卡尔乘积

现象:表1和表2连接,结果为两表的完全连接结果,数据不正确。表1m行,表2n行,结果为:m*n

产生原因:没有有效的连接条件

解决办法:添加两个表的连接条件,找到两个表的关联关系。

2.5.6 sql92 和 sql99 语法

连接查询分类 支持的连接
sql92语法 内连接:1.等值连接 2.非等值连接 3.自连接 外连接(支持的不太好,MySQL压根不支持)
sql99语法 内连接 等值连接 非等值连接 自连接 外连接 左外连接 右外连接 全外连接(mysql不支持)

① Sql92 语法

内连接

select 查询列表
from 表名1 别名1,表名2 别名2
where 别名1.关联列 = 别名2.关联列
and 筛选条件
group by 分组字段
having 分组后的筛选条件
order by 排序;
  • 多表连接时,一般为表起别名,提高语句的简洁性
  • 表是否可以调换顺序,不分主次表!
  • 内连接查询,查询的结果为两个表的交集部分
  • n表连接,至少需要n-1个连接条件

自连接

案例:查询每个员工的员工名和领导名

SELECT 员工表.last_name,领导表.last_name
FROM employees 员工表,employees 领导表
WHERE 员工表.manager_id = 领导表.employee_id

② Sql99 语法

内连接

select 查询列表
from 表1 别名
inner join 表2 别名 on 连接条件
inner join 表3 别名 on 连接条件
【where 筛选条件】
【group by 分组】
【having 分组后筛选】
【order by 排序列表】

sql99语法,使用join连接,并且通过on添加连接条件,语义性更强!连接条件和筛选条件进行了分离,提高维护性和分离性!

外连接

select 查询列表
from 表 别名1
left|right|full 【outer】 join 表 别名2 on 别名1.关联列= 别名2.关联列
left|right|full 【outer】 join 表 别名3 on 别名1.关联列= 别名3.关联列
WHERE 筛选条件
GROUP BY 分组
HAVING 分组后条件
ORDER BY 条件;

查询主表中的所有记录,如果从表有和主表匹配的信息,则显示匹配信息,否则显示null。一般适合查询主表中有,但从表中没有的记录

外连接的结果=内连接结果+主表有从表没有的!

2.5.7 子查询

出现在其他语句内部的select语句,称为子查询。

① 单行子查询

注意:单行子查询的结果肯定是一行一列,不能是多行,也不能是空值

案例:返回公司工资最少的员工的姓名

select name from emp
where salary = ( select min(salary) from emp);

② 多行子查询

常用关键字:

  • innot in:判断某个字段是否属于子查询结果的某个值
  • any/some:一般搭配条件运算符使用 ,例:where sal>any(1,2,3,4)
  • all: 一般搭配条件运算符使用 ,例:where sal > all(1,2,3,4)

案例:返回其它部门中比job_idit部门任一工资低的员工的员姓名

select name from emp
where salary < ANY(select salary
from emp where job_id = it')
group by department_id;

2.5.8 分页查询

实际的开发时,一页往往显示不全所有数据,则用到了分页查询

select 查询列表--6
from 表--1
join 表 --2
on 连接条件--3
where 筛选--4
group by 分组--5
having 分组后筛选--7
order by 排序列表--8
limit 【起始条目数,】查询的条目数; --9

起始条目数可以省略,默认从1开始。

Web中常用查询当前页数据:

select * from 表名 limit (page-1)*size,size;

2.5.9 合并查询(联合查询)

一个结果集的查询的数据来自于多张表。但多张表之间没有任何关联关系。

select 查询列表 from 表1 union
select 查询列表 from 表2 union
....
select 查询列表 from 表n
  • 要求实现union的多条查询语句的查询列数必须一致,列名无要求,列的意义无要求,但建议一致
  • union默认实现的是去重查询。如果不想去重,则使用union all

三、事务

一组具有一定特点的sql语句,称为事务。要么全部执行,要么全部不执行。

ACID四大特性:

  • A原子性:一个事务不可再分割,要不全部执行,要不全部失败
  • C一致性:一个事务执行后,将数据从一种状态切换到另一种状态。保证数据是准确
  • I隔离性:一个事务的执行,不应该受其他事务的影响
  • D持久性:一个事务的执行,将持久化到硬盘

事务分类:

  • 隐式事务:事务没有明显的开启和结束的标记。比如:一条update、一条delete、一条insert语句
  • 显式事务:事务具有明显的开启和结束的标记
# 步骤1:开启事务
# 取消DML语句自动提交功能
set autocommit = 0;
start transaction;# 步骤2:编写事务的sql语句
update account set balance = 5000 where username = '赵丽颖';
update account set balance = 15000 where username = '冯绍峰';# 步骤3:结束事务
commit;--提交rollback;--回滚# Tips: 事务的语句只支持insert、update、delete、select。

MySQL数据库入门学习相关推荐

  1. linux启动mysql_【数据库】MySQL数据库入门学习

    Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一. ...

  2. MySQL数据库入门学习教程(mysql基础+高级)

    今天这篇文章将详细列出Mysql的学习流程,这是学习mysql数据库前你要了解的~~~ 大部分的小伙伴自己在网上找mysql资料.还有数据库的视频教程,但是都过于碎片化,没有体系,导致大家不知道如何系 ...

  3. 《Python网络爬虫——从入门到实践》第六章将数据存储至MySQL数据库的学习心得与总结(出错与纠正方法)

    <Python网络爬虫--从入门到实践>第六章将数据存储至MySQL数据库的学习心得与总结(出错与纠正方法) 作为刚开始入门python的小白,对大数据,网络爬虫比较感兴趣.完全是自我修炼 ...

  4. MySQL数据库入门到高薪培训教程(从MySQL 5.7 到 MySQL 8.0)

    一.MySQL数据库入门到高薪培训视频教程(从MySQL5.7到MySQL8.0) 本套MySQL学习教程地址: https://edu.51cto.com/course/18034.html 为满足 ...

  5. pythonmysql数据分析_Python操作Mysql数据库入门——数据导入pandas(数据分析准备)...

    原标题:Python操作Mysql数据库入门--数据导入pandas(数据分析准备) 欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习.问答.求 ...

  6. 【MySQL数据库入门】自关联

    文章目录 1. 自关联定义 2. 自关联举例 2.1. 需求 2.2. 设计 2.3. 简化 2.4. 结论 3. MySQL实现 3.1. 创建数据表 3.2. 批量插入数据 3.3. 演练 1. ...

  7. MySQL数据库入门-新手常见问题答疑

    1.安装不上MySQL 8.0 大多数在Windows安装不上MySQL 8.0的同学,都是因为缺少依赖包,没有安装Visual C++ 2015 Redistributable Package(或更 ...

  8. B站《一天学会 MySQL 数据库》学习笔记

    B站<一天学会 MySQL 数据库>学习笔记 老司机带我飞 职场十字诀:思考.计划.行动.总结.反思 ​关注他 4 人赞同了该文章 登录和退出MySQL服务器 # 登录MySQL $ my ...

  9. mysql数据库入门教程(11):视图讲解大全

    一.视图的介绍 含义:虚拟表,和普通表一样使用 mysql5.1版本出现的新特性,是通过表动态生成的数据 举例说明什么是视图:假设一个年级有10个班,上面有领导来啦,说要检查舞蹈功底,学校为了应付检查 ...

  10. mysql数据库入门教程(6):数据的增删改

    前面两篇博文介绍了数据库的查询 mysql数据库入门教程(4):查询讲解大全 mysql数据库入门教程(5):多表操作(连接查询,子查询,分页查询,联合查询) 今天介绍下数据库的增删改. 数据库基本操 ...

最新文章

  1. 修改系统density适配
  2. Pandas转pivot, groupby等结果为dataFrame--彻底解决多表头问题
  3. 腾讯、Meta、鲁大师竞相登场,谁能开辟元宇宙社交新思路?
  4. 职业标准体系一般有几个层次划分_全国首个粤菜标准体系规划发布
  5. MFC的固高环形倒立摆GRIP2002实验平台
  6. Taro+react开发(81):props属性
  7. MaxCompute中如何通过logview诊断慢作业
  8. 斑马打印机怎么打印二维码_万能打印机厂家是怎么改良打印机的?
  9. C#开发笔记之07-如何实现交换2个变量的值而不引入中间变量?
  10. 什么值得买发布年货消费报告 预制菜GMV同比增长39.41%
  11. PATH变量,cp,mv,cat,more,less,head,tail命令举例
  12. [转].net cookie版购物车
  13. [Java] 蓝桥杯ADV-92 算法提高 求最大公约数
  14. java ip地址转数字_ip地址与整数相互转换
  15. 移动磁盘故障,如何在Mac修复?
  16. 关了浏览器再开,怎么session还在?
  17. win10关闭防火墙脚本.bat
  18. 国家标准官方下载查看地址
  19. executors与threadPoolExecutor区别
  20. jar文件读取和遍历

热门文章

  1. java程序 登录界面_用java写一个登陆界面代码。
  2. Windows11安装JDK
  3. 史上最详细的sqlmap使用教程
  4. 《暗黑3》是如何设计随机地下城的?
  5. Qt入门使用Qt编写程序详细全过程
  6. 基于wireshark和NetAssist的单机模拟抓TCP包:三次握手、四次挥手、长连接
  7. matlab2015a安装秘钥_MATLAB2015a(2015b)安装教程
  8. c语言爱心代码简单,利用c语言实现简单心形的代码分享
  9. VIM总结之一:VIM编辑器常用命令详解
  10. jdk1.8下载与安装教程