MySQL入门教程-函数,索引

本文详细介绍了MySQL中的各种函数,包括数学运算、字符串操作、时间日期处理、系统信息获取、聚合函数以及数据库级MD5加密。此外,还涵盖了事务的ACID原则、隔离级别和索引的创建与管理,如主键索引、唯一索引和全文索引的使用。
摘要由CSDN通过智能技术生成

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 表名;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

射手座的程序媛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值