• mysql学习指南 小记


    1、当一个表的主键是另一个表的外键的时候,该主键字段属性是不可变更的。

    解决方法:set foreign_key_checks = 0; //取消外键约束 再去更改主键属性。

    更改完后再 set foreign_key_checks = 1; //启用外键约束 即可。

    2、char 与 vachar:()中均是字符长度 utf-8中1个汉字字符=3个字节  其他编码大多是1个汉字字符=2字节

    char最大长度255字符(utf-8)           最多存放256个字节

    varchar最大长度21845字符(utf-8)   最多存放65535个字节

    char速度快但浪费空间

    varchar节省空间但是慢

    3、select 子句是语句中最后被执行

    4、select distinct cust_id from account; //distinct 产生无重复结果集首先要对数据进行排序,因此相当耗时。尽量避免使用。

    5、视图:虚拟表,不拥有任何数据。当对视图查询时,查询会被绑定到视图定义上,产生最终被执行的查询。(感觉就像一个懒执行的子查询)

    eg:
    
    create view employee_vw as select emp_id, fname, lname,YEAR(start_date) start_year from employee;
    
    select emp_id, start_year from employee_vw;

     6、使用null的时候应该注意:<1>表达式可以为null但是不能=null <2>两个null彼此之间不能判断相等

     7、连表时 from 子句中各表出现的顺序并不重要,因为最终连接的顺序是由优化器决定的。

    SQL是非过程化的语言,只需要描述要获取的数据库对象,如何以最好的方式执行查询是有数据库服务器负责的。

    服务器会根据收集的数据对象信息,在多个表中选择一个表作为开始点(驱动表),然后决定其他标的顺序。

    分组

    8、当查询全都是聚合的时候,即使不使用group by,也会隐式分组。但如果查询 聚合+其他字段 时,必须使用group by显式分组

    9、分组过滤条件:

    索引

    10、无索引时,查询会全表逐行扫描返回结果集

         有索引时,会根据条件直接查询索引列,返回满足条件的索引行数据结果集

    11、mysql中将索引看做是表的属性(可选部件),因此添加/删除索引等操作 为 alter table table_name add index index_name (key_name)

         其他数据库 一般将索引作为独立的模型对象,使用 create index index_name on table_name (key_name)的方式建立索引

    12、优化器会选择是否使用索引(数据量少则会不使用),并且会选择使用哪个索引(当多个索引的时候)。

    13、唯一索引:两个功能:索引功能 + 索引列中的列值不可重复功能。

    14、多列索引:如果创建了多列索引,必须注意哪一列作为第一列,哪一列作为第二列。前后顺序位置很重要

    eg: alter table employee add index emp_names_idx (lname, fname); 该索引在两种查询中是有用的,1、指定姓名 2、指定姓氏。

    如果只是指定名字的查询,则又会逐行扫描。因为索引是 姓氏+名字 的组合 ,单独查名字是无法有效利用索引的

    15、索引类型:

        B-tree索引:适合表中数据行多索引列中值很少重复 的情况。eg:比如搜索人名就比较适合。但是如果对于搜索只有几种类型的商品,就不适合了。因为如果某一种类型商品比其他商品更受欢迎,那么二叉树就难以保持平衡。这样索引效率就会很低下。

      bitmap索引(ORACLE):适合表中数据行多索引列中值很多重复 的情况。eg:与上相反。因为如果行多且索引列的值很少重复的话,服务器则需要维护太多的位图,导致索引效率低下。

        文本索引:

    16、索引属性说明:show index from employee G;  拿其中一个索引举例。

    Table: employee        //表名
    Non_unique: 1           //
    Key_name: fk_e_emp_id     //索引名
    Seq_in_index: 1         //
    Column_name: superior_emp_id  //字段名
    Collation: A          //
    Cardinality: 18          //索引列去重值个数 可以估算下是否适合用B-Tree索引
    Sub_part: NULL        //
    Packed: NULL          //
    Null: YES             //
    Index_type: BTREE        //索引类型
    Comment:            //
    Index_comment:        //

     17、

  • 相关阅读:
    shell脚本中判断上一个命令是否执行成功
    nginx 414 Request-URI Too Large
    nginx 重写URL尾部斜杠
    Linux shell 日期,时间相关的命令
    shell脚本中自定义日志记录到文件
    scanf后面跟一个getchar
    1.Tarball软件make与makefile详解(还需要补充)
    <>和“”的区别
    malloc,calloc,realloc,alloc
    toString()方法细节
  • 原文地址:https://www.cnblogs.com/GetLastError/p/10575958.html
Copyright © 2020-2023  润新知