数据库学习Day02

本文介绍了MySQL中的分页查询与排序,详细讲解了事务的原子性、一致性、隔离性和持久性,以及如何处理脏读、不可重复读和幻读问题。接着探讨了索引的分类与数据结构,包括主键、唯一索引和全文索引。最后,阐述了数据库的权限管理和备份,包括用户创建、授权、撤销权限以及数据的导入导出操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页limit和排序order by

排序  升序:asc 降序 desc

order by 通过哪个字段排序,怎么排

order by studentresult desc

为什么分页?缓解数据库压力,给人的体验更好,瀑布流

分页,每页只显示5条数据

总页数=数据总数/页面大小

limit语法:limit 第几页,页面的大小

limit 0,5 第一页5条

limit 5,5 第二页5条

limit 10,5 第三页5条

limit 5(n-1),5 第n页5条

查询 java第一年 课程成绩前十的学生,并且分数要大于80的学生信息(学号,姓名,课程名称,分数)

select s.student,studentname,subjectname,studentresult

from student s

inner join result r

on s.studentNo=r.StudentNo

inner join subject sub

on sub.subjectNo=r.subjectNo

where SubjectName=‘java第一学年’and studentresult >=80

order by studentresult desc

limit 0,10

6.事务

原子性Atomicity:

事务中的操作要么都发生,要么都不发生

要么都成功,要么都失败

一致性Consistency:

事务前后数据的完整性必须保持一致

隔离性Isolation:

多个并发事务之间要相互隔离

持久性Durability:

事务没有提交,恢复到原始状态

事务已经提交,持久化到数据库,不会变

事务一旦提交就不可逆

脏读:

指一个事务读取了另外一个事务未提交的数据

不可重复读:

在一个事务内读取表中某一行数据,多次读取结果不同(这个一定是错误订单,只是某些场合不对)

虚读(幻读):

在一个事务内读取到了别的事务插入的数据,导致前后读取不一致

-- mysql是默认开启事务自动提交的
SET autocommit =0 /*关闭*/
SET autocommit =1 /*开启*/
START TRANSACTION -- 标记一个事务的开始,从这个之后的sql都在同一个事务内
-- 提交:持久化(成功!)
COMMIT
-- 回滚:回到原来的样子(失败!)
ROLLBACK
-- 事务结束
SET autocommit=1 -- 开启自动提交
SAVEPOINT 保存点名 -- 设置一个事务的保存点
ROLLBACK TO SAVEPOINT 保存点名 -- 回滚到保存点
RELEASE SAVEPOINT -- 撤销保存点

测试:

CREATE DATABASE shop
USE shop
SHOW TABLES
UPDATE account SET money=money-500 WHERE `name`='A'
UPDATE account SET money=money+500 WHERE `name`='B'
COMMIT;
ROLLBACK;
SET autocommit=1;

7.索引

索引是帮助mysql高效获取数据的数据结构

索引的分类

主键索引 (primary key):

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

唯一索引(unique key):

避免重复的列出现,唯一索引可以重复,多个列都可以标识为唯一索引

常规索引 (key/index):

默认的,index,key关键字来设置

全文索引(fulltext)

在特定的数据库引擎下才有,快速定位数据

索引的使用:

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

2.创建完毕后,增加索引

显示所有的索引信息

SHOW INDEX FROM student
-- 增加一个全文索引(索引名) 列名
ALTER TABLE school.`student` ADD FULLTEXT INDEX studentname(studentname)

explain 分析sql执行的状况

explain select * from student where match(studentname)against(‘刘’)

-- 插入100万条数据
DELIMITER $$ -- 写函数之前必须要写,标志
CREATE FUNCTION mock_data()
RETURNS INT
BEGIN
 DECLARE num INT DEFAULT 1000000;
 DECLARE i INT DEFAULT 0;
 WHILE i<num DO
 -- 插入语句
    SET i=i+1;
 END WHILE
 RETURN i;
END;
SELECT mock_data();
-- id _表名_字段名
-- create index 索引名 on 表(字段)
CREATE INDEX id_app_user_name ON app_user(`name`)
 

索引在小数据量的时候用处不大

索引一般加在常用来查询的字段上

索引的数据结构:

hash 类型的索引

Btree:innoDB的默认数据结构

mysql引背后的数据结_MySQL索引背后的数据结构及算法原理【转】_李韩资的博客-优快云博客

8.权限管理和备份

8.1用户管理

创建用户

create uesr kuangshen identified by ‘123456’

重命名

rename user kuangshen to kuangshen

用户授权 all privileges 全部的权限, 库.表

all privileges 除了给别人授权,其他都能干

grant all privileges on *.*  to kuangshen2//所有的库,所有的表

查询权限:

show grants for kuangshen2 //查看指定用户权限

show grants for root@localhost

撤销权限 revoke哪些权限,在哪个库撤销,给谁撤销

revoke all privileges on *.* from kuangshen2

删除用户:

drop user kuangshen

8.2mysql备份

使用命令行导出 mysqldump 命令行使用(命令行没有逗号)

mysqldump -hlocalhost -uroot -p123456 school student >D:/a.sql

导入:

登录的情况下,切换到指定的数据库

source 备份文件

source d:/a.sql

防止数据丢失

把数据库给朋友,sql文件给别人即可

9.规范数据库设计

当数据库比较复杂的时候就需要设计了

设计数据库的步骤:

1、收集信息,分析需求

用户表

分类表

文章表

评论表

2、标识实体(把需求落实到每个字段)

3、标识实体之间的关系

写博客:user-->blog

创建分类:user->category

关注:user->user

友链:links

评论:user->user->blog

9.2三大范式

第一范式(1NF)

原子性:保证每一列不可再分

第二范式(2NF)

前提:满足第一范式

每张表只描述一件事情

属性完全依赖于主键(消除部分子函数依赖)

第三范式(3NF)

属性不依赖于其他非主属性(消除传递依赖)

第三范式需要确保数据表中的每一列都和主键直接相关,而不能间接相关

规范性和性能的问题

关联查询的表不得超过三张表

考虑商业化的需求和目标,数据库的性能更加重要

故意给某些表增加一些冗余的字段,从多表查询变为单表查询

故意增加一些计算列(从大数据量降低为小数据量的查询)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值