当前位置: 首页 > 编程日记 > 正文

mysql数据库常见进阶使用

  1. 事务
    1)mysql中的工作单元,由一个或者多个sql语句组成,“不成功便成仁”,要么全部执行成功,要么全部执行失败,以此来保证数据的一致性。
    2)事务的回滚:如果事务中的任何一个sql执行失败,ROLLBACK可以进行事务的回滚,将数据恢复到事务执行之前的状态,保证数据的一致性。
    3)前提:mysql存储引擎InnoDB
    4)事务的特征:ACID
    原子性 ATOMICITY
    事务的sql语句不可分割,要么全部成功,要么全部失败。
    一致性 CONSISTENCY
    不管事务执行成功还是失败,数据总是保持一致性的。
    隔离性 ISOLATION
    事务与事务之间是相互隔离的,不相互影响。
    持久性 DURABLITY
    事务一旦提交成功,对于数据的改变是持久性的,不能再进行事务的回滚了。
    5)事务的提交
    COMMIT显示的提交事务。
    隐式的提交事务 DDL,DCL等都可以造成事务的隐式提交。
    6)事务的操作
    BEGIN
    COMMIT
    ROLLBACK
    SAVEPOINT
    7)事务的自动提交模式
    mysql中的事务是自动提交的,即每一个sql语句后默认加COMMIT语句。
    查看mysql的事务自动提交模式:
SHOW VARIABLES  LIKE 'autocommit'

修改mysql的自动提交模式

SET AUTOCOMMIT=1   表示开启
SET AUTOCOMMIT=0   表示关闭
  1. DQL
    SELECT 语句查询表中的记录
    1)简单查询
SELECT 字段1,字段2,....,字段n  FROM 表名  WHERE子句

其中:
如果查询表中所有的字段,可以使用通配符*表示。
字段后可以加别名:字段 AS 别名,AS可以省略,一般省略。
表名也可以使用AS指定别名。

2)使用运算符处理查询后的字段(不影响表中的原始数据)

+ - * /
SELECT ename, sal+2000 'salary',hiredate FROM emp 查询的工资每人增加2000

3)NULL值
null不是0值,也不是最大值,也不是最小值,是不能确定的值。
null参与算数运算的结果仍是null。
如果想让null参与运算,可以为null指定一个默认值,参与运输,使用COALESCE。

SELECT ename, COALESCE(sal,0)+2000  'salary',hiredate FROM emp

4)去除重复记录 DISTINCT

SELECT   DISTINCT 字段名  FROMWHERE子句
  1. 模糊查询
    1)LIKE 用于字符串字段的模糊查询
    2)% 该符号出现的位置可以被任意个字符替代
WHERE ename  LIKE '王%' 查询姓王的员工

3)该符号所出现的位置,必须有且只能有一个字符。

WHERE ename  LIKE '王_' 比如查询全名为两个字的王姓员工(比如“王菲”)
  1. 排序 ORDER BY
    1)排序是指将查询回来的结果集按照一定的规则进行排序(升序或降序)
    2)ASC 升序(默认) DESC 降序
    3)语法:
ELECT子句 ORDER BY 字段 ASC/DESC

其中:
ORDER BY 的子句必须放在where子句之后。
如果排序的字段里有null值,如果是升序排序,null值的记录在最前面,降序的话,null排在最后。
日期排序,较早的日期,认为是小的数值,靠后的日期,认为是大的数值。
字符串排序,按照A~Z排。
汉字排序,按照字典顺序,如果不是gbk编码,需要使用convert函数转换一下。

SELECT * FROM emp ORDER BY CONVERT(ename USING gbk) DESC

也可以按照多个字段排序

SELECT子句 ORDER BY 字段1 ASC/DESC, 字段2 ASC/DESC
  1. 限制查询回来的结果集的条数
    1)应用场景:分页查询
    2)语法:
