MySQL入门教程-函数,索引

news2025/4/23 23:18:58

4MySQL函数

常用函数

 -- 数学运算
 SELECT ABS(-8); -- 绝对值
 SELECT CEIL(5.1); -- 向上取整
 SELECT CEILING(5.1); -- 向上取整
 SELECT RAND(); -- 返回0~1之间的一个随机数
 SELECT SIGN(-10); -- 返回一个数的符号;0返回0;正数返回1;负数返回-1
 ​
 -- 字符串函数
 SELECT CHAR_LENGTH('我喜欢你'); -- 字符串长度
 SELECT CONCAT('我','喜欢','你'); -- 拼接字符串
 SELECT INSERT('我喜欢',1,1,'超级') -- INSERT(str,pos,len,newstr) 从str的pos位置开始替换为长度为len的newstr
 SELECT UPPER('zsr'); -- 转大写
 SELECT LOWER('ZSR'); -- 转小写
 SELECT INSTR('zsrs','s'); -- 返回第一次出现字串索引的位置
 SELECT REPLACE('加油就能胜利','加油','坚持'); -- 替换出现的指定字符串
 SELECT SUBSTR('坚持就是胜利',3,6); -- 返回指定的字符串(源字符串,截取位置,截取长度)
 SELECT REVERSE('rsz'); -- 反转字符串
 ​
 -- 时间日期函数
 SELECT CURRENT_DATE(); -- 获取当前日期
 SELECT CURDATE(); -- 获取当前日期
 SELECT now(); -- 获取当前时间
 SELECT LOCALTIME(); -- 本地时间
 SELECT SYSDATE(); -- 系统时间
 ​
 SELECT YEAR(NOW());
 SELECT MONTH(NOW());
 SELECT DAY(NOW());
 SELECT HOUR(NOW());
 SELECT MINUTE(NOW());
 SELECT SECOND(NOW());
 ​
 -- 系统信息
 SELECT SYSTEM_USER();
 SELECT USER();
 SELECT VERSION();

聚合函数

img

 SELECT COUNT(StudentName) FROM student; 
 SELECT COUNT(*) FROM student;
 SELECT COUNT(1) FROM student;
 ​
 SELECT SUM(`StudentResult`) FROM result;
 SELECT AVG(`StudentResult`) FROM result;
 SELECT MAX(`StudentResult`) FROM result;
 SELECT MIN(`StudentResult`) FROM result;

数据库级别的MD5加密

MD5信息摘要算法(MD5 Message-Digest Algorithm)

  • MD5由MD4、MD3、MD2改进而来,主要增强算法复杂度和不可逆性

  • MD5破解网站的原理,背后有一个字典,MD5加密后的值,加密前的值

 CREATE TABLE `testMD5`(
     `id` INT(4) NOT NULL,
     `name` VARCHAR(20) NOT NULL,
     `pwd` VARCHAR(50) NOT NULL,
     PRIMARY KEY(`id`)
 )ENGINE=INNODB DEFAULT CHARSET =utf8;
 ​
 -- 明文密码
 INSERT INTO `testMD5` VALUES(1,'zsr','200024'),
 (2,'gcc','000421'),(3,'bareth','123456');
 ​
 -- 加密
 UPDATE `testMD5` SET `pwd`=MD5(pwd) WHE RE id=1;
 UPDATE `testMD5` SET `pwd`=MD5(pwd); -- 加密全部的密码
 ​
 -- 插入的时候加密
 INSERT INTO `testMD5` VALUES(4,'barry',MD5('654321'));
 ​
 -- 如何校验:将用户传递进来的密码,进行MD5加密,然后对比加密后的值
 SELECT * FROM `testMD5` WHERE `name`='barry' AND `pwd`=MD5('654321');

5.事务

要么都成功,要么都失败

 SQL执行:A转账给B
 SQL执行:B收到A的钱

将一组SQL放在一个批次中去执行

  • 例如银行转账:只有A转账成功且B成功到账,该事件才算结束,如果一方不成功,则该事务不成功

事务原则:ACID

事务并发导致的问题

隔离级别

在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别

读未提交:一个事务读取到其他事务未提交的数据;这种隔离级别下,查询不会加锁,一致性最差,会产生脏读、不可重复读、幻读的问题

