MyISAM

PHP论坛实现积分系统的思路

╄→гoц情女王★ 提交于 2020-08-08 21:58:47
首先在用户表定义一个积分字段; 然后创建一个等级表,主要字段有等级名,上限积分和下限积分; 再根据用户的行为进行积分累加; 最后根据判断用户积分在哪个等级范围,从而得出用户等级。 用户表 CREATE TABLE `bbs`.` user `( `id` INT ( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT comment ' 用户id ' , `avatar` VARCHAR ( 255 ) NOT NULL comment ' 头像 ' , `nickname` VARCHAR ( 60 ) NOT NULL comment ' 昵称 ' , `username` VARCHAR ( 16 ) NOT NULL comment ' 用户名 ' , `password` CHAR ( 32 ) NOT NULL comment ' 密码 ' , `points` INT ( 10 ) NOT NULL DEFAULT ' 0 ' comment ' 积分 ' , PRIMARY KEY (`id`) ) ENGINE = MYISAM; 等级表 CREATE TABLE `bbs`.` level `( `id` INT ( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT comment ' 等级id ' ,

MySql索引存储形式

試著忘記壹切 提交于 2020-08-08 19:49:59
聚簇索引(聚集索引)、非聚簇索引(非聚集索引),是因为存储引擎不同引起的,存储引擎中InnoDb是聚簇索引、MyISam是非聚簇索引,聚簇索引是数据与索引保存在一个起,非聚簇索引数据一个文件、索引一个文件,数据与索引不在一个文件中。 Mysql的索引以B+Tree的数据结构存储在磁盘,默认存储引擎为InnoDb。 InnoDb InnoDb非叶子节点中,指针左闭右开是一个区间,区间中保存排序的索引,如1,2,3(数据)P1(指针)5,6,7,P2,8,9,10,P3,根据数据所在区间,根据指针指向另一个磁盘块继续查找,查找到后返回数据,叶子界面保存整行数据。 如果有两个指针,name非主键,设置为索引,查询该索引表,改索引保存的数据为Id值,然后使用查询的Id值去Id索引表去查询,这种现象叫回表 MyISam 叶子节点存储的是数据的文件地址,根据地址去数据文件中进行查找 学习数据结构网站 https://www.geeksforgeeks.org https://www.cs.usfca.edu/~galles/visualization/Algorithms.html https://visualgo.net/zh 来源: oschina 链接: https://my.oschina.net/u/3141521/blog/4339701

MySQL 如何查看及修改数据库引擎

别说谁变了你拦得住时间么 提交于 2020-08-08 19:44:49
1、查看mysql支持的引擎有哪些 show engines; 2、查看当前默认的引擎 show variables like '%storage_engine%'; 如图所示,我的默认是InnoDB 3、查看指定表当前引擎,有两种方式 show table status where name = 'table_name'; show create table table_name 4、修改指定表的引擎 alter table table_name engine = innodb; 5、修改mysql默认的数据库引擎 打开配置文件my.ini,将“default-storage-engine=MYISAM”改为你想设定的,然后重启即可 来源: oschina 链接: https://my.oschina.net/mynotes/blog/4332158

MySQL索引

我的未来我决定 提交于 2020-08-08 19:34:05
一.什么是索引 索引是一种数据结构,能够帮助我们快速的检索数据库中的数据。 二.相关概念 1.索引分类 1)从存储结构上划分: 哈希索引 Btree索引 2)从应用层次上划分: 普通索引:一个索引只包含一列数据 唯一索引:索引值必须唯一,可以有空值 复合(联合)索引:包含多个列的索引 3)从存储方式上划分: 聚集索引:表中数据的顺序和索引顺序一致 非聚集索引:和索引不一致 2.聚集索引和非聚集索引 聚集索引和非聚集索引并不是真正的索引类型,而是一种数据存储的方式。InnoDB用的是聚集索引,而myISAM用的是非聚集索引 。 简单来说,聚集索引就是 以主键创建的索引 ,又称为主键索引。一张数据表只能建立一个聚集索引,而该表中数据的排序方式和索引排序方式相同。它的底层是B+树,叶子节点的data域就是行数据。 而非聚集索引是非主键建立的索引,一张表中可以有多个非聚集索引,像是普通索引,联合索引都属于非聚集索引,它的叶子节点存储的是索引值和主键,所以当一般查询时首先会查到对应的叶子节点,然后根据主键值去聚集索引中查找相应数据,这也称为 回表 (当然有特殊情况:覆盖索引)。 覆盖索引:对要查询的列建立索引,这样一次查询到索引就是我们要找的数据了,不需要再去主键索引中查找。 三.底层结构 哈希索引:利用哈希算法,将键值转换为哈希值再来定位。 跟B+树相比: 1.只能进行等值查找

mysql的索引底层原理详解

断了今生、忘了曾经 提交于 2020-08-08 12:14:27
参考文章: mysql的索引底层原理 什么是索引 概念:索引是提高mysql查询效率的数据结构。总的一句话概括就是索引是一种数据结构。 数据库查询是数据库的最主要功能之一。设计者们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如:有顺序查找、折半查找、快速查找等。 但是每种查找算法都只能应用于特定的数据结构之上,例如顺序查找依赖于顺序结构,折半查找通过二叉查找树或红黑树实现二分搜索。因此在数据之外,数据库系统还维护着满足特定查找算法的数据结构。这种数据结构,就是索引。 Mysql索引原理 目前大多数数据库系统及文件系统都采用 B-Tree 或其变种 B+Tree 作为索引结构。B+ 树索引是 B+ 树在数据库中的一种实现,是最常见也是数据库中使用最为频繁的一种索引。 从最早的平衡二叉树演化而来的。B+ 树是由二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree)逐步优化而来。 那么为什么mysql的索引选择B+数呢? 红黑树也可以作为数据结构也可以用来实现索引,但是文件系统以及数据库系统普遍采用B树或者B+树,这里结合计算的组成原理来深入的分析。 一般来说