SELECT子句  LIMIT  n  n表示获取结果集的前n条记录
SELECT子句   LIMIT   index, length 表示从结果集的第index处开始,取length条记录。index0表示从第一条记录。
  1. 函数
    mysql中提供的功能强大,使用方便的函数,提高开发者在数据管理的查询和操作。

    语法: 函数名(参数列表)

常用函数的分类
1)数学函数
ABS(x) 返回x的绝对值
SQRT(x) 平方根
PI() 圆周率
MOD(x,y) 求x除以y的余数

MOD(4.5,3)   结果是1.5

CEIL(x) 返回大于等于x的最小整数

CEIL(3)  返回3
CEIL(3.3)  返回4

应用场景:不足1按1计算的场景

FLOOR(x) 返回小于等于x的最大整数

FLOOR(3)    3
FLOOR(3.4)  3
FLOOR(-3.4)   -4

应用场景:不足1舍弃的场景

ROUND(x,y) 保留小数y位,四舍五入。

ROUND(23.55,1) 23.6
ROUND(23.55,-1)   20     -1表示保留到十位数

TRUNCATE(x,y) 保留小数y位,后面的截断丢弃,不进行四舍五入

RAND() 产生随机数
应用场景:
随机排序:比如从题库表中随机抽取100道试题

SELECT * FROM  题库表  ORDER BY  RAND()   LIMIT 100

POW(x,y) x的y次方

三角函数

2)字符串函数
CONCAT(str1,str2,…) 字符串拼接
LOWER(str) / LCASE(str) 全部转为小写字母
UPPER(str) / UCASE(str) 全部转为大写字母
LEFT(str,n) / RIGHT(str,n) 返回左侧/右侧长度位n的子串
TRIM(str) 去除字符串首尾的空格
SUBSTRING(str,index,length)
REVERSE(str)

3)日期和时间
CURDATE() / CURRENT_DATE() 当前日期
NOW() 当前年月日时分秒
CURRENT_TIMESTAMP() 当前时间戳
DATE_ADD(hiredate,interval 10 DAY) 入职日期加十天
DATE_SUB
DATE_FORMAT(date, fmt)

SELECT DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%s') FROM DUAL

4)流程函数
CASE
CASE value WHEN 表达式 THEN 结果
ELSE 结果
END

CASE WHEN sal>=3000  THEN '高收入'
ELSE '低收入'
END  'level'

IF
IF(表达式1,表达式2,表达式3)
如果表达式1的值为true,则返回表达式2的值,否则返回表达式3的值。

IFNULL
IFNULL(表达式1,表达2)
如果表达式1不为null,则返回表达式1的值,否则返回表达式2的值
NULLIF
NULLIF(表达式1,表达式2)
如果表达式1=表达式2,那么返回null,否则返回表达式1的值

5)其他函数
VERSION()
USER()
DATABASE()

  1. 三大范式
    1)第一范式
    表中的字段设计的具有原子性,不能再分割。(视具体场景而定)
    2)第二范式
    表中有主键作为唯一标识,其他字段都依赖主键。
    (第二范式说白了就是来拆分表的)
    3)第三范式
    禁止传递依赖 A->B->C

  2. 多表联查
    1)多表联查的根本原因:
    设计数据库遵循三大范式,相关的数据存在多个表中了。
    2)笛卡尔积
    两个表的笛卡尔积,以员工表和部门表为例

SELECT * FROM1,2

笛卡尔积的意义:入职员工和入职部门所有的可能的组合。
表联查过程中的中间结果集。
3)等值查询
SELECT 表1.字段1,表1.字段2,表2.字段1,表2.字段2 FROM 表1 , 表2 WHERE 连接条件

SELECT e.empno, e.ename,d.dname,d.loc  FROM emp  e,dept d  WHERE  e.deptno=d.deptno