读已提交:一个事务只能读取到其他事务已经提交的数据;该隔离级别避免了脏读问题的产生,但是不可重复读和幻读的问题仍然存在;

读提交事务隔离级别是大多数流行数据库的默认事务隔离级别,比如 Oracle,但是不是 MySQL 的默认隔离界别

可重复读:事务在执行过程中可以读取到其他事务已提交的新插入的数据,但是不能读取其他事务对数据的修改,也就是说多次读取同一记录的结果相同;该个里级别避免了脏读、不可重复度的问题,但是仍然无法避免幻读的问题

可重复读是MySQL默认的隔离级别

串行化:事务串行化执行,事务只能一个接着一个地执行,、,并且在执行过程中完全看不到其他事务对数据所做的更新;缺点是并发能力差,最严格的事务隔离,完全符合ACID原则,但是对性能影响比较大

img

执行事务的过程

1️⃣ 关闭自动提交

 SET autocommit=0;

2️⃣ 事务开启

 START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务内

3️⃣ 成功则提交,失败则回滚

 -- 提交:持久化(成功)
 COMMIT
 -- 回滚:回到原来的样子(失败)
 ROLLBACK

4️⃣ 事务结束

 SET autocommit=1; -- 开启自动提交

5️⃣ 其他操作

 SAVEPOINT 保存点名; -- 设置一个事务的保存点
 ROLLBACK TO SAVEPOINT 保存点名; -- 回滚到保存点
 RELEASE SAVEPOINT 保存点名; -- 撤销保存点

6、索引

索引(`Index`)是帮助MySQL高效获取数据的**数据结构**。

- 提高查询速度
- 确保数据的唯一性
- 可以加速表和表之间的连接 , 实现表与表之间的参照完整性
- 使用分组和排序子句进行数据检索时 , 可以显著减少分组和排序的时间
- 全文检索字段进行搜索优化

索引的分类

 -- 创建学生表student
 CREATE TABLE `student`( 
     `StudentNo` INT(4) NOT NULL COMMENT '学号',
     `LoginPwd` VARCHAR(20) DEFAULT NULL,
     `StudentName` VARCHAR(20) DEFAULT NULL COMMENT '学生姓名',
     `Sex` TINYINT(1) DEFAULT NULL COMMENT '性别,取值0或1',
     `GradeID` INT(11) DEFAULT NULL COMMENT '年级编号',
     `Phone` VARCHAR(50) NOT NULL COMMENT '联系电话,允许为空,即可选输入',
     `Adress` VARCHAR(255) NOT NULL COMMENT '地址,允许为空,即可选输入',
     `BornDate` DATETIME DEFAULT NULL COMMENT '出生时间',
     `Email` VARCHAR(50) NOT NULL COMMENT '邮箱账号,允许为空,即可选输入',
     `IdentityCard` VARCHAR(18) DEFAULT NULL COMMENT '身份证号',
     PRIMARY KEY (`StudentNo`),
     UNIQUE KEY `IdentityCard` (`IdentityCard`),
     KEY `Email` (`Email`)
 )ENGINE=MYISAM DEFAULT CHARSET=utf8;

主键索引(PRIMARY KEY)

唯一的标识,主键不可重复,只有一个列作为主键

  • 最常见的索引类型,不允许为空值

  • 确保数据记录的唯一性

  • 确定特定数据记录在数据库中的位置

 -- 创建表的时候指定主键索引
 CREATE TABLE tableName(
   ......
   PRIMARY INDEX (columeName)
 )
 ​
 -- 修改表结构添加主键索引
 ALTER TABLE tableName ADD PRIMARY INDEX (columnName)

普通索引(KEY / INDEX)

默认的,快速定位特定数据

  • index 和 key 关键字都可以设置常规索引

  • 应加在查询找条件的字段

  • 不宜添加太多常规索引,影响数据的插入,删除和修改操作

 -- 直接创建普通索引
 CREATE INDEX indexName ON tableName (columnName)
 ​
 -- 创建表的时候指定普通索引
 CREATE TABLE tableName(
   ......
   INDEX [indexName] (columeName)
 )
 ​
 -- 修改表结构添加普通索引
 ALTER TABLE tableName ADD INDEX indexName(columnName)

唯一索引(UNIQUE KEY)

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值