MySQL 架构与历史

此生再无相见时 提交于 2020-08-08 05:21:44
1.0 前言 本篇是村民新坑的开始,村民最近在看《 高性能 MySQL 》这本书,村民在看的是第三版,仅涵盖 MySQL 5.5,虽然最新的 MySQL 已经是 8.0 版本,但后者肯定是在前者的基础上,因此学习价值还是很大的。这系列村民会基本以一章节一篇的形式记录村民对书中内容的摘抄整理及笔记,没什么新意,仅仅算是一种自娱自乐的分享,对这本书感兴趣的同学当然也可以买来看看。 本章概要地描述了 MySQL 的服务器架构、各种存储引擎之间的主要区别,以及这些区别的重要性。另外也会回顾一下 MySQL 的历史背景和基准测试,并试图通过简化细节和演示案例来讨论 MySQL 的原理。 1.1 MySQL 逻辑架构 MySQL 逻辑架构图能帮助我们清晰 MySQL 各组件之间如何协同工作,也会有助于我们深入理解 MySQL 服务器。 最上层的服务并不是 MySQL 所独有的,大多数基于网络的客户端 / 服务端的工具或者服务都有类似的架构。比如连接处理、授权认证、安全等等。 第二层架构涵盖了大多数 MySQL 的核心服务功能,包括 查询解析、分析、优化、缓存以及所有的内置函数 (日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。 第三层包含了存储引擎。 存储引擎负责 MySQL 中数据的存储和提取 。和 GNU/Linux 下的各种文件系统一样

Mysql 表锁

纵然是瞬间 提交于 2020-08-08 02:35:54
一.分类: 二.创建示例表: create table mylock( id int not null primary key auto_increment, name varchar(20) ) engine myisam; insert into mylock(name)values('a'); insert into mylock(name)values('b'); insert into mylock(name)values('c'); insert into mylock(name)values('d'); insert into mylock(name)values('e'); select * from mylock; 三.表锁(偏读)示例 偏向MyISAM存储引擎,开销小,加锁快;无死锁;锁定力度大(表锁)发生锁冲突的概率最高,并发度最低。 3.1.读锁: 会话1 lock table mylock read; 该 会话能执行的操作: 1.select * from mylock; 不能执行的操作: 1.update mylock set name='a2' where id=1; 不能更新该表 2.select * from dept; 不能查询其他表 其他会话 可以查询mylock表 不可以更新mylock表(会进入阻塞状态,直到锁释放) 3.2写锁: 会话1

mysql的三种安装方式

孤者浪人 提交于 2020-08-07 21:41:02
中科院镜像站安装:http://mirrors.ustc.edu.cn 使用 rpm -ivh 依次下载安装common, libs, client, devel, server mysql-community-common-5.7.26-1.el7.x86_64.rpm mysql-community-libs-5.7.26-1.el7.x86_64.rpm mysql-community-client-5.7.26-1.el7.x86_64.rpm mysql-community-devel-5.7.26-1.el7.x86_64.rpm mysql-community-server-5.7.26-1.el7.x86_64.rpm #官网安装: #下载mysql源:https://dev.mysql.com/downloads/repo/yum/ wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm #安装mysql:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/ #安装源 sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm #查看包信息: yum

MySQL的COUNT语句,竟然都能被面试官虐的这么惨!?

早过忘川 提交于 2020-08-07 19:38:53
关于数据库中行数统计,无论是MySQL还是Oracle,都有一个函数可以使用,那就是COUNT,就是这个常用的COUNT函数,却暗藏着很多玄机,尤其是在面试的时候,一不小心就会被虐。 1、COUNT有几种用法? 2、COUNT(字段名)和COUNT(*)的查询结果有什么不同? 3、COUNT(1)和COUNT(*)之间有什么不同? 4、COUNT(1)和COUNT(*)之间的效率哪个更高? 5、为什么《阿里巴巴Java开发手册》建议使用COUNT(*) 6、MySQL的MyISAM引擎对COUNT(*)做了哪些优化? 7、MySQL的InnoDB引擎对COUNT(*)做了哪些优化? 8、上面提到的MySQL对COUNT(*)做的优化,有一个关键的前提是什么? 9、SELECT COUNT(*) 的时候,加不加where条件有差别吗? 10、COUNT(*)、COUNT(1)和COUNT(字段名)的执行过程是怎样的? 以上10道题,如果您可以全部准确无误的回答的话,那说明你真的很了解COUNT函数了,如果有哪些知识点是不了解的,那么本文正好可以帮你答疑解惑。 1、认识COUNT 关于COUNT函数,在MySQL官网中有详细介绍: 简单翻译一下: 1、COUNT(expr) ,返回SELECT语句检索的行中expr的值不为NULL的数量。 结果是一个BIGINT值。 2

IdentityServer4使用EFCore生成MySql Specified key was too long; max key length is 1000 bytes

笑着哭i 提交于 2020-08-07 10:31:42
IdentityServer4中,使用efcore生成PersistedGrant数据库时报错,错误信息如下: fail: Microsoft.EntityFrameworkCore.Database.Command[20102] Failed executing DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] CREATE INDEX `IX_PersistedGrants_SubjectId_ClientId_Type` ON `PersistedGrants` (`SubjectId`, `ClientId`, `Type`); Failed executing DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30'] CREATE INDEX `IX_PersistedGrants_SubjectId_ClientId_Type` ON `PersistedGrants` (`SubjectId`, `ClientId`, `Type`); ... Specified key was too long; max key length is 1000 bytes 在mysql中建立索引时