n个表的连接条件n -1个
4)非等值连接
查询的多个表之间没有公有的字段作为等值连接的条件
查询员工的姓名、工资及工资等级。(员工信息表与工资等级表之间没有相同的字段,但可以通过员工的工资来判断符合工资等级表中的那个等级的区间来判断)
5)自连接查询
自己与自己连接查询(自身看作两个相同的表进行连接查询)
查询员工及其主管的姓名

SELECT e1.ename '员工名',e2.ename '主管名' FROM emp e1,emp e2 WHERE e1.mgr=e2.empno
  1. SQL 99
    1)笛卡尔积 CROSS JOIN
SELECT * FROM1 CROSS JOIN2

2)自然连接 NATURAL JOIN
前提:两个表中有相同的字段作为连接条件
SELECT 字段 FROM 表1 NATURAL JOIN 表2

SELECT e.ename,d.dname FROM emp e  NATURAL  JOIN dept d

可以使用USING指定连接条件的字段,但是要去掉NATURAL

SELECT e.ename,d.dname FROM emp e  JOIN dept d USING(deptno)

3)ON子句
使用JOIN关键字时,可以使用ON子句指定连接条件。

4)左连接 LEFT JOIN
以join左侧的表作为主表,右侧的作为从表,主表的记录不管是否在从表中能否找到匹配记录,主表所有的记录都显示,没有匹配的字段显示null。

5) 右连接查询 RIGHT JOIN
与左连接查询一样,以join右边的表位主表,左侧的表为从表。

  1. 分组函数
    MAX() / MIN() 返回最大、最小值
    SUM() 返回总和
    AVG() 返回平均值
    COUNT() 返回记录的条数
SELECT COUNT(*) FROM emp 查询员工的总数

注:分组函数排除NULL值

  1. DISTINCT 去除查询结果的重复记录
SELECT DISTINCT deptno FROM emp 从员工信息表中查询部门编号
SELECT COUNT(DISTINCT deptno) FROM emp 查询员工表中有员工的部门的个数
  1. 分组查询
    1)语法
    SELECT 子句 GROUP BY 字段1,字段n
    其中:
    select后所跟的字段,要包含在group by的分组字段中,否则是没有意义的。
    如果select后使用分组函数,分组函数的参数的字段,可以不是groupby 后的字段。
SELECT deptno,AVG(sal) FROM emp GROUP BY deptno 求员工表中的各部门的平均工资
SELECT deptno,job,AVG(sal) FROM emp GROUP BY deptno,job 求每个部门每个岗位的员工的平均工资

2)分组之后的结果的筛选 HAVING子句

SELECT子句 FROMGROUP BY 字段 HAVING子句

HAVING子句是对已经分好组的结果进行筛选。
一般having子句中使用分组函数进行筛选和条件判断。
分组之后的数据,不能用where筛选。(WHERE出现在GROUP BY之前)
3)GROUP BY 使用分组查询中where和having区别
分组查询的select语句中可以同时包含where和having子句。
where在group by之前,having 在group by之后。
where在分组之前对数据进行限制,having是对分组之后的数据进行限制。

  1. 子查询
    1)
    当查询的数据需要用到另一个查询的结果,需要子查询。
    子查询是指select语句,内嵌的select语句,称为子查询,也叫内部查询。
    一般使用小括号,把子查询语句括起来。
    (小技巧:一般可以先把括号内的当作一常量,把框架构建起来,再补充括号)
    子查询可以用在 where子句,from后,having后面。
SELECT ename,sal FROM emp WHERE sal=(SELECT MIN(sal) FROM emp) 查询最低工资的员工姓名和工资

2)单行子查询
返回结果就是一行一列(就是一个数值)
= != > < >= <=

3)多行子查询
子查询结果返回多行
IN 表示符合返回的值之一即可。
ANY 与子查询的结果中的一个相符即可。
>ANY 表示大于结果中的最小值即可
<ANY 表示小于结果中的最大值即可
=ANY 相当与IN
ALL 与子查询返回的结果中的任意一个相符
>ALL 表示大于返回结果的最大值
<ALL 小于结果的最小值
=ALL 等于所有的值,无意义。
注:如果子查询的结果有null值,不使用NOT IN

