MySQL知识汇总(一)

一、数据类型

1. int(11) vs int(21)的差别?存储空间,依然存储范围?

实为上尚未任何不相同,不管是储存空间,依然存储范围,都是千篇一律的。
区分就是,比如存数据1,int(11)前边会补10个0,int(21)前面会补20个0

2. 数据类型:char varchar text 的区分?

1).
char与varchar存储的单位都是字符,text存储单位是字节,总大小为65535字节,约为64KB
2). char存储定长,简单导致空间的荒废, char数据类型最大为255字符
3). varchar存储变长,节省存储空间,可以储存超越255字符
4). text在数量之中大多存储格式为溢出页,效能不如char

3.字符与字节

1). 字节的单位是byte,衡量数据量的有点
2). 字符就是指在处理器应用的文字和符号而已
3).
它们之间的应和关系跟选拔的编码技术有关,在utf8中,1个汉字对应3个字节,1个假名对应1个字节

4.岁月项目:DATE、TIME、TIMESTAMP、DATETIME的区分
时间类型 存储空间 存储精度 存储范围
DATE 3字节 年月日
TIME 3字节 时分秒
TIMESTAMP 4字节 年月日时分秒 1970-2038年
DATETIME 8字节 年月日时分秒 1000-9999年

注:TIMESTAMP会根据系统时区举行转移,DATETIME不会

二、数据对象

1.MySQL常见的数目对象有
  1. database、schema、table、index
  2. view、trigger、function、procedure
2.唯一约束 与 外键约束
  1. 唯一约束(unique
    key):是一种特殊的目录,对table的某部字段或者多少个字段设置唯一约束,有限支撑在那几个表里对应的数码必须唯一。比如用户ID、手机号、身份证号等,主键(primary
    key)也是一种唯一约束。
  2. 外键约束(Foreign key): 外键是指四个table的数目通过某种条件关联起来。
3.施用外键约束的注意事项
  1. 不可以不是InnoDB表,Myisam和其余存储引擎不协助外键
  2. 互相之间自律的字段类型必须一律
  3. 主表的束缚字段必要有目录
  4. 自律名称必必要唯一,即便不在一张表上
4.数量对象view的效应
  1. 简化数据库的拜会,将八个查询语句结构变为一个虚构结构
  2. 隐形数据库后端表结构,进步数据库的安全性
  3. 视图也是一种权限管理,只对用户提供一些数据
5.触发器Trigger的作用:

可以在数量写入表之前如故将来触发一些别样操作

三、权限管理

1.如何新建一个用户并授权?

上边的格兰特语句会判断是还是不是留存该用户,假如不设有则新建。上边是为tom这么些用户授权了select语句,with
grant option就是同意tom把select这几个权利授予给其余人

  GRANT SELECT ON *.* TO 'tom'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
2.别的语句
show grants;  //查看当前用户的权限
show grants for tom@'localhost'; //查看其它用户的权限

revoke select from *.* on tom@'localhost'; //回收不需要的权限
grant insert on *.* to tom@'localhost'; //重新赋权
3.MySQL权力音讯存储结构
  1. 权限音信留存mysql数据库user表中
  2. MySQL账号对应的密码也加密存储在数据库user表中
  3. 每一种权限项目在元数据里都是枚举类型,注明是不是有该权限
4.与权力相关的表有:user、db、tables_priv、columns_priv,权限验证流程如下图:

权限验证流程.png

四、字符集(charset) 和字符序(collation)

1.数据库中的字符集有两层意思:一是各样文字的标记和聚集;二是字符的编码形式
2.MySQL字符集编码分类:

ASCII(单字节编码,仅能表示128个字符)
GBK(双字节编码)
UTF-8(可变长度字符编码,使用1-4个字节为各种字符编码)
latin1(默认字符集)

3.字符序的意义:

字符的排序与相比规则,每个字符集都有照应的多套字符序。差其余字符序决定了字符串在可比排序中的精度和属性分歧

4.mysql 的字符序遵守命名惯例:

_ci 代表大小写不敏感
_cs 大小写敏感
_bin 用编码值举行比较

5.charset和collation的装置级别:

劳动器级>>数据库级>>表级>>列级

6.数量存储字符集使用规则
  • 利用列集的character set设定值
  • 若列级字符集不存在,则选用相应表级的default character set 设定值
  • 若表级字符集不设有,则利用数据库级的default character set 设定值
  • 若数据库级字符集不设有,则动用服务器级character_set_server设定值
7.客户端连接与字符集
  • character_set_client:客户端来源数据运用的字符集
  • character_set_connection:连接层字符集
  • character_set_results:查询结果字符集
    引进把它们多个联合设置成一致的字符集 mysql> set names utf8;
    配置文件设置:[mysql] default-character-set = utf8
8.常见乱码原因
  • 数码存储字符集无法正确编码(不援助)client发来的数量:client(utf8)
    -> storage(latin1)
  • 先后连接使用的字符集与布告mysql的character_set_client等不均等或不般配
客户端连接与字符集.png



导入数据时,不用set names,而是用set character\_set\_database
与实际文件的编码一样
应用提议
  • 开创数据库/表时体现的指定字符集,不拔取默许
  • 老是字符集与数码存储字符集设置同样,推荐使用utf8
  • 驱动程序连接时显得指定字符集(set names xxx)
9.相关限令
//global可选,查看字符集
show [global] variables like 'character%'; 
//global可选,查看字符序
show [global] variables like 'collation%';; 

//修改字符集
set global character_set_server=utf8; 
alter table xxx convert to character set xxx;

//设置数据库级的字符集和字符序,主要影响load data等语句的默认字符集
create database db_name character set latin1 collate latin1_swdish_ci 

// 设置表级的字符集
create table tb_name default character=utf8 default collate=utf8_bin;
网站地图xml地图