与主键索引的区别:主键索引只能有一个、唯一索引可以有多个

 -- 直接创建唯一索引
 CREATE UNIQUE INDEX indexName ON tableName(columnName)
 ​
 -- 创建表的时候指定唯一索引
 CREATE TABLE tableName(  
     ......
     UNIQUE INDEX [indexName] (columeName)  
 );  
 ​
 -- 修改表结构添加唯一索引
 ALTER TABLE tableName ADD UNIQUE INDEX [indexName] (columnName)

全文索引(FULLText)

快速定位特定数据(百度搜索就是全文索引)

  • 在特定的数据库引擎下才有:MyISAM

  • 只能用于CHAR , VARCHAR , TEXT数据列类型

  • 适合大型数据集

 -- 增加一个全文索引
 ALTER TABLE `student` ADD FULLTEXT INDEX `StudentName`(`StudentName`);
 ​
 -- EXPLAIN 分析sql执行的情况
 EXPLAIN SELECT * FROM student; -- 非全文索引
 EXPLAIN SELECT * FROM student WHERE MATCH(StudentName) AGAINST('d'); -- 全文索引

索引的使用

索引的创建

  • 在创建表的时候给字段增加索引

 CREATE TABLE 表名 (
     字段名1 数据类型 [完整性约束条件…],
     字段名2 数据类型 [完整性约束条件…],
     [UNIQUE|FULLTEXT|SPATIAL] INDEX|KEY [索引名] (字段名[(长度)] [ASC |DESC])
 );

创建完毕后,增加索引

 -- 方法一:CREATE在已存在的表上创建索引
        CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX 索引名
        ON 表名 (字段名[(长度)] [ASC |DESC]) ;
 ​
 -- 方法二:ALTER TABLE在已存在的表上创建索引
        ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] 
        INDEX 索引名 (字段名[(长度)] [ASC |DESC]) ;

索引的删除

 -- 删除索引
     DROP INDEX 索引名 ON 表名;
 -- 删除主键索引
     ALTER TABLE 表名 DROP PRIMARY KEY;

显示索引信息

 SHOW INDEX FROM 表名;

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

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

相关文章

树低级(C语言版)

一.树基本计算规则 关于树的大部分知识点我们都讲过了,那么如果我给你树的节点,你可以算出叶子节点个数吗? 下面我们总结下一些计算规则: 1.父子计算规则: parent(child-1)/2; leftchildparent*21,rightchildpare…

swing快速入门(三十三)确认对话框

