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、

原文地址:https://www.cnblogs.com/GetLastError/p/10575958.html