首页 > 代码库 > Mysql 笔记之基础知识

Mysql 笔记之基础知识

                                       Mysql 笔记之基础知识

Mysql中的字符的大小写

      1、SQL关键字和内置函数名不区分大小写,比如SELECT,可写成select要遵循一种风格。

      2、数据库、表、索引及视图的名称是是否区分大小写取决于低层的osFS

      3、存储过程,存储函数及事件调度器不区分字符大小写,但触发器区分大小写;

      4、表名不区分大小写

      5、字段中字符数据,类型binaryblogvarbinary区分大小写

      >CREATE DATABASE IF NOT EXISTS tb_test;

      >SHOW GLOBAL VARIABLES LIKE ‘%char%’;

      mysql客户端与服务器端

CHARACTER SET [=] charset

DDLCREATE/ALTER/DROP

数据字典就是存取数据元数据的数据集,

DROP DATABASE IF EXISTS db_name

表的创建

       约束有  主键唯一键外键(约束)

       索引:特殊的数据结构,用于快速找到数据记录,键可用做索引(是一种特殊的索引),但并非所有索引都是键。

 索引类型:B-Tree索引,(B+ TreeB- Tree),hash(哈希索引)讲一个数据切成n段放到桶中,查找性能非常好,FullText(全文索引)某一个条目被用户访问的比较大,

 >SELECT * FROM tb_test WHERE NAME LIKE ‘tom%’

使用索引优点

    1、大大减小服务器需要扫描的数据量;

    2、索引可以帮服务器尽量避免进行排序及使用临时表;

    3、索引可以将随机I/O转换成顺序I/O

        B-Tree索引的使用场景:1、全值匹配:比较操作符=<=>2、左前缀匹配:LIKE ‘tom%’

在姓名和性别上做索引,列前缀匹配;3、匹配范围值;只访问索引的查询。覆盖索引,从索引就可以直接得到最终结果。

哈希索引适用场景:

哈希只包含哈希值和行指针;不是按照索引值顺序存储的因此无法用于排序,不支持部分索引查找。哈希索引只支持等值比较查询,包含=IN(),<=>。哈希值有可能冲突,出现碰撞需二次查找。

聚集索引和非聚集索引,聚集索引是指索引和数据一起存放,索引顺序文件。非聚集所以,索引和数据分开存放的,数据记录未必顺序存放,但索引数据一般顺序存放,

创建表:1、手动创建CREATE TABLE tmp1 2、查询其他表数据来创建表3、复制其它表的表结构

 临时表不能超过16M 有管理权限才可以创建,

 >CREATE TABLE tb name CHAR(30) PRIMARY KEY,gender ENUM(‘m’,’f’);

 >CREATE TABLE tb (name CHAR(30),gender ENUM(‘m’,’f’),PRIMARY KEY (name));这个可以创建多个主键,后接ENGINE ‘MYISAM’指明存储引擎。

 Table_option  ENGINE=’innoDB’

 >SHOW GLOBAL VARIABLE LIKE ‘%storage%’;查看存储引擎

 >SELECT @@SESSION.default_storage_engine;

 AUTO_INCREMENT[=]value 自动增长

 COMMANT[=]    注释

 >SHOW TABLE STATUS LIKE ‘tb2’\G

 >CREATE TABLE tb_test2(name CHAR(20),gender ENUM(‘m’,’f’));//创建表tb_test2

 >INSERT INTO tb_test2 VALUES(‘tom’,’m’),(‘jerry’,’f’);//插入信息

 >CREATE TABLE tb_test3 SELECT * FROM tb_test2;//查询表2信息创建表3。(第二种创建方法)

 >CREATE TABLE tb_test4 LIKE tb_test2;//基于表2创建表4。(第三种创建方法)

删除表:DROP

 ALTER [ONLINE | OUTLINE] TABLE db_name

 >ALTER TABLE tb_test5 ADD id INT UNSIGND NOT NULL AUTO_INCREMENT PRIMARY KEY;

 >ALTER TABLE tb_test5 DROP PRIMARY KEY;  //删除索引

 >ALTER TABLE tb_test5 MODIFY name CHAR(30) NOT NULL; 修改表5中的name信息。

 >ALTER TABLE tb_test5 CHANGE name Name CHAR(30) NOT NULL; 修改名

        >ALTER TABLE tb_test5 ADD INDEX (Name);添加name字段上索引。删除的话ADD 换成DROP 就行了。

        >ALTER TABLE tb_test5 RENAME TO students;//修改表名为students    //需谨慎

        >RENAME TABLE students TO tb_test5;//再改过来

修改字符集

CONVERT TO CHARACTER SET charset_name

InnoDB表的表空间管理

>DISCARD TABLESPACE //删除表空间

>IMPORT TABLESPACE //导入新的表空间

不可以随便修改存储引擎

ALTER TABLE 可实现添加删除索引

CREATE  INDEX  index_name //也可以创建索引

SHOW INDEXS {FROM | IN} tb_name {FROM | IN } db_name;//查看索引

DROP {ONLINE | OFFLINE}INDEX index_name ON tb_name;//删除索引

索引创建的基本法则,基于搜索键来创建索引,SELECT WHERE 子句的查询条件中的字段。

索引使用策略

        1要使用独立的列,索引列不是表达式的一部分

          SELECT name FROM students WHERE Age> 20;

        2、前缀索引

               索引选择性:单独索引项与数据记录的总数的比值,索引选择性越高查询效率就越高反之则就越低。

       3、多列索引

               查询条件,如果要用AND连接尽可能使用组合索引,如果是ALL则尽可能使用多个简单索引。

       4、合适的次序,将选择性最高的列写在最左侧。

       5、聚簇索引:

             好处  数据访问块

              缺点   跟新局促索引的代价很高

        6、覆盖索引

 

Mysql 笔记之基础知识