Mysql 笔记之基础知识
Mysql中的字符的大小写
1、SQL关键字和内置函数名不区分大小写,比如SELECT,可写成select要遵循一种风格。
2、数据库、表、索引及视图的名称是是否区分大小写取决于低层的os和FS。
3、存储过程,存储函数及事件调度器不区分字符大小写,但触发器区分大小写;
4、表名不区分大小写
5、字段中字符数据,类型binary、blog、varbinary区分大小写
>CREATE DATABASE IF NOT EXISTS tb_test;
>SHOW GLOBAL VARIABLES LIKE ‘%char%’;
在mysql客户端与服务器端
CHARACTER SET [=] charset
在DDL中CREATE/ALTER/DROP
数据字典就是存取数据元数据的数据集,
DROP DATABASE IF EXISTS db_name
表的创建
约束有主键、唯一键、外键(约束)
索引:特殊的数据结构,用于快速找到数据记录,键可用做索引(是一种特殊的索引),但并非所有索引都是键。
索引类型:B-Tree索引,(B+ Tree,B- 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、覆盖索引