注释很详细,直接上代码 新增内容 1.确定对话框返回值对应值 2.为文本域增加滚动条 package swing31_40;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent;public class swing_test_31 {// 创建一个JFrameJFrame jFrame new JFrame(…

《现代操作系统》第十二章习题答案

计算机硬件的改进主要归功于更小的晶体管。一些限制因素包括:(a) 光的波动性可能限制传统光刻技术制造集成电路的能力,(b) 固体中个别原子的迁移性可能导致非常薄的半导体、绝缘体和导体层的性能退化,(c) 背景辐射活性可能破坏分子键或影响非…

pytorch01:概念、张量操作、线性回归与逻辑回归

目录 一、pytorch介绍1.1pytorch简介1.2发展历史1.3pytorch优点 二、张量简介与创建2.1什么是张量?2.2Tensor与Variable2.3张量的创建2.3.1 直接创建torch.tensor()2.3.2 从numpy创建tensor 2.4根据数值创建2.4.1 torch.zeros()2.4.2 torch.zeros_like()2.4.3 torch…

回顾 2023,展望 2024

by zhengkai.blog.csdn.net 项目与心得 今年最大的项目和心得,非GCP莫属,作为全球顶尖的云平台, GCP有他的优势,也有很多难用的地方。但是作为当时的一个strategic solution,我们的印度本地化项目必须使用GCP&#xf…

Linux权限的基本理解

一:🚩Linux中的用户 1.1🥦用户的分类 🌟在Linux中用户可以被分为两种用户: 超级用户(root):可以在Linux系统中做各种事情而不被约束普通用户:只能做有限的事情被权限约束 在实际操作时超级用户的命令提示符为#,普通用户的命令提示符为$,可…

数模混合SoC芯片中LEF2Milkyway的golden flow

在数模混合芯片中的项目中,特别是数字模块很少甚至只有一个简单的数字控制逻辑时,我们要做数字模块的后端实现时,通常模拟那边会问我们实现需要他们提供哪些数据。 通常来说,我们可以让模拟设计提供数字模块的GDS或LEF文件即可。…

nodejs+vue+微信小程序+python+PHP特困救助供养信息管理系统-计算机毕业设计推荐

通过走访某特困救助供养机构实际情况,整理特困救助供养机构管理的业务流程,分析当前特困救助供养机构管理存在的各种问题,利用软件开发思想对特困救助供养机构特困救助供养机构管理进行系统设计分析。通过服务端程序框架进行设计,…

网际协议IPv4

基本介绍 网际协议IP是TCP/IP体系中两个重要的协议之一。IPv4虽有最终被IPv6取代的趋势,但它仍是当前使用的最重要的因特网协议。 与IP配套使用的还有3个协议: 地址解析协议ARP(Address Resolution Protocol)因特网控制报文协议ICMP(Internet Control …

Docker 入门 ------容器互通以及Dockerfile

1. 端口映射以及容器互联 Docker 除了通过网络访问,还提供了两种很方便的功能来满足服务访问的基本需求: 允许映射容器内应用的服务端口到本地宿主主机互联机制实现多个容器间通过容器名来快速访问 1.1 容器映射实现访问容器 1.1.1 从外部访问容器应…

中间人攻击是什么,会产生哪些危害,如何有效防止中间人攻击

简介 中间人攻击(Man-in-the-Middle Attack,简称MITM攻击)是一种网络攻击,其原理是攻击者通过各种技术手段将受攻击者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机称为“中间人”。在攻击过…

【滑动窗口】C++算法:可见点的最大数目

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本题涉及知识点 滑动窗口 LeetCode 1610可见点的最大数目 给你一个点数组 points 和一个表示角度的整数 angle ,你的位置是 location ,其中 location [posx, posy] 且 point…

Linux文件系统结构及相关命令1(man pwd ls ctrl +Shift +T ls /etc)

Linux的文件系统结构 某所大学的学生可能在一两万人左右,通常将学生分配在以学院-系班为单位的分层组织机构中。 如何查找一名学生? 最笨的办法:依次问询大学中的每一个学生,直到找到为止。 查询效率高的方法:按照从…

2023年新一代开发者工具 Vue ,正式开源!

以下文章来源于前端充电宝 ,作者CUGGZ 近日,Vue 新一代开发者工具(DevTools)正式开源!Vue DevTools 是一个旨在增强 Vue 开发人员体验的工具,它提供了一些功能来帮助开发者更好地了解 Vue 应用。下面就来看…

用IDEA创建/同步到gitee(码云)远程仓库(保姆级详细)

前言: 笔者最近在学习java,最开始在用很笨的方法:先克隆远程仓库到本地,再把自己练习的代码从本地仓库上传到远程仓库,很是繁琐。后发现可以IDEA只需要做些操作可以直接把代码上传到远程仓库,也在网上搜了些…

【FileZilla】的基本使用

一、FileZilla的使用 1.1 FileZilla简介 1.2 软件下载 到官方网站下载 FileZilla 的服务端和客户端程序 FileZilla - The free FTP solution 自行下载即可 1.3 软件安装 (1)先安装服务端【傻瓜式安装】,一直下一步下一步安装即可 &#xf…

Python绘制高级图表(1):绘制条形统计图

一、初始化 1. 引入库,设置画笔 from turtle import * t Turtle() t.color("black") t.width(3)2. 为了美观,画出xy轴 (1) 普通型 from turtle import * t Turtle() t.color("black") t.width(3)# 以画布为600 * 600为例 # 1.…

搭建maven私服

maven maven简介 什么是maven? Maven这个单词来自于意第绪语(犹太语),意为知识的积累。 Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。 Maven 除了以…

算法训练day53|动态规划part14

参考:代码随想录 1143.最长公共子序列 重点:状态的转移与递推公式的确定 本题和动态规划:718. 最长重复子数组 (opens new window)区别在于这里不要求是连续的了,但要有相对顺序,即:"ace" 是 …

Spark任务调度与数据本地性

Apache Spark是一个分布式计算框架,用于处理大规模数据。了解Spark任务调度与数据本地性是构建高效分布式应用程序的关键。本文将深入探讨Spark任务调度的流程、数据本地性的重要性,并提供丰富的示例代码来帮助大家更好地理解这些概念。 Spark任务调度的…