4)子查询用在FROM后
将子查询结果,当作一个临时表

出处:东软Java实训

相关文章:

[转]web打印实现方案 Lodop6.034 使用方法总结

本文转自&#xff1a;https://www.cnblogs.com/tiger8000/archive/2011/09/19/2181365.html 官文下载&#xff1a; http://mtsoftware.v053.gokao.net/download.html 本地 Lodop6.034 版本下载&#xff1a;/Files/tiger8000/Lodop6.034.rar 假设你的 lodop 打印控件放在你项目的…

图片的另一种展现—将后台图片编码直接展现为图片

1、应用场景 开发过程中&#xff0c;遇到这样的需求&#xff1a;需要将服务器上的图片展现在页面上&#xff0c;但是图片所在服务器不是对外的&#xff0c;图片所在服务器与应用服务器也不在同一台机器上&#xff0c;这时候就需要在开发中先将图片读出来&#xff0c;返回给应用…

电子学会青少年编程等级考试Python一级题目解析12

Python一级题目解析 1、题目&#xff08;2021.03&#xff09; 写一个计算长方形面积的程序&#xff0c;并对每行代码进行相应的注释&#xff0c;要求如下&#xff1a; &#xff08;1&#xff09;采用多行注释&#xff0c;说明程序的功能&#xff08;如下&#xff09;&#x…

Swing基础知识(更新中)

Swing是什么 做桌面应用程序的界面&#xff0c;GUI。 组件和容器&#xff1a;容器是特殊的组件。 布局管理器&#xff1a; 一般放中间容器&#xff0c;用来控制容器中组件的排列方式。 常见&#xff1a; ① FlowLayout 流布局(默认布局) 左上是起点&#xff0c;按组件加入容…

timesten 修改最大连接数

修改完/var/Timesten/sys.odbc.ini里面的connections之后 重启TT&#xff1a;ttdaemonadmin -restart 报错&#xff1a;15019: Only the instance admin may alter the Connections attribute Command> Command> connect dsn的名称;15019: Only the instance admin may a…

青少年编程竞赛交流群第050次活动录播

背景介绍 把电子学会的青少年编程能力等级测评作为游戏的关卡&#xff0c;带着小朋友们升级打怪&#xff0c;这个想法来自于 我从邵慧宁身上得到的启发。 升级打怪&#xff1a; 电子学会考评中心&#xff1a;http://www.qceit.org.cn/bos/default.html 知识内容&#xff1a…

JDBC连接mysql数据的7个步骤(讲解+源码)

