mysql笔记

目录

1、root用户密码忘记

2、SQL的分类

2.1、DQL数据查询语言

前言

2.1.1、设置别名

2.1.2、去除重复行

2.1.3、空值参与运算

2.1.4、着重号

2.1.5、显示表结构

2.1.6、算数运算符

2.1.7、比较运算符

2.1.8、逻辑运算符

2.1.9、位运算符

2.1.10、 模糊查询

2.1.11、分页

2.1.12、 多表查询

2.1.12.1、多表查询的分类

2.1.12.2、笛卡尔积

2.1.12.3、join实现内、外连接

2.1.13、聚合函数

2.1.13.1、group by

2.1.13.2 having

2.1.14、子查询

2.2、DDL数据定义语言

2.2.1、 create、show...

2.2.2、alter、drop、rename..

2.3、DML数据操作语言

2.4、DCL数据控制语言


1、root用户密码忘记

  • 不适用于所有版本,新版本不能实现重置。这边建议直接重装。

重置一下密码的操作:

1、通过任务管理器或者服务管理,关掉MySQL服务进程。

2、通过命令行+特殊参数开启mysql;

mysqld --defaults-file="D:\MySql\data\my.ini" --skip-grant-tables

3、此时,mysql服务进程已经打开,并且不需要权限检查。

4、mysql -uroot 无密码登录服务器。另启动一个客户端进行。

5、修改权限表

use mysql;

update user set authentication_string=password(新密码)where user='root' and Host='localhost';

flush privileges

6、通过任务管理器,关掉mysql服务进程。

7、在此通过任务管理器,打开mysql服务。

8、即可用修改后的新密码登录。

2、SQL的分类

在一些地方会把select语句看作一类语言,DQL,因为他的使用频率非常高。

2.1、DQL数据查询语言

前言

  • select

SELECT * FROM table_name;

在这里 * 表示的是查询的是所有字段。

若是不需要查询所有的,那就在星号的位置改为所需要查询的字段名,多个的话用逗号隔开。

SELECT 字段1, 字段2,... FROM table_name;

  • 单引号

mysql中查询的需要表示字符串的时候,用单引号引起来表示字符串,虽然双引号也不会错,但是在标准中是单引号。

  • 大小写

虽然在语句里面写的时候大小写不敏感,比如字段名、表名、关键字、以及单引号括起来的字符串。

但是这是因为mysql不严谨的原因,在其它数据库中这方面是很严谨的,所以形成了一套使用上的规范,关键字全大写,表名、字段名等全部小写。

2.1.1、设置别名

就是在查询的时候将结果集的字段名改个名字,又称别名。

  • 使用 AS

SELECT name AS new_name

FROM table_name;

  • 省略 AS 使用 空格

SELECT name new_name

FROM table_name;

  • 使用双引号

虽然使用单引号也可以,在标准中是双引号,单引号的话会显得很业余。

SELECT name "new_name"

FROM table_name;

第三种表面上看相比于第二中会比较多余,但是第三种情况适用于别名中有空格的情况。

2.1.2、去除重复行

SELECT DISTINCT id

FROM table_namel

加一个distinct表示将结果集中重复的行删掉,进行去重。在用的时候最好直接加载select后面,也就是所有字段的前面,因为实现的时候他会把distinct后面的字段进行整体去重,因为后面的字段去重会导致前面没去重的字段和后面去重的字段名行数不同,无法生成结果集,而产生报错。

但是在用的时候经常是对单个字段结果集进行去重,多个字段的话实际意义不大。

2.1.3、空值参与运算

若是在select中空值参与运算,那么结果都是空值,要是想解决这个问题可以在可能为空的值前面加上一个IFNUL(name, value),就说明如果为空则使用value来计算。

2.1.4、着重号

若是在使用的时候字段名、表名等跟关键字冲突。那么可以增加着重号表示该值不是关键字。

``:着重号

SELECT * FROM order;

2.1.5、显示表结构

显示了表中字段的详细信息,使用DESCRIBLE,或者可以省略为DESC,都是可以的。

DESCRIBE table_name;

DESC table_name;

2.1.6、算数运算符

  • 加 +

需要注意的是跟Java语言一样是存在隐式转换的,不一样的是加号在java中可以起到连接作用,但是在sql语句中只有加法运算。若是字符串参与运算,会自动转为数字,但若不是数字的字符形态,那么会看成0进行计算。

  • 减 -

  • 乘 *

  • 除 / 、 div

