MySQL学习day-34:子查询与分页

一、子查询

可以将子查询放在许多的 SQL 子句中,包括:WHERE 子句; HAVING 子句;FROM 子句。

使用子查询的原则:

1)子查询放在圆括号中。 

2)将子查询放在比较条件的右边。

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

1.单行子查询:

语法:select  列名...  from 表名  where  列名 运算符(select查询语句)

2.多行子查询:

3.MySQL 中的正则表达式:

1)MySQL 中允许使用正则表达式定义字符串的搜索条件,性能要高于 like。

2)MySQL 中的正则表达式可以对整数类型或者字符类型检索。

3)使用 REGEXP 关键字表示正则匹配。 

4)默认忽略大小写,如果要区分大小写,使用 BINARY关键字。

(1)正则表达式的模式及其含义:

1)”^”:字符串的开始;

2)$:字符串的结尾;

3)’.’:任何一个字符;

4)[…]:在方括号内的任何字符列表;

5)[^...]:非列在方括号内的任何字符;

6)p1|p2|p3:交替匹配任何模式p1,p2或p3;

7)*:零个或多个前面的元素;

8)+:前面元素的一个或多个实例;

9){+}:前面的元素的n个实例;

10){m,n}:m到n个实例前面的元素。

二、索引

索引可以大大提高 MySQL 的检索速度。

1.MySQL索引的类型:

普通索引;唯一索引;主键索引;组合索引;全文索引。

2.普通索引:

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

创建索引时需要注意: 如果指定单列索引长度,length 必须小于这个字段所允许的最大字符个数。

查询索引:show index from  表名;

(1)直接创建索引:create index 索引名 on 表名(列名(长度));

(2)修改表添加索引:alter table 表名 add index 索引名(列名(长度));

(3)创建表时指定索引列:index index_name(列名(长度)));

(4)删除索引:drop index 索引名 on 表名;

3.唯一索引:

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

(1)创建唯一索引:create unique index 索引名 on 表名(列名(length));

(2)修改表添加唯一索引:alter table 表名 add unique 索引名(列名(length));

(3)创建表时指定索引列:unique index  索引名(列名(length);

4.主键索引:

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

(1)修改表添加的主键索引:alter table 表名 add primary key(列名);

(2)创建表时指定索引:primary key(列名);

5.组合索引:

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

(1)修改添加组合索引:

alter table 表名 add index 索引名(列名(length),列名2(length));

(2) 创建表时创建组合索引:index 索引名(列名(length),列名(length));

6. 全文索引:

全文索引(FULLTEXTINDEX)主要用来查找文本中的关键字,而不是直接与索引中的值 相比较。 FULLTEXT 索引跟其它索引大不相同,它更像是一个搜索引擎,而不是简单的 where 语句的参数匹配。FULLTEXT 索引配合 match against 操作使用,而不是一般的 where 语句 加 like。

(1)创建全文索引:

1)修改添加全文索引:alter table 表名 add fulltext 索引名(content);

2)创建表时创建全文索引:FULLTEXTindex_name (column);

(2)删除全文索引:

drop 索引名 on 表名|alter table 表名 drop 索引名;

(3)使用全文索引:

全 文 索 引 的 使 用 与 其 他 索 引 不 同 。 在 查 询 语 句 中 需 要 使 用 match(column) against(‘content’) 来检索数据。

语法:SELECT 投影列 FROM 表名 WHEREMATCH(全文索引列名)AGAINST(‘搜索内容’);

三、用户管理:

MySQL 是一个多用户的数据库系统,按权限,用户可以分为两种:root 用户,超级管 理员,和由 root 用户创建的普通用户。

1.MySQL创建用户:

CREATE USER 用户名  IDENTIFIED  BY '密码';

(1)查看用户:

SELECT USER,NOST FROM  用户名(该表位于 mysql 库中);

(2)删除用户:

DROPUSERusername@localhost;

2.分配权限:

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

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

(1)权限列表:

1)ALTER: 修改表和索引。 

2)CREATE: 创建数据库和表。 

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

4)DROP: 删除数据库和表。 

5)INDEX: 创建或删除索引。 

6)INSERT: 向表中插入新行。 

7)SELECT: 检索表中的记录。 

8)UPDATE: 修改现存表记录。

9)ALL: 所有权限,ALLPRIVILEGES 同义词。

3.通过 Navicat 工具管理用户:

(1)创建用户:

(2)分配权限:

(3)连接数据库:



四、MySQL 分页查询:

MySQL 分页查询原则:

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

2)MySQL 分页中开始位置为 0。

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

1.limit子句:

语法格式:

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

五、 MySQL 数据库存储引擎介绍

1.查看数据库引擎:

SHOW ENGINES;

2. MySQL 数据库引擎介绍:

(1)ISAM(IndexedSequentialAccessMethod):

ISAM 是一个定义明确且历经时间考验的数据表格管理方法,它在设计之时就考虑到数 据库被查询的次数要远大于更新的次数。因此,ISAM 执行读取操作的速度很快,而且不占 用大量的内存和存储资源。ISAM 的两个主要不足之处在于,它不支持事务处理,也不能够 容错。如果你的硬盘崩溃了,那么数据文件就无法恢复了。如果你正在把 ISAM 用在关键任 务应用程序里,那就必须经常备份你所有的实时数据,通过其复制特性,MYSQL 能够支持 这样的备份应用程序。

(2)MyISAM:

