MySQL数据类型

整形

# 几种整形之间的唯一区别就是存储的范围不同

tinyint
存储空间:1字节
取值范围:-128~127/0~255
# 为什么是这个数:一个汉字是2个字节,一个字节是8bit,2的8次方是256,所以有符号的是0~255,无符号的砍半变成-128~127,以下同样如此

smallint
存储空间:2字节
取值范围:-32768~32767/0~8388607

int
存储空间:4字节
取值范围:-2147483648~2147483647/0~4294967295

bigint
存储空间:8字节
取值范围:-9223372036854775808~9223372036854775807/0~18446744073709551615

整形只存价格数量类的就是数字的,否则一律使用字符串

# 验证整形默认是否带符号
create table t1(id tinyint);
insert into t1 values(-1);
# 结论:所有的整形默认都是带符号的

浮点型

float
float(8,2)  # 最大999999.99,指整数8位,小数占2位,算一下就是小数前是6位
float(255,30)  # 总共255位,小数30位
float精确到小数点后第7位

double
double(255,30)  # 总共255位,小数30位
double精确到小数点后第15位

decimal
decimal(64,30)  # 总共64位,小数30位
decimal精确到小数点后第26位

设计表时注意:
1.表结构中的数据类型
2.该表上限后可能会产生多少数据量

字符串

char(4)
# 存储4位,不够的用空格补齐,严格模式下超过就报错
# 在取出时看不到空格,原因是存储进内存时补了空格,但是取出时自动去除了空格
优点:查询速度快
缺点:浪费空间
特点:整存整取,存4个取4个
# 在内存中数据存放是连着的,靠内存地址来区分


varchar(4)
# 存储4位,有几位存几位,严格模式下超过就报错
优点:节省空间
缺点:查询速度慢
特点:在数据前加报头,保证取的数据正确

# 两种括号中的数字必须写,代表存储字符串的长度

日期类型

datetime  # 年月日时分秒

date  # 年月日

time  # 时分秒

year  # 年


create table t1(id int,r1_time datetime,r2_time date,r3_time time,r4_time year);

insert into t1 values(1,'2019-5-18 11:11:11','2019-5-18','11:11:11','2019')

枚举

枚举就是多选一,其他的不准写,写了就报错
枚举关键字:enum

create table t1(
	id int,
	gender enum('male','female','other')
)

#
insert into t1 values(1,'male')

集合

集合就是类似枚举,是多选多,可以放入好几个集合内写好的,逗号隔开
集合关键字set

create table t1(
	id int,
    hobby set('read','music','football','pc')
)

#
insert into t1(1,'read,music')

创建表的完整语句

create table 表名(
	字段名 数据类型(长度) 约束条件1 约束条件2 约束条件3,
    字段名 数据类型(长度) 约束条件1 约束条件2 约束条件3,
    字段名 数据类型(长度) 约束条件1 约束条件2 约束条件3
)

注意:
1.表中字段名和数据类型是必填项,约束条件是可选的
2.约束条件可以有多个,依次往下写
3.SQL语句的最后一个不能加逗号