除法的运算结果都为浮点数,不管数据类型如何结果都是小数。若是除以0那么结果为NULL。

  • 模 % 、 mod

2.1.7、比较运算符

  • = 等于

在判断相等的时候,两边若是字符串和非字符串进行比较那么则会把字符串进行隐式转换,要么转为对应的整数,转换失败则为0,两边都是字符串的话则会直接进行字符串比较,不会产生隐式转换。

空值进行运算结果都是空值。

  • <=> 安全等于

它的使用跟等号大多是一样的,只有在空值的相关判断不一样,它可以进行 1 <=> null 这种判断,判断是否为空。为NULL而生。

  • <> 不等号

判断是否不相等,不相等返回1,有null参与结果就是null。

  • !=

  • <

  • <=

  • 大于号

  • 大于等于

2.1.8、逻辑运算符

  • 非 NOT 、 !

  • 且 AND、 &&

  • 或 OR 、 ||

  • 异或 XOR

2.1.9、位运算符

  • 按位与 &

  • 按位或 |

  • 按位异或 ^

  • 按位取反 ~

  • 右移 >>

  • 左移 <<

2.1.10、 模糊查询

img

like 的匹配规则是 右边是一个字符串,%表示0到任意个字符,_ 表示一个字符。只要符合右边的规则就算匹配成功。

2.1.11、分页

通过关键字limit,第一个参数为偏移量,第二个参数为展示的数据条数。偏移量是指从第几条数据开始,0的话就是从第一个开始,n的话就是从第n+1个开始。若是偏移量为0,则可以省略不写。limit关键字需要放在查询语句的最后。

SELECT *

FROM stable_name

LIMIT 0, 20;

指的就是从第一条数据开始展示20条数据。

8.0新版mysql中一个新的关键字OFFSET,就是偏移量会数据条数顺序反一下。

SELECT *

FROM stable_name

LIMIT 20 OFFSET 0;

2.1.12、 多表查询

  • 建议:多表查询的时候每个字段前都知名其所在的表,是一个优化,但是多表共有的字段在使用的时候必须要指明其所在的表名。

2.1.12.1、多表查询的分类

1、等值查询和非等值查询

2、自连接和非自连接

  • 自连接:就是自己和自己连,同一张表多次使用拼成一张表。

  • 非自连接:就是不同的表拼成一张表。

3、内连接和外连接

  • 内连接:合并具有同一列的两个以上的表的行,结果集中不包含一个表与另一个表不匹配的行。

  • 外连接:合并具有同一列的两个以上的表的行,结果集中除了包含一个表与另一个表不匹配的行之外,还查询到了左表或者右表中不匹配的行。

    • 左外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回了左表中不满足条件的行。

    • 右外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回了右表中不满足条件的行。

2.1.12.2、笛卡尔积

这里指的也就是交叉连接,笛卡尔积只是一个数学运算。假设我们有两个集合,为X 和 Y, 那么笛卡尔积之后就会把所有的组合情况列出来在一个表里面,组合数的个数即为两个集合中元素个数的乘积。

所以说这时候不是我们想要的表,因为有太多的错误数据,这时候只需要加一些筛选条件即可,找那种两个表共同可以代表身份的字段。

首先要加上约束条件使表正确,然后可以加一些其它的条件进行约束。

SELECT *

FROM table_1, table_2

where table_1.id = table_2.id;

如果在from 后面给表起了别名,那么在后面使用的时候只能使用表的别名。

2.1.12.3、join实现内、外连接

注意左连接和右连接是相对与关键字左右两边的表,left会把左边的的表全部输出,right会把右边的表全部输出。

  • 中图:内连接

select * from table1 join table2 on table1.id=table2.id;

  • 左上图:左外连接

select * from table1 left join table2 on table1.id=table2.id;

  • 右上图:右外连接

select * from table1 right join table2 on table1.id=table2.id;

  • 左中图

左中图就是把左连接的结果集中,只要左图为空的部分。

select * from table1 left join table2 on table1.id=table2.id where table1.id is null;

  • 右中图

select * from table1 rightjoin table2 on table1.id=table2.id where table2.id is null;

  • 左下图 满外连接

虽然这是对的,但是mysql中不支持full关键字,在其他的一些数据库中可以。