步骤 源码 DBUtils类 package com.csu.db;import java.sql.*;public class DBUtils {public static Connection getConnection(){try {//[1/7] 加载JDBC的驱动Class.forName("com.mysql.cj.jdbc.Driver");//[2/7] 定义url连接参数String url "jdbc:mysql://l…

UML:概要设计,用什么画我的类图?

背景 做过需求之后&#xff0c;很少使用 UML 画概要设计&#xff0c;这几天尝试的用了几个工具&#xff0c;最总还是选择了 VisualStudio。 Edraw 详细信息很难编辑&#xff0c;如&#xff1a;签名。 Viso 添加成员太麻烦了。 VisualStudio 图形不支持着色。 备注 使用 VisualS…

RN Exception: Before building your project, you need to accept the license agreements and comp le...

异常 * What went wrong: A problem occurred configuring project :app. > You have not accepted the license agreements of the following SDK components: [Android SDK Platform 23, Android SDK Build-Tools 23.0.1]. Before building your project, you need to acc…

【组队学习】【35期】李宏毅机器学习(含深度学习)

李宏毅机器学习&#xff08;含深度学习&#xff09; 航路开辟者&#xff1a;王茂霖、陈安东&#xff0c;刘峥嵘&#xff0c;李玲领航员&#xff1a;梁家晖航海士&#xff1a;程浩伟、周小要、吴昌广 基本信息 开源内容&#xff1a;https://linklearner.com/datawhale-homepa…

git关键原理简介

集中化版本控制 缺点&#xff1a;1中央仓库得相当稳定&#xff0c;出问题可能每个人那里都没完整备份 2 只能在线使用&#xff08;今天网络已经不是问题&#xff09; 分布式版本控制 改进&#xff1a;每台客户机在本地都维护一份仓库 主要特点 保存数据和文件的主要方式 每个…

项目管理和缺陷跟踪工具Redmine

官网&#xff1a; http://www.redmine.org/ http://demo.redmine.org/ 下载&#xff1a; http://www.redmine.org/projects/redmine/wiki/Download Redmine 是一个开源的、基于Web的项目管理和缺陷跟踪工具。它用日历和甘特图辅助项目及进度可视化显示。同时它又支持多项目管理…

Redis (二)_ jedis的使用

Jedis 是 Redis 官方首选的 Java 客户端开发包 虚拟机设置 查看虚拟机的ipifconfig 将虚拟机的6379端口打开#运行下面的命令 如果是新建的一个新的 文件&#xff0c;你需要先安装 iptables&#xff0c;再打开 vim /etc/sysconfig/iptables## 安装命令 yum install -y iptables-…

【组队学习】【35期】数据可视化(Matplotlib)

数据可视化&#xff08;Matplotlib&#xff09; 航路开辟者&#xff1a;杨剑砺、杨煜、耿远昊、李运佳、居凤霞领航员&#xff1a;武帅航海士&#xff1a;叶庭云、李显、郭棉昇 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/fantastic-matplotlib开源内…

解决日常bug的正确姿势

bug的错误分两种情况&#xff1a; ① 控制台报错->可以定位到错误位置(比较想看到的) ② 控制台不报错却达不到想要的功能->设计代码的逻辑有问题 问题解决方案的优先级(由高到低) ① 自己解决 a. 分析控制台的错误信息描述->定位问题的代码行数->分析该行代码前后…

02-NLP-01-python正则表达式

Python正则表达式 by 寒小阳(hanxiaoyang.mlgmail.com) 正则表达式是处理字符串的强大工具&#xff0c;拥有独特的语法和独立的处理引擎。 我们在大文本中匹配字符串时&#xff0c;有些情况用str自带的函数(比如find, in)可能可以完成&#xff0c;有些情况会稍稍复杂一些(比如说…

【组队学习】【35期】SQL编程语言

SQL编程语言 航路开辟者&#xff1a;王复振、杨煜、闫钟峰、杨梦迪、苏鹏领航员&#xff1a;庞永生航海士&#xff1a;王彦淳、木卷、丁一超 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/wonderful-sql开源内容&#xff1a;https://hub.fastgit.org/da…

神经网络基础知识梳理

神经网络是什么 说明&#xff1a; 我们在机器学习中谈论的神经网络是指“神经网络学习”&#xff0c;即机器学习与神经网络这两个学科领域的交叉部分。 生物学意义上神经网络的最基本成分是神经元&#xff0c;计算机科学中的神经网络的最基本成分是神经元模型。 最广泛的一种…

Xcode 5 Error CertUIFramework.axbundle

Xcode 5 新建项目&#xff0c;运行总是出现错误&#xff1a; Cannot find executable forCFBundle0x8a7c7a0</Applications/Xcode.app/Contents/Developer/Platforms/ iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/System/Library/AccessibilityBundle…

【组队学习】【35期】深入浅出Pytorch

深入浅出Pytorch 航路开辟者&#xff1a;李嘉骐、牛志康、刘洋、陈安东领航员&#xff1a;朱松青航海士&#xff1a;管柯琴、宋泽山、林旭升 基本信息 开源内容&#xff1a;https://github.com/datawhalechina/thorough-pytorch内容属性&#xff1a;深度学习&#xff08;实践…

环形动画加载视图AnimatedCircleLoadingView​​​​​​​

2019独角兽企业重金招聘Python工程师标准>>> 环形动画加载视图AnimatedCircleLoadingView AnimatedCircleLoadingView是基于Android手表动画android-watch-loading-animation衍生出来的动画加载视图。该视图采用循环的环形动画显示加载进度。同时&#xff0c;开发者…

软件缺陷预测的两种定义

软件缺陷预测是根据软件产品中提取的度量信息和已经发现的缺陷来尽早地预测软件可能还存在的缺陷&#xff0c;基于预测结果可合理分配测试和验证资源。 软件缺陷预测作为实证软件工程的一个重要方向&#xff0c;通过对软件开发过程中积累的历史数据进行挖掘与分析&#xff0c;…

php函数:register_shutdown_function

php中register_shutdown_function函数用法详解&#xff1a; 由于程序出现一些不可预知的问题&#xff0c;给用户显示一个致命错误,又或者一个空白页(在display_errors设为off的情况下)&#xff0c;不是一个很好的处理方法 . PHP中有一个叫做 register_shutdown_function 的函数…

使用IDEA新建springboot工程

2019独角兽企业重金招聘Python工程师标准>>> 说明&#xff1a;因为习惯eclipse的workspace的结构&#xff0c;所以我提前新建了一个父工程&#xff0c;只是一个简单的maven工程&#xff0c;当做工作空间&#xff0c;下面的项目就是 module&#xff08;其实和项目一样…

【青少年编程竞赛交流】03月份微信图文索引

03月份微信图文索引 由于“组队学习”这个公众号的功能主要是组织Datawhale社群中的学习者们每个月的组队学习&#xff0c;所以&#xff0c;我另外新建了这个微信公众号“青少年编程竞赛交流”&#xff0c;在这个公众号上分享有关青少年编程方面的知识&#xff0c;带小朋友们参…

使用LaTeX排版如何方便地引用多篇参考文献(不使用插件)

本文是一篇适合排版参考文献较多的论文的教程&#xff0c;目的如题。 环境&#xff1a;TexStudio 在文献管理工具中将题录导出为BibTex 打开这个文件&#xff0c;尽管是.txt结尾&#xff0c;内部格式应当是这样的 注意红框的内容&#xff0c;一会要用到。 在TexStudio里面新…

详解亚马逊:物流为何是电商命脉

在物流环节上&#xff0c;亚马逊(AMZN)主要涉及物流中心运营&#xff0c;商品配送环节主要采取和第三方快递公司合作完成。那么&#xff0c;亚马逊物流促销活 动反映在财务收支上的结果又如何&#xff1f;根据年报数据&#xff0c;2011年亚马逊收到来自用户支付的运费总计15.5亿…

四月青少年编程组队学习(图形化四级)Task01

电子学会 软件编程&#xff08;图形化&#xff09;四级 组队学习 试题来源&#xff1a; 青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&#xff09;【2019.12】青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&am…

jmeter启动警告项解决方案

今天安装并且配置了jmeter压力测试软件&#xff0c;然后配置完了环境变量&#xff0c;但是在cmd命令行中输入jmeter --version命名&#xff0c;发现在会有警告信息&#xff0c;如图解决这个警告信息的方法&#xff1a;1、首先进入注册表中2、然后找到HKEY_LOCAL_MACHINESOFTWAR…

初识软件体系结构(1-4课时)

前四个课时的内容是“软件体系结构概述”。 LW老师的讲课带劲&#xff0c;逻辑性强&#xff0c;也接地气&#xff0c;节奏不快不慢&#xff0c;很nice&#xff5e; 软件架构师 这门课最对口的职业是软件架构师&#xff0c;软件架构师是工作在项目经理和程序员之间&#xff0c;既…