bootstrap table无法服务器分页_Java修行第036天---MySQL中的子查询,分页语句,三大范式...

学习目标:

1.掌握子查询

2.了解正则表达式

3.理解索引的作用和创建索引

4.了解用户管理

5.掌握分页语句

6.了解执行计划和数据库引擎

7.理解数据库设计的三大范式

综合程序图:

949ca65c7a36dd5de71a5a96745efa8c.png

1 子查询知识点:

子查询可以放在where子句,from子句,having子句后面

f976fadcdddfa3530c616eca4d9f1f02.png

使用原则:

1). 放在()里面

2). 子查询放在比较条件的右面

3). 单行子查询中用单行运算符,多行子查询用多行 运算符

单行子查询运算符: = , > , < , >= , <= , <>

多行子查询运算符: in and all

f215f1ff3e3ca1e4dbf723b93f000a28.png

2 正则表达式知识点:

MySQL允许正则表达式定义字符创的搜索条件,性能高于like

可对整数类型字符类型检索

使用regexp关键字表时正则表达

默认湖绿大小写,使用大小写,需要binary 关键字

正则表达式模式和含义

^ 在正则表达式中表示开始

$ 表示以....结尾

. 代表任意一个字符

* 表示 匹配0个或多个字符,在它之前必须有内容

+ 表示 匹配1个或多个字符,在它..........................

? 表示 匹配0次或1次

'|' 表示 或者的意思

'[a-z]' 包含在a-z字符以内的

{n} 表示固定的次数 --列如,姓名中包含连续2个'e'的雇员,此时'e{2}',注意:是连续的两个2!!

如果条件不想要连续 则 'e.{2}'

{n,m} 表示最小到最大范围 ---比如: 出现任意1个e或2个e的 'e.{1,2}'

3 索引

MySQL 索引的建立对于 MySQL 的高效运行是很重要的,索引可以大大提高 MySQL的检索速度

MySQL 中的索引类型

(1)普通索引

是最基本的索引,它没有任何限制。在创建索引时,可以指定索引长度。length 为可选参数,表示索引的长度,只有字符串类型的字段才能指定索引长度,如果是 BLOB 和 TEXT 类型,必须指定 length。

查询索引:SHOW INDEX FROM table_name

创建索引时需要注意:

如果指定单列索引长度,length 必须小于这个字段所允许的最大字符个数

三种创建方式:

1 直接创建索引

CREATE INDEX index_name ON table(column(length))

2 修改表示添加索引

ALTER TABLE table_name ADD INDEX index_name (column(length))

3 创建表时指定索引

CREATE TABLE `table` (COLUMN TYPE , PRIMARY KEY (`id`), INDEX index_name (column(length)))

修改表添加索引

ALTER TABLE table_name ADD INDEX index_name (column(length))

删除索引

DROP INDEX index_name ON table

(2)唯一索引

唯一索引与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。

创建唯一索引

CREATE UNIQUE INDEX indexName ON table(column(length))

修改表添加唯一索引

ALTER TABLE table_name ADD UNIQUE indexName (column(length))

创建表时指定唯一索引

CREATE TABLE `table` (COLUMN TYPE , PRIMARY KEY (`id`), UNIQUE index_name (column(length)))

(3)主键索引

主键索引是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。

修改表添加主键索引

ALTER TABLE 表名 ADD PRIMARY KEY(列名)

创建表时指定主键索引

CREATE TABLE `table` (COLUMN TYPE , PRIMARY KEY(column))

(4)组合索引

组合索引是指使用多个字段创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用(最左前缀原则)

最左前缀原则 --就是最左优先。

如:我们使用表中的 name,address,salary 创建组合索引,那么想要组合索引生效,我们只能使用如下组合:

name/address/salary

name/address

name/

如果使用 addrees/salary 或者是 salary 则索引不会生效。

修改添加组合索引

ALTER TABLE table_name ADD INDEX index_name (column(length),column(length))

创建表时创建组合索引

CREATE TABLE `table` (COLUMN TYPE , INDEX index_name (column(length),column(length)))

(5)全文索引

修改添加全文索引

ALTER TABLE table_name ADD FULLTEXT index_content(content)

创建表时创建全文索引

CREATE TABLE `table` (COLUMN TYPE , FULLTEXT index_name (column))