select * from table1 full join table2 on table1.id=table2.id;

sql中实现满外连接

就是把之前的左上图和右中图拼在一起,使用的使union all关键字,但是条件是他们的列数是相等的。

select * from table1 left join table2 on table1.id=table2.id union all select * from table1 rightjoin table2 on table1.id=table2.id where table2.id is null;

  • 右下图

拿左中图和右中图拼在一起

select * from table1 left join table2 on table1.id=table2.id where table1.id is null union all select * from table1 rightjoin table2 on table1.id=table2.id where table2.id is null;

2.1.13、聚合函数

2.1.13.1、group by

分组函数,就是将其通过某个字段进行分组,然后统计相关信息。

结论:

  1. select中出现的非组函数的字段必须声明在group by中,反之group by中声明的字段可以不出现在select中。

  2. group by 声明在from后、where后、order by前, limit 前

  • 单个字段分组

最好是将id也输出,这样看起来知道哪个结果对应的是哪一组。

select id , sum(salary) from table_name group by id;

  • 多个字段进行分组

直接在后面加就行。

select id ,add sum(salary) from table_name group by id, add;

2.1.13.2 having

该关键字也是增加约束条件,因为where中不能出现聚合函数,但是having可以。在正常使用中,where是对行进行筛选,而having是对组进行筛选。

having可以代替where的所有工作,但是在效率上没有where快,所以在使用的时候能用where就用where。

having 必须声明在group by的后面,没有的话基本用不上having。where已经可以解决这个问题

select id, max(salary) from table_name group by id having max(salry) > 1000;

2.1.14、子查询

就是查询语句的嵌套使用

select last_name, salary from table_1 where salary > ( select salary from table_1 where last_name = 'Abel'; );

  • 称谓的规范:外查询(主查询)、内查询(子查询)。

  • 子查询在主查询之前一次执行完成。

  • 子查询的结果被主查询使用。

  • 注意事项:

    • 子查询要包含在括号内

    • 将子查询放在比较条件的右侧

    • 单行操作符对应单行子查询,多行操作符对应多行子查询。

子查询的分类

  • 角度一:从内查询返回的结果的条目数

    • 单行子查询

    • 多行子查询

  • 角度二:内查询是否被执行多次

    • 相关子查询

    • 不相关查询

2.2、DDL数据定义语言

2.2.1、 create、show...

  • 创建数据库

    create database 数据库名;

  • 创建数据库并指定字符集 b

    create database 数据库名 character set 字符集;

  • 判断是否已经存在,不存在则创建数据库

    create database if not exists 数据库名;

  • 创建数据表

    括号里面填字段名以及字段的数据类型。if not exits 跟之前的作用是一样的可选。推荐加上。

    create table if not exists table_name (

    id int, name varchar(15), hire_date date

    );

  • 查看表结构

    desc table_name

  • 查看创建表的的语句结构

    show create table table_name;

  • 基于现有的表创建 就是把其中一个表的信息直接复制到新创建的表,只要是select语句的结果集表都行,多表单表查询的结果都可以。

    create table table_2 as select id, name, salart from table_1;

2.2.2、alter、drop、rename..

  • 添加一个字段

    alter table table add 字段名 数据类型; //默认插在末尾

    alter table table add 字段名 数据类型 first; //插在开头

    alter table table add 字段名 数据类型 after 字段1; //插在字段1后面

  • 修改一个字段:数据类型、长度、默认值

    alter table table modify 字段名 数据类型; //只修改字段数据类型或长度

    alter table table modify 字段名 数据类型 default '默认值'; // 基本上都是修改长度不会修改类型,非必要不修改类型

  • 重命名一个字段

    alter table 表名 change 字段名 新字段名 新数据类型; //可以不进行修改某一像

  • 删除一个字段

    alter table table drop column 字段名;

  • 重命名表

    rename table 表名 to 新表名;

    alter table 表名 rename to 新表名;

  • 删除表

    drop table 表名;

    drop table if exists 表名;

  • 清空表

    truncate table 表名;

