MySql - 基础学习5 - 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,快速定位数据

 

posted @ 2022-11-09 22:37  回忆也交给时间  阅读(47)  评论(0编辑  收藏  举报