分页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)
属性不依赖于其他非主属性(消除传递依赖)
第三范式需要确保数据表中的每一列都和主键直接相关,而不能间接相关
规范性和性能的问题
关联查询的表不得超过三张表
考虑商业化的需求和目标,数据库的性能更加重要
故意给某些表增加一些冗余的字段,从多表查询变为单表查询
故意增加一些计算列(从大数据量降低为小数据量的查询)