2.3、DML数据操作语言

  1. insert

    • 一条一条的插入

    // 没有指明插入的字段 insert into 表名 values (data1, data2, data3); // 数据的顺序必须跟字段的顺序严格相同。顺序不能乱

    //知名插入的字段 insert into 表名(字段1, 字段2, 字段3)// 没有知名的按默认值 values (data1, data2, data3); // 数据的顺序必须跟指明的字段顺序相同。

    • 多条插入

    insert into 表名(字段1, 字段2, 字段3)// 没有知名的按默认值 values (data1, data2, data3),(data1, data2, data3),... ;//可以一直加下去

    • 将查询结果插入

    insert into 表名(字段1, 字段2, 字段3) select 字段1,字段2,字段3 // 这里的字段不用跟之前完全一样,但是数据类型要对上。 from 表名2 where 约束条件;

  2. delete

    delete 表名 where 约束条件;

  3. update

可以实现批量修改,只需要合理的使用约束条件。

update 表名 set 字段1 = 新数据 // 支持运算操作 where 约束条件;// 可选

2.4、DCL数据控制语言

  1. commit 提交数据。一旦执行该操作,数据就被永久的保存在了数据库中,意味着数据不可以回滚。

  2. rollback 回滚数据。一旦执行之后,则可以实现数据的回滚。回滚到最近的一次commit之后。

    注意:DDL和DML操作不能进行回滚,但是如果在执行操作之前执行set = autocommit = false则执行的DML操作就可以实现回滚,但是DDL不行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/4764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java+SpringBoot+Vue前后端分离校园管理系统详细设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

sqli-labs 堆叠注入 解析

打开网页首先判断闭合类型 说明为双引号闭合 我们可以使用单引号将其报错 先尝试判断回显位 可以看见输出回显位为2&#xff0c;3 尝试暴库爆表 这时候进行尝试堆叠注入&#xff0c;创造一张新表 ?id-1 union select 1,database(),group_concat(table_name) from informatio…

分布式应用之zookeeper集群+消息队列Kafka

一、zookeeper集群的相关知识 1.zookeeper的概念 ZooKeeper是一个分布式的&#xff0c;开放源码的分布式应用程序协调服务&#xff0c;是Google的Chubby一个开源的实现&#xff0c;是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件&#xff0c;提供的功能…

一级分类全覆盖!安全狗入选《嘶吼2023网络安全产业图谱》

7月10日&#xff0c;嘶吼安全产业研究院联合国家网络安全产业园区&#xff08;通州园&#xff09;正式发布《嘶吼2023网络安全产业图谱》。作为国内云原生安全领导厂商&#xff0c;安全狗入选图谱中的多个细分领域。 据悉&#xff0c;本次《嘶吼2023网络安全产业图谱》采用了市…

JavaScript——基础知识及使用

初识 JavaScript JavaScript (简称 JS) 是世界上最流行的编程语言之一.一个脚本语言, 通过解释器运行.主要在客户端(浏览器)上运行, 现在也可以基于 node.js 在服务器端运行. JavaScript 的能做的事情: 网页开发(更复杂的特效和用户交互)网页游戏开发服务器开发(node.js)桌…

Pandas Groupby:在Python中汇总、聚合和分组数据

GroupBy是一个非常简单的概念。我们可以创建一个类别分组&#xff0c;并对这些类别应用一个函数。这是一个简单的概念&#xff0c;但它是一种在数据科学中广泛使用的非常有价值的技术。在真实的的数据科学项目中&#xff0c;您将处理大量数据并一遍又一遍地尝试&#xff0c;因此…

HUAWEI Mate X3:内外屏双享,折叠影像诠释精彩

HUAWEI Mate X3是全球首款四曲折叠手机&#xff0c;轻薄实力派。它采用了独创的寰宇舷窗设计&#xff0c;内外双屏高清呈现均支持120Hz疾速高刷&#xff0c;10.7亿色彩显示&#xff0c;获得德国莱茵TV色准和准确色彩投射双认证。无论是看视频、玩游戏、办公学习&#xff0c;还是…

T5模型: Transfer Text-to-Text Transformer(谷歌)

&#x1f525; T5由谷歌发表于2019&#xff0c;《Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer》&#xff0c;最终版本发布在&#xff1a;JMLR。 一句话总结T5: 大一统模型&#xff0c;seq2seq形式完成各类nlp任务&#xff0c;大数据集…

JAVA15个常见面试题

下面是一些常见的Java面试题及答案&#xff1a; Java中的值传递和引用传递有什么区别&#xff1f; Java中的参数传递方式都是值传递&#xff0c;但是对于引用类型的参数&#xff0c;传递的是对象的引用副本。 什么是Java中的面向对象编程&#xff1f; 面向对象编程是一种编程范…

