一、存储引擎

存储引擎就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方
法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和
操作此表的类型)

show engines;		# 查看所有的存储引擎
engine=InnoDB;   #创建表时写在后面,不写则默认值
#需要知道的四种存储引擎
MyISAM:
    MySQL5.5及之前版本默认的存储引擎
    存取数据的速度都非常快 但是功能较少安全性较低
InnoDB:
    MySQL5.6及之后版本默认的存储引擎
    存取数据速度没有MyISAM快 但是功能更多 安全性更高
    事务 行锁 外键
BlackHole:
    往里面写入的任何数据都会直接消失
Memory:
    内存存储数据(临时的)
    
#使用时文件个数不一致
InnoDB
	.frm	表结构
    .ibd	表数据和索引(类似于书的目录)
MyISAM
	.frm	表结构
    .MYD	表数据
    .MYI	索引(类似于书的目录)
BlackHole
	.frm	表结构
Memory
	.frm	表结构

二、MySQL 基本数据类型

2.1数值类型

2.1.1 整型

类型

大小

范围(有符号)

范围(无符号)

用途

TINYINT

1 byte

(-128,127)

(0,255)

小整数值

SMALLINT

2 bytes

(-32 768,32 767)

(0,65 535)

大整数值

MEDIUMINT

3 bytes

(-8 388 608,8 388 607)

(0,16 777 215)

大整数值

INT或INTEGER

4 bytes

(-2 147 483 648,2 147 483 647)

(0,4 294 967 295)

大整数值

BIGINT

8 bytes

(-9,223,372,036,854,775,808,9 223 372 036 854 775 807)

(0,18 446 744 073 709 551 615)

极大整数值

"""
    如果不想让整型有符号 加 unsigned
    
    	create table t6(id tinyint unsigned);
 
针对整型字段 括号里面的数字不是用来限制存储长度而是用来控制展示长度
ps:如果不理解 直接记结论
	定义整型字段无需自己写括号和数字
	int
	tinyint
	
	create table t12(id int(4) zerofill);
	insert into t12 values(1),(11111111);
"""

2.1.2 浮点型

类型

大小

范围(有符号)

范围(无符号)

用途

FLOAT

4 bytes

(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)

0,(1.175 494 351 E-38,3.402 823 466 E+38)

单精度 浮点数值

DOUBLE

8 bytes

(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)

双精度 浮点数值

DECIMAL

对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2

依赖于M和D的值

依赖于M和D的值

小数值

"""
	精确度不一样
		float < double < decimal
		
	在实际开发中 很多时候看似需要用数字存储的数据
	其实我们可能都是使用的字符串存储,如:手机号
"""

2.2 日期类型

类型

大小 ( bytes)

范围

格式

用途

DATE

3

1000-01-01/9999-12-31

YYYY-MM-DD

日期值

TIME

3

'-838:59:59'/'838:59:59'

HH:MM:SS

时间值或持续时间

YEAR

1

1901/2155

YYYY

年份值

DATETIME

8

1000-01-01 00:00:00/9999-12-31 23:59:59

YYYY-MM-DD HH:MM:SS

混合日期和时间值

TIMESTAMP

4

1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

YYYYMMDD HHMMSS

混合日期和时间值,时间戳

2.3 字符串类型

类型

大小

用途

CHAR

0-255 bytes

定长字符串

VARCHAR

0-65535 bytes

变长字符串

char(4):最大存储四个字符 超出了直接报错 不超过空格填充至四位
    优点:整存整取 速度快
    缺点:浪费硬盘空间
varchar(4):最大存储四个字符 超出了直接报错 不超过有几位存几位
    优点:节省硬盘空间
     缺点:速度没有char快
	create table t10(id int,name char(4));
    create table t11(id int,name varchar(4));
    insert into t10 values(1,'lzlnb');
    insert into t11 values(1,'lzlnb');
    
    # 具体还得查看配置的sql_mode  严格模式
    
字符类型对比

2.4 枚举与集合

枚举:enum		多选一
    	create table t14(
        	id int,
            name char(16),
            gender enum('male','female','others')
        );
    
集合:set		多选多(多选一)
    	create table t15(
        	id int,
            name char(32),
            hobby set('read','study','music','tea')
        );

三、严格模式

# 查看sql_mode
show variables like '%mode%';

# 修改
set global sql_mode='strict_trans_tables';

# 退出客户端重新进入即可

# 验证是否自动填充
set global sql_mode='pad_char_to_full_length';

四、创建表的完整语法

create table 表名(
	字段名1 字段类型(宽度) 约束条件,
    字段名2 字段类型(宽度) 约束条件,
    字段名3 字段类型(宽度) 约束条件
)
"""
1.字段名和字段类型是必须的 宽度和约束条件是可选的
2.约束条件可以有多个
	字段名1 字段类型(宽度) 约束条件1 约束条件2 约束条件3
3.最后一个字段结尾不能加逗号
"""