MyISAM 是 MySQL 的 ISAM 扩展格式和缺省的数据库引擎。除了提供 ISAM 里所没有 的索引和字段管理的大量功能,MyISAM 还使用一种表格锁定的机制,来优化多个并发的 读写操作,其代价是你需要经常运行 OPTIMIZETABLE 命令,来恢复被更新机制所浪费的 空间。MyISAM 还有一些有用的扩展,例如用来修复数据库文件的 MyISAMCHK 工具和用 来恢复浪费空间的 MyISAMPACK 工具。MYISAM 强调了快速读取操作,这可能就是为什 么 MySQL 受到了 WEB 开发如此青睐的主要原因:在 WEB 开发中你所进行的大量数据操 作都是读取操作。所以,大多数虚拟主机提供商和 INTERNET 平台提供商只允许使用 MYISAM 格式。MyISAM 格式的一个重要缺陷就是不能在表损坏后恢复数据。 注意:MyISAM 引擎使用时必须经常使用 OptimizeTable 命令清理空间;必须经常备份 所有实时数据。工具有用来修复数据库文件的 MyISAMCHK 工具和用来恢复浪费空间的 MyISAMPACK 工具。

如果使用该数据库引擎,会生成三个文件:

1) .frm:表结构信息 ;

2).MYD:数据文件 ;

3).MYI:表的索引信息;

(3)InnoDB:

InnoDB 数据库引擎都是造就MySQL 灵活性的技术的直接产品, 这项技术就是 MYSQL++ API。在使用 MYSQL 的时候,你所面对的每一个挑战几乎都源于 ISAM 和 MyISAM 数据库 引擎不支持事务处理(transactionprocess)也不支持外键。尽管要比 ISAM 和 MyISAM 引擎 慢很多,但是 InnoDB 包括了对事务处理和外来键的支持,这两点都是前两个引擎所没有的。 如前所述,如果你的设计需要这些特性中的一者或者两者,那你就要被迫使用后两个引擎中 的一个了。

MySQL 官方对 InnoDB 是这样解释的:InnoDB 给 MySQL 提供了具有提交、回滚和崩溃 恢复能力的事务安全(ACID 兼容)存储引擎。

(4)innodb 与 myisam 区别:

1)InnoDB 支持事务,MyISAM 不支持,对于 InnoDB 每一条 SQL 语言都默认封装成事 务,自动提交,这样会影响速度,所以最好把多条 SQL 语言放在 begin 和 commit 之间,组 成一个事务; 

2)InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败; 

3)InnoDB 是聚集索引,数据文件是和索引绑在一起的,必须要有主键,通过主键索引 效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此, 主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据 文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。 

4)InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而 MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度 很快; 5.Innodb 不支持全文索引,而 MyISAM 支持全文索引,查询效率上 MyISAM 要高; (在 MySQL5.7 版本中已经支持全文索引)。

如何选择:

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

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

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

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

六、三大范式

1.引入三大范式:

(1) 必须保证数据库设计的合理性?

1)数据库设计关系整个系统的架构,关系到后续的开发效率和运行效率;

2)数据库的设计主要包含了设计表结构和表之间的联系。

(2)如何是合理数据库?

1)结构合理;

2)冗余较小;

3)尽量避免插入删除修改异常;

(3)如何才能保证数据库设计水平?

1)遵循一定的规则;

2)在关系型数据库中这种规则就称为范式;

(4)什么是范式(NF= NormalForm)?

1)范式是符合某一种设计要求的总结。

2)要想设计一个结构合理的关系型数据库,必须满足一定的范式 。

(5)范式的分类:

1)第一范式;第二范式;第三范式;Boyce Codd范式=NCNF;由Boyce和Codd提出的; 比3NF又进了一步;通常认为是修正的第三范式.;第四范式;第五范式

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

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

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

2.第一范式:

最基本的范式;

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

2)简单说就是要确保每列保持原子性;

3)第一范式的合理遵循需要根据系统的实际需求来定;

示例:

1)用户表(用户名,家庭地址);

2)用户表(用户名,省,城市,详细地址);

3.第二范式:

1) 第二范式需要确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关(主要针对联合主键而言)。

2)即在一个数据库表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。

示例:

学号和课程编号作为联合主键;课程名称只依赖于课程编号,而和学号没有关系。

4.第三范式:

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

2)属性不依赖于其他非主属性。


5.范式的优缺点:

(1)优点:

1)结构合理;

2)冗余较小;

3)尽量避免插入删除修改异常;

(2)缺点:

1)性能降低;

2)多表查询比单表查询速度慢;

(3)数据库表之间的关系:

1)一对一:学生和学生证;

2)一对多:学生和班级;

3)多对多:学生和课程;

(4)总结:

1)使用范式可以减少冗余,但是会降低性能;

2)特定表的的设计可以违反第三范式,增加冗余提高性能;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容

  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,729评论 0 30
  • 一、MySQL优化 MySQL优化从哪些方面入手: (1)存储层(数据) 构建良好的数据结构。可以大大的提升我们S...
    宠辱不惊丶岁月静好阅读 2,425评论 1 8
  • 索引 数据库中的查询操作非常普遍,索引就是提升查找速度的一种手段 索引的类型 从数据结构角度分 1.B+索引:传统...
    一凡呀阅读 2,905评论 0 8
  • 这篇文章主要涉及到MySQL的知识点: 索引(包括分类及优化方式,失效条件,底层结构) sql语法(join,un...
    一根薯条阅读 2,707评论 0 8
  • 目录 1 介绍 欢迎! 更新日志 新概念 2 Ionic 2 基础 第一课:生成一个Ionic 2应用 第二课:剖...
    老牛啃码阅读 247评论 0 0