推荐系统-基于标签的Top-N个性化推荐实现

随着移动互联网的快速发展&#xff0c;UGC标签系统受到越来越多推荐应用&#xff0c;标签不但能反映用户的兴趣又能描述物品的本身特征。现有的标签推荐算法没有考虑用户的连续行为所产生的影响&#xff0c;于是人们提出了一种基于标签的个性化推荐算法。该算法将〈用户-标签-物…

谷歌云构建漏洞容易引发潜在的供应链攻击

云安全公司Orca Security在谷歌云构建&#xff08;Google Cloud Build&#xff09;服务中发现了一个关键的设计漏洞&#xff0c;该漏洞会让攻击者的权限升级&#xff0c;使他们可以在未经授权的情况下访问谷歌构件注册表&#xff08;Google Artifact Registry&#xff09;代码库…

VoIP监控工具有什么作用

VoIP 监控工具利用思科的 IPSLA 技术生成合成流量并监控客户端体验的呼叫质量。与被动监控VoIP指标相反&#xff0c;IPSLA技术允许IT管理员主动并在潜在问题发生之前检测到它们&#xff0c;这使组织能够轻松遵守严格的SLA指标。 思科 IPSLA 技术在两台设备之间创建流量&#x…

这样创建客户帮助中心,效果超好!

创建一个有效的客户帮助中心是为了为客户提供优质的支持和服务。在这个数字化时代&#xff0c;客户期望能够快速找到所需的信息&#xff0c;并得到准确和及时的解答。本文将分享创建有效客户帮助中心的最佳实践&#xff0c;帮助您提供出色的客户体验并提升客户满意度。 1. 了解…

Python 字典 get()函数使用详解,字典获取值

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 get函数使用详解 1、设置默认返回值2、嵌套字典取值3、get() 和 dict[key] 的区别…

linux centos7 静默安装 oracle 11g,【亲测有效】,包含远程连接、提供安装包

Centos7 安装oracle11g 环境准备 操作系统 centos7 oracle版本 oracle11g 终端软件 MobaXterm 192.168.46.61 oracleMaster 安装包 网盘地址 一、安装前准备 1、关闭selinux [rootoracleMaster ~]# vim /etc/selinux/config修改 SELINUX 为 disabled # This file controls …

java导出pdf(纯代码实现)

java导出pdf 在项目开发中&#xff0c;产品的需求越来越奇葩啦&#xff0c;开始文件下载都是下载为excel的&#xff0c;做着做着需求竟然变了&#xff0c;要求能导出pdf。导出pdf倒也不是特别大的问题关键就是麻烦。 导出pdf我知道的一共有3中方法&#xff1a; 方法一&#xff…

STM32定时器中断的使用示例

STM32定时器中断的使用示例 前言硬件和软件cubemx使能定时器中断中断服务函数案例输出结果 前言 上一篇博客实现了定时器输出pwm&#xff0c;这篇接着上次的工程&#xff0c;在上次的工程上做简单的配置即可 硬件和软件 硬件使用的是stm32h750vbt6&#xff1b;软件用到了stm…

nginx+lua+redis环境搭建(文末赋上脚本)

目录 需求背景 环境搭建后nginx和redis版本 系统环境 搭建步骤 配置服务器DNS 安装ntpdate同步一下系统时间 安装网络工具、编译工具及依赖库 创建软件包下载目录、nginx和redis安装目录 下载配置安装lua解释器LuaJIT 下载nginx NDK&#xff08;ngx_devel_kit&#xff09…

ceph安装部署

Ceph 简介 存储基础 单机存储设备 单机存储的问题 分布式存储的类型 分布式存储&#xff08;软件定义的存储 SDS&#xff09; Ceph 架构 Ceph 核心组件 ​编辑 Pool中数据保存方式支持两种类型 OSD 存储后端 Ceph 数据的存储过程 Ceph 集群部署 基于 ceph-deploy …

网络运维能转型到系统运维吗?

很多网工处于刚起步的初级阶段&#xff0c;各大公司有此专职&#xff0c;但重视或重要程度不高&#xff0c;可替代性强&#xff1b;小公司更多是由其它岗位来兼顾做这一块工作&#xff0c;没有专职&#xff0c;也不可能做得深入。 现在开始学习入门会有一些困难&#xff0c;不…