首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

MySQL初级篇(二)

一、列属性1、 主键主键(primary key):又叫主键约束,是表中的一个或多个字段,它的值用于唯一标识表中的某一条记录。...如时间戳等主键应由计算机自动生成一般来说就是id,特殊情况除外2、 唯一键唯一键(unique key):又叫唯一约束,其保证在一个字段或一组字段里的数据与表中其他行的数据相比是唯一的。...表名123452、条件限制2.1 wherewhere子句用于规定选择的标准,写法:select 字段 from 表名 where2.2 havinghaving与where相似,但having发生在内存中...,然后每条与另外一张表进行连接,不管能不能匹配上条件,最终都会保留。...内连接内连接[inner] join:从左表中取出每一条记录,去右表中与所有的记录进行匹配,匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留。

16960

《MySQL核心知识》第6章:查询语句

limit限制查询结果的数量 在SQLSERVER中是使用「TOP」关键字,而在MYSQL中是使用「LIMIT」关键字 LIMIT[位置偏移量],行数 第一个“位置偏移量”参数指示MYSQL从哪一行开始显示...,是一个可选参数,如果不指定“位置偏移量” 将会从表中第一条记录开始(第一条记录的位置偏移量是0,第二天记录的位置偏移量是1......以此类推) 第二个参数“行数”指示返回的记录条数 SELECT *...返回tbl2表的所有num2列,然后将tbl1中的num1的值与之进行比较,只要大于num2的任何一个值,即为符合查询条件的结果 SELECT num1 FROM tbl1 WHERE num1>ANY...(SELECT num2 FROM tbl2) ALL关键字接在一个比较操作符的后面,表示与子查询返回的所有值比较为TRUE,则返回TRUE SELECT num1 FROM tbl1 WHERE...各个SELECT语句之间使用UNION或UNION ALL关键字分隔 UNION:执行的时候删除重复的记录,所有返回的行都是唯一的 UNION ALL:不删除重复行也不对结果进行自动排序 SELECT

