create table 表名(字段名 数据类型[(长度) 约束条件]
[]代表可选
1.表述数据更加正确
2.节省内存空间
tinyint
smallint
mediumint
int *****
bigint
总结:除了存储范围没啥区别
都是整型
默认有符号
对于显示宽度 原理是相同的
长度参数如果不指定 会有默认值
严格模式
什么是严格模式 对插入的数据严格要求 不再范围内直接报错 例如往tinyint中插入大于255的值将报错
什么是非严格模式 不 对插入的数据严格要求 不再范围内也可以保存 保存的当前类型最大支持的值
5.6默认是非严格模式
5.7以后默认严格模式
查看SQL模式
select @@sql_mode;
show variables like "sql_mode";
修改SQL模式
set @@sql_mode = "值";
正常情况不需要改
浮点类型
float 4字节
double 8字节
decimal 不固定
create table t9(num float(m,d))
m 表示总长度 d 表示小数部分的长度
长度表示不是数据存储范围 而是字符长度
10.12 总长为4 小数部分为2
各个类型的最大长度
float (255,30) *****
double (255,30)
decimal (65,30)
区别:
float与double的精度不同 都是不准确的小数
decimal 准确的小数 不会丢失精度
具体使用哪种类型得根据使用场景判断
float满足大部分使用场景
decimal适合银行系统 科学研究等
括号中m和d的值 可以限制数据存储范围 与整型不同
重点:记住m和d的含义
字符串类型
常用两种
char 定长字符串
char
varchar 可变长度字符串
注意字符串中 长度指定的是数据的字符长度 与字节没关系
create table t13(c1 char,c2 varchar(10));
在创建时 varchar必须指定长度 char有默认值
不同点:
a char(3) b char(3)
A |B |
char类型在取数据时 就根据长度来获取 不关心真实数据长度
无论的数据有多长 占用的空间是固定的 造成了一定空间浪费
a varchar(30) b varchar(30)
(1)A(1)B
varchar类型在取数据时 先获取数据长度 在根据长度获取真实数据 关心真实数据长度
先存储长度需要一个字节 再存储真实数据 不会浪费空间
但是 由于需要计算数据的长度 所以存取速度会比定长慢
相同点:
括号中的数字 都是表示存储最大字符长度
·char使用频率更高
mysql会在存储数据时自动将数据末尾的空格去掉
如果必须要存空格 需要修改sql_mode 增加 PAD_CHAR_TO_FULL_LENGTH 意思是把空格当作有效数据
由于自动去除空格这个机制 在使用等于符号 和like时有区别
select *from t1 where name = "yh "; 会自动去除空格
select *from t1 where name like "yh "; 不会自动去除空格
like 用于模糊匹配 使用%表示0或任意个任意字符 使用_表示一个任意字符
日期和时间
year
time
date
datetime *****
timestamp *****
timestamp特点是:可以给null 自动输入当前时间 当这条记录被修改了会自动更新当前时间
枚举
enum 可以指定一堆字符串的值 在插入数据时 数据必须这堆字符串中的其中一个 ("男的","女的") 多选一
集合
set 可以指定一堆字符串的值 在插入数据时 数据必须这堆字符串中的其中一个或多个 ("男的","女的") 多选多