删除全文索引

DROP INDEX index_name ON table

ALTER TABLE table_name DROP INDEX index_name

使用全文索引

全 文 索 引 的 使 用 与 其 他 索 引 不 同 。 在 查 询 语 句 中 需 要 使 用 match(column)

against(‘content’) 来检索数据。 全文索引基本单位是"词".

4 MySQL中的用户管理

MySQL是一个多有用户的数据库系统,分为 最高权限root 用户 和 root用户创建的普通用户

(1)MySQL创建用户

create user username identified by 'password'

(2)查看用户

SELECT USER,NOST FROM USER(该表位于 mysql 库中)

(3)删除用户

DROP USER username@localhost

(4)分配权限

新用户创建完后是无法登陆的,需要分配权限。

GRANT 权限 ON 数据库.表 TO 用户名@登录主机 IDENTIFIED BY "密码" GRANT ALL

PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password' 登陆主机:% 匹配所有主机

localhost localhost 不会被解析成 IP 地址,直接通过 UNIXsocket 连接127.0.0.1 会通过 TCP/IP 协议连接,并且只能在本机访问;::1 ::1 就是兼容支持 ipv6 的,表示同 ipv4 的 127.0.0.1

权限列表

ALTER: 修改表和索引。

CREATE: 创建数据库和表。

DELETE: 删除表中已有的记录。

DROP: 删除数据库和表。

INDEX: 创建或删除索引。

INSERT: 向表中插入新行。

SELECT: 检索表中的记录。

UPDATE: 修改现存表记录。

FILE: 读或写服务器上的文件。

PROCESS: 查看服务器中执行的线程信息或杀死线程。

RELOAD: 重载授权表或清空日志、主机缓存或表缓存。

SHUTDOWN: 关闭服务器。

ALL: 所有权限,ALL PRIVILEGES 同义词。

USAGE: 特殊的 "无权限" 权限

(5) 通过 Navicat 工具管理用户

5 MySQL 分页查询

(1) MySQL 分页查询原则

在 MySQL 数据库中使用 LIMIT 子句进行分页查询。

MySQL 分页中开始位置为 0。

分页子句在查询语句的最后侧。

(2) LIMIT 子句

语法格式

SELECT 投影列 FROM 表名 WHERE 条件 ORDER BY LIMIT 开始位置,查询数量。

(3)LIMIT OFFSET 子句

语法格式

SELECT 投影列 FROM 表名 WHERE 条件 ORDER BY LIMIT 查询数量 OFFSET 开始位置

6 MySQL中的执行计划 (了解)

MySQL执行计划

在MySQL中可以通过explain 关键字模拟优化器执行sql语句,从而知道MySQL是如何执行sql语句的

(1)MySQL整个查询执行过程

客户端向 MySQL 服务器发送一条查询请求

服务器首先检查查询缓存,如果命中缓存,则立刻返回存储在缓存中的结果。否则进入下一阶段

服务器进行 SQL 解析、预处理、再由优化器生成对应的执行计划

MySQL 根据执行计划,调用存储引擎的 API 来执行查询

将结果返回给客户端,同时缓存查询结果

(2)启动执行计划

explain select 投隐列 from 表名 where 条件

(3)explain的列解释 --比较重要的 id, select_type, table , type

(3.1)ID表示执行顺序

如何顺序执行?

id 值相同时表示从上向下执行

id 值相同被视为一组

如果是子查询,id 值会递增,id 值越高,优先级越高

(3.2)select_type 表示当前执行的查询类型 ---判断先查询什么

simple:表示查询中不包含子查询或者 union

primary:当查询中包含任何复杂的子部分,最外层的查询被标记成 primary

derived:在 from 的列表中包含的子查询被标记成 derived

subquery:在 select 或 where 列表中包含了子查询,则子查询被标记成 subquery

union:两个 select 查询时前一个标记为 PRIMARY,后一个标记为 UNION。union 出现

在 from 从句子查询中,先执行id为2的union查询,在进行主查询.最后在拼接它们的结果

unionresult:从 union 表获取结果的 select 被标记成 union result 。

(3.3)table

显示这一行的数据是关于哪张表的。

(3.4)type

这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为 system、const、

eq_reg、ref、range、index 和 ALL。

