第1章 Mysql数据类型
1.1 四中主要类别:
1. 数值类型
2. 字符类型
3. 时间类型
4. 二进制类型
1.2 数据类型三要素:
简介-完整-适当
1.3 数值数据类型:
类 |
类型 |
说明 |
整数 |
TINYINT |
极小整数数据类型(0-255) |
整数 |
SMALLINT |
较小整数数据类型(-2^15 到2^15-1) |
整数 |
MEDIUMINT |
中型整数数据类型 |
整数 |
INT |
常规(平均)大小的整数数据类型(-2^31 到2^31-1) |
整数 |
BIGINT |
较大整数数据类型(-2^63到2^63-1) |
浮点数 |
FLOAT |
小型单精度(四个字节)浮点数 |
浮点数 |
DOUBLE |
常规双精度(八个字节)浮点数 |
定点数 |
DECIMAL |
包含整数部分、小数部分或同时包括二者的精确值数值 |
BIT |
BIT |
位字段值 |
1.4 字符串数据类型:
类 |
类型 |
说明 |
文本 |
CHAR |
固定长度字符串,最多为255 个字符 |
文本 |
VARCHAR |
可变长度字符串,最多为65,535 个字符 |
文本 |
TINYTEXT |
可变长度字符串,最多为255 个字符 |
文本 |
TEXT |
可变长度字符串,最多为65,535 个字符 |
文本 |
MEDIUMTEXT |
可变长度字符串,最多为16,777,215 个字符 |
文本 |
LONGTEXT |
可变长度字符串,最多为4,294,967,295 个字符 |
整数 |
ENUM |
由一组固定的合法值组成的枚举 |
整数 |
SET |
由一组固定的合法值组成的集 |
1.5 二进制字符串数据类型:
类 |
类型 |
说明 |
二进制 |
BINARY |
类似于 CHAR(固定长度)类型,但存储的是二进制字节字符串,而不是非二进制字符串 |
二进制 |
VARBINARY |
类似于 VARCHAR(可变长度)类型,但存储的是二进制字节字符串,而不是非二进制字符串 |
BLOB |
TINYBLOB |
最大长度为255 个字节的 BLOB 列 |
BLOB |
BLOB |
最大长度为65,535 个字节的 BLOB 列 |
BLOB |
MEDIUDMBLOB |
最大长度为16,777,215 个字节的 BLOB 列 |
BLOB |
LONGBLOB |
最大长度为4,294,967,295 个字节的 BLOB 列 |
1.6 时间数据类型:
类型 |
格式 |
示例 |
DATE |
YYYY-MM-DD |
2017-12-16 |
TIME |
hh:mm:ss[.uuuuuu] |
12:59:02.123456 |
DATETIME |
YYYY-MM-DD hh:mm:ss[.uuuuuu] |
2017-12-16 12:59:02.123 |
TIMESTAMP |
YYYY-MM-DD hh:mm:ss[.uuuuuu] |
2017-12-16 12:59:02.12 |
YEAR |
YYYY |
2017 |
1.7 列属性:就是对数据类型进行规范的
1.7.1 列属性的类别:
数值:适用于数值数据类型
字符串:使用与非二进制字符串数据类型
常规:适用于所有数据类型
数据类型 |
属性 |
说明 |
数 值 |
UNSIGNED |
禁止使用负值 |
仅整数 |
AUTO_INCREMENT |
生成包含连续唯一整数值的序列 |
字符串 |
CHARACTER SET |
指定要使用的字符集 |
字符串 |
COLLATE |
指定字符集整理 |
字符串 |
BINARY |
指定二进制整理 |
全 部* |
NULL 或 NOT NULL |
指示列是否可以包含 NULL 值 |
全 部 |
DEFAULT |
如果未为新记录指定值,则为其提供默认值 |
设置主键,一个表只能有一个,非空并唯一的列可以设置为主键
如果业务中没有非空和唯一条件的列,我们可以定义一个无关列,最好是数字列
mysql> create table test (pid int not null primary key,pname varchar(10),page tinyint,pgen enum('W','M'));
非负:
mysql> create table test_1 (pid int not null primary key AUTO_INCREMENT,pnianling int UNSIGNED not null);
唯一:
mysql> create table people (id int not null primary key,name varchar(10) not null unique);
非空,且不输入此行的话默认填写值为Y
mysql> create table jins (id int not null,name enum('n','y') default 'y'); mysql> insert into jins values (1,'n'); Query OK, 1 row affected (0.26 sec)
mysql> select * from jins; +----+------+ | id | name | +----+------+ | 1 | n | +----+------+ mysql> insert into jins(id) values (2); mysql> select * from jins; +----+------+ | id | name | +----+------+ | 1 | n | | 2 | y | +----+------+
1.7.2 数据类型小结:
1. 使用固定长度数据类型:
如果存储的所有字符串值的长度相同
2. 使用可变长度数据类型:
如果存储的字符串值不同,对于多字节字符集
3. 对于频繁使用的字符,使用占用空间较少的多字节字符集
使用基本多文种平面之外的其他字符集
第2章 元数据:
2.1 什么是元数据:
1. 数据库;表对象的一些定义信息都以可以称之为元数据
2. 数据库的一些状态统计
2.2 元数据访问方法:
1. 查询information_schema数据库表,期中包含Mysql数据库服务器所管理的所有对象的相关数据
2. 使用show语句,用于获取数据库和表信息的mysql专用语句
3. 使用desc语句,查看表结构和列属性的快捷方式
4. 使用msyqlshow客户端程序,show语法的命令行程序
2.3 information_schema数据库优点介绍:
1. 充当数据库元数据的中央系统信息库,模式和模式对象,服务器统计信息(状态变量,设置,连接)
2. 采用表格式以实现灵活访问,使用任意select语句,是虚拟数据库,表并非真实的表,而是系统视图,根据当前用户的特权动态填充表
3. 列出当前数据库中那个所有的表:
mysql> use information_schema; Database changed mysql> show tables;
2.4 元数据的使用:
2.4.1 查找引擎是innodb的表
1.1.1 查找数据类型是set的表
1.1.1 查看每个数据库下表的个数:
1.1 Mysql全库级别分表批量备份:
1.1.1 指定安全文件的位置
vim /etc/my.cnf secure-file-priv=/tmp
1.1.2 生成批量备份的文件
select concat("mysqldump ", "-uroot", " -p123 ",TABLE_SCHEMA," ",TABLE_NAME," >/bak/",TABLE_SCHEMA,"_",TABLE_NAME,".sql")from information_schema.tables into outfile '/tmp/tabbak.sh';
1.2 mysql中show语句总结:
show databases : 列出所有数据库
show tables : 列出默认所有数据库
show tables from
show columns from
show index from
show charaater set : 显示可用的字符集机器默认整理
show status : 列出当前数据库的状态
show variables : 列出数据库中的参数定义值
show processlist : 查看当前的连接数量
1.3 如何统计数据库中所有表的占用量
SELECT CONCAT(table_schema, '.', table_name) AS "Name" ,CONCAT(ROUND(table_rows / 1000, 2), 'K') AS "Rows" ,CONCAT(ROUND(data_length / ( 1024 * 1024 ), 2), 'M') AS "Row Size" ,CONCAT(ROUND(index_length / ( 1024 * 1024 ), 2), 'M') AS "Index Size" ,CONCAT(ROUND(( data_length + index_length ) / ( 1024 * 1024 ), 2), 'M') AS "Total" ,ROUND(index_length / data_length, 2) "Row / Index Ratio" FROM information_schema.TABLES ORDER BY data_length + index_length DESC LIMIT 10;
1.4 等待时间查看:
SELECT r.trx_id waiting_trx_id ,r.trx_mysql_thread_id waiting_thread ,r.trx_query waiting_query ,b.trx_id blocking_trx_id ,b.trx_mysql_thread_id blocking_thread ,b.trx_query blocking_query FROM information_schema.innodb_lock_waits w JOIN information_schema.innodb_trx b ON b.trx_id = w.blocking_trx_id JOIN information_schema.innodb_trx r ON r.trx_id = w.requesting_trx_id;