首页 > 数据库 >MySql - 基础学习5 - select

MySql - 基础学习5 - select

时间:2022-11-09 22:47:35浏览次数:77  
标签:事务 name -- 学习 select student MySql id SELECT

一.分页和排序

--  分页 limit 和排序 order by
-- 排序  ;升序  ASC  ,降序  
-- 升序
SELECT s.`id`,`name`,`paw`,`gradename`
FROM student AS s
INNER JOIN grade AS g
ON s.id=g.`gradeid`
ORDER BY `name` ASC
-- 降序
SELECT s.`id`,`name`,`paw`,`gradename`
FROM student AS s
INNER JOIN grade AS g
ON s.id=g.`gradeid`
ORDER BY `name` DESC

-- 为什么要分页
-- 缓解数据库压力,给人的体验更好
-- 瀑布流,没有分页,无限往下刷


-- 分页 每页只显示五条数据
-- 语法:limit  当前页,页面大小
-- limit  0,5   1~5 页
SELECT s.`id`,`name`,`paw`,`gradename`
FROM student AS s
RIGHT JOIN grade AS g
ON s.id=g.`gradeid`
LIMIT  2,5

-- 网页应用  当前页,总的页数,页面大小
-- 第一页    limit    0,5     (1-1)*5
-- 第二页    limit    5,5     (2-1)*5
-- 第三页    limit    10,5     (3-1)*5
-- 第n页    limit    (n-1),5     (n-1)*5
-- pageSize:页面大小
-- (n-1)*pagesize  :起始值
-- n:当前页
-- 数据总数  / 页面大小  =  总页数

语法:

排序  order  by  用什么字段排   升序还是降序(ASC)(DESC)

分页  limit  起始数据位置   页面大小

二.子查询

where (值是固定的,有一个范围的)

子查询:在where语句中嵌套一个查询语句

where(这个值是计算出来的)

SELECT s.`id`,`name`,`paw`,`gradename`
FROM student AS s
RIGHT JOIN grade AS g
ON s.id=g.`gradeid`
WHERE paw =(
SELECT paw FROM student
WHERE id=3
)

子查询:由里及外的查询数据,先执行括号里面的,后执行外面部分

三.MySql函数

1.常用函数

-- 常用函数
-- 数学运算
SELECT ABS(-8)       -- 绝对值
SELECT CEILING(9.3)  -- 向上取整
SELECT FLOOR(6.7)    -- 向下取整
SELECT RAND()        -- 返回一个0 ~ 1 之间的随机数
SELECT SIGN(0)       --  判断一个数的符号 0=0  10=1  -10=-1
-- 字符串函数
SELECT CHAR_LENGTH('一个右边腿')    -- 字符串的长度
SELECT CONCAT('我','爱好:','女')     -- 字符串连接
SELECT INSERT('我爱好女',1,1,'我超级')  -- 字符串替换~插入字符串,字符串,从那个位置替换,要替换的长度,替换的字符串
SELECT LOWER('NsSb')                    -- 字符串转换为小写(字母类的)
SELECT UPPER('NsSb')                    -- 字符串转换为大写
SELECT INSTR('nserbi','r')              -- 返回字符第一次出现的位置
SELECT REPLACE('abcdef','bc','cb')      -- 替换字符串
SELECT SUBSTR('nishisb',3,3)            -- 截取字符串
SELECT REVERSE('bbihsow')               -- 反转字符串
-- 把名字叫马的同学改为叫刘
SELECT REPLACE(`name`,'马','刘') FROM student
WHERE `name` LIKE '马%'
-- 时间和日期函数
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()

2.聚合函数

函数名称 描述
COUNT() 计数
SUM() 求和
AVG() 平均值
MAX() 最大值
MIN() 最小值
...... ...

 

 

 

 

 

 

 

-- 统计表中的记录
SELECT COUNT(`name`) FROM student  -- count(字段),会忽略所有的null值
SELECT COUNT(1) FROM student       -- count(1),不会忽略null值,有记录就一直查
SELECT COUNT(*) FROM student
SELECT MAX(id) AS 最高分 FROM student
SELECT g.gradeid,`name`,gradename
FROM stdent1 s
INNER JOIN `grade` g
ON s.id=g.gradeid
GROUP BY gradeid

三.MD5加密

什么是MD5?

主要是增强算法复杂度和不可逆特性