system:表中只有一行数据。属于 const 的特例。如果物理表中就一行数据为 ALL

const :查询结果最多有一个匹配行。只读一次,查询很快。一般情况下把主键或唯一索引作为唯一条件的查询都是 const

eq_ref:查询时查询外键表全部数据。且外键表中外键列中数据不能有重复数据

ref:相比 eq_ref,不对外键列有强制要求,里面的数据可以重复

range:把这个列当作条件只检索其中一个范围。常见 where 从句中出现 between、<、in 等。主要出现在索引的列中

index:这个连接类型对前面的表中的每一个记录联合进行完全扫描(比 ALL 更好,因为索

引一般小于表数据)

(3.5)Key

实际使用的索引。如果为 NULL,则没有使用索引

(3.6)key_len

表示索引中使用的字节数,查询中使用的索引的长度(最大可能长度),并非实际使用长度,理论上长度越短越好

(3.7)ref

显示索引的哪一列被使用了,如果可能的话,是一个常量 const

MySQL 数据库存储引擎介绍

(1)查看数据库引擎

SHOW ENGINES

(2)MySQL 数据库引擎介绍

(2.1)ISAM(Indexed Sequential Access Method -索引顺序访问法) --现在MYSAM被替换掉

ISAM 是最早的有数据引擎,执行读取操作的速度很快,而且不占用大量的内存和存储资源。ISAM 的两个主要不足之处在于,它不支持事务处理,也不能够容错。

(2.2)MyISAM

MyISAM 是 MySQL 的 ISAM 扩展格式和缺省的数据库引擎。除了提供 ISAM 里所没有的索引和字段管理的大量功能,查询效率高,但不支持事务不支持外键MyISAM 格式的一个重要缺陷就是不能在表损坏后恢复数据.如果使用该数据库引擎,会生成三个文件:

.frm:表结构信息

.MYD:数据文件

.MYI:表的索引信息

(2.3)InnoDB

查询速度相对较低一些,但是innoDB支持事物支持外键

(3)修改数据库级引擎

修改 MySQL 的 my.ini 配置文件

C:ProgramDataMySQLMySQL Server 5.7

default-storage-engine=数据库引擎名称

重启 MySQL

(4)修改表级存储引擎

ALTER TBALE tableName engine=InnoDB

查询表的存储引擎

show create table table_name;

如何选择这几种引擎:

1. 是否要支持事务,如果要请选择 innodb,如果不需要可以考虑 MyISAM

2. 如果表中绝大多数都只是读查询,可以考虑 MyISAM,如果既有读写也挺频繁,请使用 InnoDB。

3. 系统奔溃后,MyISAM 恢复起来更困难,能否接受;

4. MySQL5.5 版本开始 Innodb 已经成为 Mysql 的默认引擎(之前是 MyISAM),说明其优势是有目共睹的,如果你不知道用什么,那就用 InnoDB,至少不会差

7 数据库设计范式入门

(1)数据库设计范式的由来 (NF=NormalForm)

我们使用数据库时必须保证数据库设计的合理性,因为数据库设计关系到整个系统的架构,关系到后续开发效率和运行效率所以为了保证数据库设计水平,需要遵循一定规则,在关系型数据库中这种规则就是范式.

简而言之, 范式是复合某一种设计要求的总结想要设计一合理的关系型数据库,必须满足一定的范式

(2)范式的作用

使结构合理;冗余更小;能尽量避免插入删除修改异常

各个范式是依次嵌套包含的

范式越高,设计质量越高,在实现设计中也越难实现

一般数据库设计,达到第三范式,即可避免异常的出现

(3)常用范式

第一范式

要求:

最基本的范式

数据库每一列都是不可分割的基本数据项,同一列不能有多个值

简单说就是每列保持原子性

第二范式

要求:

第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对在联合主键而言)即在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中

第二范式就是来限制多对多的范式

第三范式

要求:

确保数据表中的每一列数据都和主键直接相关,而不能间接相关

属性不依赖于其他非属性主键

第三范式就是来限制一对多的范式

总结起来说三种范式:

第一范式保证这些列的原子性不能拿再分

第二范式用来限制多对多关系,可以建立一个中间表,通过外键和联合主键,来关联两张表

第三范式是限制一对多关系,是来建立一个外键,通过外键来引用主表信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值