78630
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何写优雅的SQL原生语句?

    只有符合的记录才会被插入到虚拟表T3中。 5.group by group by 子句将中的唯一的值组合成为一组,得到虚拟表T4。...HAVING子句主要和GROUP BY子句配合使用,having筛选器是第一个也是为唯一一个应用到已分组数据的筛选器。 8. select 执行select操作,选择指定的列,插入到虚拟表T6中。...(注意:事实上如果应用了group by子句那么distinct是多余的,原因同样在于,分组的时候是将列中唯一的值分成一组,同时只为每一组返回一行记录,那么所以的记录都将是不相同的。...所以子查询非常有必要,它能够对原始的数据首先进行排序,分数最高的那条就是第一条对应的第一条记录。...(*),前者在第一个匹配记录处返回,后者需要遍历所有匹配记录 Where子句中列的顺序与需使用的索引顺序保持一致,不是所有数据库的优化器都能对此顺序进行优化,保持良好编程习惯(索引相关) 不要在where

    1.9K20

    MySQL索引详细

    不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的列有一个索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,...4.1 B+树特点 B+树是B树的一种变形,比B树具有更广泛的应用 为所有叶子结点增加一个链指针; 所有关键字都在叶子结点出现; 非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中; 4.2为什么使用...简介 1.如果一个主键被定义了,那么这个主键就是作为聚集索引 如果没有主键被定义,那么该表的第一个唯一非空索引被作为聚集索引 如果没有主键也没有合适的唯一索引,那么innodb内部会生成一个隐藏的主键作为聚集索引...5.2 非聚簇索引(辅助索引) 将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置。...六、无法使用索引 情况一:查询语句中使用like关键字 ​ 如果使用like关键字,并且匹配字符串时的第一个字符为“%”,那么就无法查询索引树,因为不知道要查询什么。但如果%在后面,就可以 使用。

    48730

    MySQL(九)之数据表的查询详解(SELECT语法)一

    ,还有多表查询与子查询都是应用十分广泛的。...二、单表查询   单表查询的主要操作有:查询所有字段、查询指定字段、查询指定记录、带IN关键字的查询、带BETWEEN AND 的范围查询、带LIKE的字符匹配查询、查询空值                 ...2.3、查询指定记录 指定记录:也就是按条件进行查询,将满足一定条件的记录给查询出来,使用WHERE关键字。     ...//查询字段名不是NULL的记录  2.8、 带AND的多条件查询     AND: 相当于"逻辑与",也就是说要同时满足条件才算匹配     select * from book where book.s_id...2.13、使用LIMIT限制查询结果的数量 LIMIT[位置偏移量] 行数  通过LIMIT可以选择数据库表中的任意行数,也就是不用从第一条记录开始遍历,可以直接拿到 第5条到第10条的记录,也可以直接拿到第

    3.4K110

    玩转Mysql系列 - 第24篇:如何正确的使用索引?

    说一下b+树的几个特点: 叶子节点(最下面的一层)存储关键字(索引字段的值)信息及对应的data,叶子节点存储了所有记录的关键字信息 其他非叶子节点只存储关键字的信息及子节点的指针 每个叶子节点相当于...f开头的记录可能存在于[P3,P6)这个范围的页内,即P3、P4、P5这三个页中 加载P3这个页,在内部以二分法找到第一条f开头的记录,然后以链表方式继续向后访问P4、P5中的记录,即可以找到所有已f开头的数据...采用上面这种方法找到8的记录,第一个数组中更快的一些。因为第二个数组中含有8的比例更多的,需要访问以及匹配的次数更多一些。...所以我们创建索引的时候,尽量选择区分度高的列作为索引。...`唯一记录检索`。

    2.1K20

    Mysql索引一篇就够了

    ,其定义基本与 B 树相同,除了: 非叶子节点的子树指针和关键字个数相同 非叶子节点的子树指针 P[i],指向关键字值 [K[i],K[i+1]) 的子树 非叶子节点仅用来索引,数据都保存在叶子节点 所有叶子节点均有一个链指针指向下一个叶子节点...所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。 B+ 树更有利于对数据库的扫描 B+ 树只要遍历叶子结点就可以遍历到所有数据。...这种索引叫做聚集索引(密集索引)(索引和数据保存在同一文件中): 若一个主键被定义,该主键作为聚集索引; 若没有主键定义,该表的第一个唯一非空索引作为聚集索引; 若均不满足,则会生成一个隐藏的主键( MySQL...与 MyISAM 索引的不同是 InnoDB 的辅助索引 data 域存储相应记录主键的值而不是地址。...索引失效 最左前缀匹配原则,遇到范围查询 like 模糊查询,第一个位置使用 '%' 没有查询条件 表比较小时,全表扫描速度比索引速度快时,索引失效 (由于索引扫描后要利用索引中的指针去逐一访问记录,

    26730

    5分钟搞懂MySQL半连接优化⭐️多种半连接的优化策略

    ,由优化器评估哪个表为驱动表的成本最低 使用半连接不仅需要将子查询转化为内连接,还需要对其进行去除重复记录 MySQL提供几种半连接策略进行去重,默认情况下开启所有半连接策略semijoin=on FirstMatch...**table pullout** LooseScan 在我们的案例中,班级编码肯定不是唯一的,因此不能使用这种策略 当不能使用唯一值时,就需要通过其他手段进行去重 当物化表作为驱动表并且包含关联条件的二级索引时...相同时,只需要取第一条相同的记录进行关联,然后跳过后续相同的记录即可(图中第一条和第二天记录) DuplicateWeedout duplicateweedout=on 默认开启DuplicateWeedout...FirstMatch通过循环外层查询,从外层查询获取记录,将记录拿到内层表中进行匹配,如果满足条件则放入结果集并停止在内层查找,后续继续循环外层查询,以此保证去重 TablePullout通过使用主键值或者唯一索引...,让其记录没有重复值来保证去重 LooseScan通过物化表为驱动表并且拥有查询列的二级索引,保证查询列有序,当查询列相同时,拿第一条记录进行匹配,后续相同记录跳过,以此保证去重 DuplicateWeedout

    36922

    Mysql 中令人稀里糊涂的Explain

    : id : 在一个大的查询语句中每个SELECT关键字都对应一个唯一的id select_type : SELECT关键字对应的那个查询的类型 table : 表名 partitions : 匹配的分区信息...MATERIALIZED : 当查询优化器在执行包含子查询的语句时,选择将子查询物化之后与外层查询进行连接查询时,该子查询对应的select_type属性就是MATERIALIZED 。...如果采用Innodb存储引用,则输出的type类型依旧为ALL : const : 当我们根据主键或者唯一二级索引列与常数进行等值匹配时,对单表的访问方法就是const。...eq_ref : 在连接查询时,如果被驱动表是通过主键或者唯一二级索引列等值匹配的方式进行访问的(如果该主键或者唯一二级索引是联合索引的话,所有的索引列都必须进行等值比较),则对该被驱动表的访问方法就是...key1 > 'z’的第一条记录。

    33750

    MySQL慢查询优化 EXPLAIN详解

    ,将从该表中读取所有匹配的行。...注意,key_len的值可以告诉你在联合索引中MySQL会真正使用了哪些索引。 ref 表示使用哪个列或常数与索引一起来查询记录。...以下是这个字段的几个不同值的解释: distinct MySQL当找到当前记录的匹配联合结果的第一条记录之后,就不再搜索其他记录了。...当在 t2中找到一条匹配的记录时,这就意味着 t2.id 肯定不会都是null,就不会再在 t2 中查找相同id值的其他记录了。...排序程序根据连接的类型遍历所有的记录,并且将所有符合where条件的记录的要排序的键和指向记录的指针存储起来。这些键已经排完序了,对应的记录也会按照排好的顺序取出来。

    1.3K10

    1w字MySQL索引面试题(附md文档)

    如果没有显式指定,则MySQL系统会自动选择一个可以非空且唯一标识数据记录的列作为主键。...当再次插入7的时候,这棵树就会发生旋转 B+ 树和 B 树的差异: B+树中非叶子节点的关键字也会同时存在在子节点中,并且是在子节点中所有关键字的最大值(或最小)。...B+树中所有关键字都在叶子节点出现,叶子节点构成一个有序链表,而且叶子节点本身按照关键字的大小从小到大顺序链接。 9、一个b+树中大概能存放多少条索引记录?...业务需求唯一字段的时候,一般不考虑性能问题 【强制】业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。...主键(唯一索引)匹配 全值匹配(单值匹配) 最左前缀匹配 范围匹配 索引扫描 全表扫描 一般性建议 Ø 对于单键索引,尽量选择过滤性更好的索引(例如:手机号,邮件,身份证) Ø 在选择组合索引的时候,过滤性最好的字段在索引字段顺序中

    33920

    索引下推,yyds!

    在 MySQL5.5 中,由于没有索引下推,所以上面这个 SQL 的执行流程是这样的: 首先 MySQL 的 server 层调用存储引擎获取 username='1' 的第一条记录。...存储引擎找到 username='1' 的第一条记录后,在 B+Tree 的叶子结点中保存着主键 id,此时通过回表操作,去主键索引中找到该条记录的完整数据,并返回给 server 层。...由于 username+age 组成的复合索引只是一个普通索引,并不是唯一索引(如果是唯一索引,那么这个查询就到此结束了),所以还需要继续去搜索有没有满足条件的记录。...(或者上一个叶子结点),第二步返回的数据中有一个 next_record 属性,该属性就直接指向二级索引的下一条记录,找到下一条记录后,回表拿到所有数据并返回给 server 层,然后重复 3、4 步。...用了模糊匹配 'j%',在上篇文章中松哥已经和大家分享过了,这种情况其实也是能用上索引的,具体大家可以参考:其实 MySQL 中的 like 关键字也能用索引!。

    65220

    第05章_排序与分页

    在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。 # 2....MySQL 中使用 LIMIT 实现分页 格式: LIMIT [位置偏移量,] 行数 第一个 “位置偏移量” 参数指示 MySQL 从哪一行开始显示,是一个可选参数,如果不指定 “位置偏移量”,将会从表中的第一条记录开始...(第一条记录的位置偏移量是 0,第二条记录的位置偏移量是 1,以此类推);第二个参数 “行数” 指示返回的记录条数。...这样的好处就是 SELECT 不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回。 # 2.3 拓展 在不同的 DBMS 中使用的关键字可能不同。...FROM ( SELECT last_name,salary FROM employees ORDER BY salary DESC) WHERE rownum < 10; 得到与上述方法一致的结果

    16220

    MySQL 索引

    B+ 树的查找与 B 树不同,当索引部分某个结点的关键字与所查的关键字相等时,并不停止查找,应继续沿着这个关键字左边的指针向下,一直查到该关键字所在的叶子结点为止。 ?   ...因为 InnoDB 的数据文件本身要按主键聚集,所以 InnoDB 要求表必须有主键(MyISAM可以没有),如果没有显式指定,则 MySQL 系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列...第二个与 MyISAM 索引的不同是 InnoDB 的辅助索引 data 域存储相应记录主键的值而不是地址。换句话说,InnoDB 的所有辅助索引都引用主键作为 data 域。...将 P4 加载到内存中,采用二分法找到最有一个小于 105 的记录,即 100,然后通过链表从 100 开始向后访问,找到所有的 105 记录,直到遇到第一个大于 100 的值为止 1.4.3 范围查找...查询以f开头的所有记录,过程如下: ① 将 P1 数据加载到内存中 ② 在 P1 页的记录中采用二分法找到最后一个小于等于 f 的值,这个值是 f,以及第一个大于 f 的,这个值是 z,f 指向叶节点

    2K41

    MySQL排序与分页详解

    在对多列进行排序的时候,首先排序的第一列必须有相同的列值,才会对第二列进行排序。如果第一列数据中所有值都是唯一的,将不再对第二列进行排序。 2....MySQL中使用 LIMIT 实现分页 格式: LIMIT [位置偏移量,] 行数 第一个 “位置偏移量” 参数指示MySQL从哪一行开始显示,是一个可选参数,如果不指定“位置偏移量”,将会从表中的第一条记录开始...(第一条记录的位置偏移量是0,第二条记录的位置偏移量是1,以此类推); 第二个参数“行数”指示返回的记录条数。...这样的好处就是 SELECT 不需要扫描完整的表,只需要检索到一条符合条件的记录即可返回。 拓展 在不同的 DBMS 中使用的关键字可能不同。...ORDER BY annual_salary DESC, last_name ASC; 2.选择工资不在 8000 到 17000 的员工的姓名和工资,按工资降序,显示第21到40位置的数据 SELECT

    1.9K60

    最完整的Explain总结,SQL优化不再困难

    与条件连接相反,即使在右节点中找到几条匹配的记录,左节点 的表也只会返回一条记录。另外,右节点的表一条记录也不会返回。...在连接查询时,如果被驱动表是通过主键或者唯一二级索引列等值匹配的方式进行访问的(如果该主键或者唯一二级索引是联合索引的话,所有的索引列都必须进行等值比较),则对该被驱动表的访问方法就是eq_ref,比方说...ref 当通过普通的二级索引列与常量进行等值匹配时来查询某个表,那么对该表的访问方法就可能是ref 相比 eq_ref,不使用唯一索引,而是使用普通索引或者唯一性索引的部分前缀,索引要和某个值相比较,可能会找到多个符合条件的行...用于 primary key 或 unique key 的所有列与常数比较时,所以表最多有一个匹配行,读取1次,速度比较快。...此时mysql会根据联接类型浏览所有符合条件的记录,并保存排序关键字和行指针,然后排序关键字并按顺序检索行信息。这种情况下一般也是要考虑使用索引来优化的。

    64120

    开源IDS与IPS的搭建与使用 Suricata

    ,suricata 会停止扫描数据包,并跳到所有规则的末尾 drop ips 模式使用,如果匹配到之后则立即阻断数据包不会发送任何信息 reject 对数据包主动拒绝,接受者与发送中都会收到一个拒绝包...alert 记录所有匹配的规则并记录与匹配规则相关的数据包 协议:在规则中指定匹配那些协议,suricata 支持的协议要比 snort 多一些 TCP、UDP、ICMP、IP(同时用与 TCP 与 UDP...flowbits set , name 设置条件 flowbits isset, name 选择条件 一旦设置 flowbits 之后,第一条规则没有命中那么第二条规则即使命中了也不会显示出来..."; 这种写法,注意如果没有用内容修饰的话,ids 不会按照先后顺序去匹配的,只会在内容中匹配是否包含这2个值,必须用内容修饰来调整先后顺序,用 distance 0 来让第二个匹配项在第一个匹配项匹配位置之后匹配...100;depth 200; #代表了匹配数据包结束的位置,如果没有offset则是从开始位置计算,有offset则是从offset开始,此次则是从100字节开始匹配到200字节内的内容。

    5K21

    MySQL单表查询详细解析

    name,salary FROM employee WHERE salary NOT IN (3000,3500,4000,9000) ; #6:关键字LIKE模糊查询,模糊匹配,可以结合通配符来使用...    通配符’%’  #匹配任意所有字符     SELECT * FROM employee WHERE name LIKE 'eg%';     通配符’_’  #匹配任意一个字符     ...每个人都有唯一的id号,我count是计算一下分组之后每组有多少的id记录,通过这个id记录我就知道每个组有多少人了 关于集合函数,mysql提供了以下几种聚合函数:count、max、min、avg、...七、限制查询的记录数limit select * from t1 order by salary limit 3;  #默认起始位为0,即从第一条数据开始,总共显示3条数据 select * from...* from t1 where name regexp 'm{2}'      #匹配含有2个m的 对字符串匹配的方式: where name = 'ee'  #查找name是‘ee’的数据 where

    2.6K11

    一文带你剖析MySQL到底都有哪些常用的查询

    去重(过滤重复数据) 在 MySQL 中使用 SELECT 语句执行简单的数据查询时,返回的是所有匹配的记录。如果表中的某些字段没有唯一性约束,那么这些字段就可能存在重复值。...不指定初始位置 LIMIT 关键字不指定初始位置时,记录从第一条记录开始显示。显示记录的条数由 LIMIT 关键字指定。...如果第一个字段数据中所有的值都是唯一的,MySQL 将不再对第二个字段进行排序。...其语法格式如下: [NOT] LIKE '字符串' 其中: NOT :可选参数,字段中的内容与指定的字符串不匹配时满足条件。 字符串:指定用来匹配的字符串。...WITH ROLLUP WITH ROLLUP 关键字用来在所有记录的最后加上一条记录,这条记录是上面所有记录的总和,即统计记录数量。

    3.9K20

    SQL定义表(一)

    系统自动将有效提供的名称转换为有效的对应名称,以确保生成的名称是惟一的。持久化类名与对应的SQL表名之间的匹配是默认的。 可以使用SqlTableName类关键字来提供不同的SQL表名。...这些名称转换的注意事项与表不同:初始字符: % (percent):指定%作为模式名的第一个字符,表示相应的包为系统包,其所有类为系统类。...这是一种方便的方式来限定名称,以显式地指示应该使用系统范围的默认模式。 它在功能上与指定非限定名相同。 此关键字不能在DML语句中使用。...模式搜索路径当访问一个现有的表(或视图,或存储过程)进行DML操作时,将从模式搜索路径中提供一个非限定的名称。 按照指定的顺序搜索模式,并返回第一个匹配项。...#SQLCompile Path根据遇到的第一个匹配项解析不限定的名称。 如果搜索路径中列出的所有模式只有一个匹配项,则#Import解析非限定名。

    1.3K10
    领券