-- 测试MD5加密
CREATE TABLE `testmd5`(
`id` INT(4) NOT NULL,
`name` VARCHAR(20) NOT NULL,
`ped` VARCHAR(15) NOT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8
INSERT INTO `testmd5` VALUES(1,'zhangsan','123456'),(2,'lisi','654321'),(3,'wangwu','987654')
-- 数据加密
UPDATE `testmd5` SET pwd=MD5(pwd)
ALTER TABLE `testmd5` CHANGE ped pwd VARCHAR(60)
-- 一般在插入的时候加密
INSERT INTO `testmd5` VALUES(4,'zhangsan',MD5('123456'))
-- 通过用户传进来的密码,加密后比对
SELECT * FROM `testmd5` WHERE `name`='zhangsan' AND pwd=MD5('123456')

 

四.slect:完结

left  inner  right ---- on :联合查询

where   :指定结果需要满足的条件

group  by :指定结果需要用那几个字段来分组

having     :过滤分组的记录需要满足的次要条件

order  by :指定查询出来记录进行排序,升序ASC,降序DESC

limit        :分页,查询的记录,从那条到那条

五.事务

ACID

原子性  (atomicity):要么都成功,要么都失败

一致性(consistency):事务发生前后要保证数据的一致性:例如两个人转账,总值1000,不管怎么转账,最终都是1000

持久性(durability): 事务不提交就不会发生变化,但是一旦提交就不可逆,会持久化到数据库中

隔离性(isolation)  :事务的隔离性是指,多个用户对同一个用户发起事务时,数据库会给每一个用户开启事务,事务之间不能相互干预,要互相隔离

隔离所产生的问题:

  • 脏读:指一个事务读取了另一个事务未提交的数据。
  • 不可重复读:在一个事务内读取某一行数据,多次读取的结果不同(这个不一定是错误,可能是某些时候场合不对)
  • 虚读(幻读):是指在一个事务内读取到了别的事务新插入的数据,导致读取前后不一致。

事务的实现流程(一般过程)

--  ======事务=======
--  mysql是默认开启事务自动提交的
SET  autocommit = 0;/*关闭*/
SET  autocommit = 1;/*开启*/
-- 手动处理事务

-- 事务开启
START TRANSACTION  -- 标记一个事务的开始,从这个语句以后,所有的sql都在一个事务内
INSERT  xx
INSERT  xx
-- 提交:持久化(成功!)
-- 回滚:回到原来的样子(失败!)
ROLLBACK
-- 事务结束
SET autocommit = 1;  -- 开启自动提交
-- 拓展
SAVEPOINT   -- 保存点,设置一个事务的保存点
ROLLBACK SAVEPOINT   -- 回滚到保存点
RELEASE  SAVEPOINT   -- 删除保存点

实例:模拟转账场景

-- 转账所需库
CREATE DATABASE shop CHARACTER SET utf8 COLLATE utf8_general_ci
USE shop
CREATE TABLE `account`(
`id` INT(3) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
`money` DECIMAL(9,2) NOT NULL,
PRIMARY KEY (`id`)
)ENGINE = INNODB DEFAULT CHARSET=utf8
INSERT INTO `account`(`name`,`money`) VALUES('A',2000.00),('B',10000.00)

-- 模拟转账
SET autocommit = 0;  -- 关闭自动提交
START TRANSACTION    -- 开启一个事务

UPDATE `account` SET money = money +1000 WHERE id=1
UPDATE `account` SET money = money -1000 WHERE id=2

COMMIT;  -- 提交事务
ROLLBACK; -- 回滚

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

六.索引的分类

1.主键索引(PRIMARY KEY):唯一的标识,不可以重复,只能有一个列作为主键

2.唯一索引(UNIQUE KEY):避免重复列出现,唯一索引可以重复,多个列可以标识唯一索引

3.常规索引(KEY/INDEX):默认的,index。key来设置

4.全文索引(FullText):特定的数据库引擎才有,myisam,快速定位数据

 

标签:事务,name,--,学习,select,student,MySql,id,SELECT
From: https://www.cnblogs.com/5ran2yl/p/16875480.html

相关文章

  • luffy学习-05
    一、协同开发在公司中,都是多人共同开发同一个项目组长本地创建出空项目,底层代码写完——>提交到远程仓库和同事们张三李四王麻子都要共同开发这个项目我们要把代码clo......
  • golang连接MySQL并导入执行SQL文件
    实现golang连接MySQL数据库导入执行一个sql文件packagetoolsimport("fmt"_"github.com/go-sql-driver/mysql""github.com/jinzhu/gorm""io/iou......
  • [转载学习] Verilog-SystemVerilog中的force和release语法
    Verilog-SystemVerilog中的force和release语法本文属于转载,版权属于原博主—狮子座硅农(LeoICer)&星星在人间,博客原地址https://blog.csdn.net/qianniuwei321/article/de......
  • 【人工智能】机器学习入门之监督学习(一)有监督学习
    机器学习入门之监督学习(一)有监督学习简介监督学习算法是常见算法之一,主要分为有监督学习和无监督学习。本文主要记录了有监督学习中的分类算法和回归算法,其中回归算法是......
  • 广告行业中那些趣事系列54:从理论到实践学习当前超火的多模态学习模型
    导读:本文是“数据拾光者”专栏的第五十四篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇从理论到实践介绍了当前超火的多模态学习模型,想了解多模态学习......
  • 【前端】学习前端vue框架,了解了什么是v-model
    什么是v-model呢?v-model指令可以在表单input、textarea及select元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但v-model本......
  • K8s系列---【KubeSphere部署Mysql】
    KubeSphere部署Mysql(有状态副本集)扫盲:什么是有状态副本集?例如,部署一个mysql,如果服务挂了,K8s会自动拉起一个mysql服务,但是拉起的mysql服务仍然得有服务挂掉之......
  • mysql导入数据函数问题
    1418-ThisfunctionhasnoneofDETERMINISTIC,NOSQL,orREADSSQLDATAin项目场景:mysql创建function报错误1418-ThisfunctionhasnoneofDETERMINISTIC,N......
  • 将就用一下Mysql的存储过程
    和Oracle相比,Mysql存储过程使用非常之不方便,没有什么可用的调试手段。但我已经在一个应用里已经使用了它,停止使用代价太高,只能将就用下去。我的Mysql版本5.6。1、调试的将......
  • Ubuntu 20.04 LTS/RTX30XX显卡 快速配置深度学习环境(一行命令)
    近日,新入一台RTX3080的服务器,目前好像还没办法很方便地在RTX30系列GPU上通过pip/conda安装TensorFlow或PyTorch。因为这些GPU需要CUDA11.1,而当前主流的Tensor......