标签:
一个完整的建表语句
create table 表名(
字段名称 数据类型[(长度) 约束条件],
字段名称 数据类型[(长度) 约束条件]
)
Sql数据类型
严格模式 :超出范围报错
非严格模式:超出范围不报错
查看模式select @@sql_mode/show variables like 'sql_mode
修改为严格模式: set global sql_mode = ‘strict_trans_tables’ ';
整形(长度默认是11)
长度指的是显示的宽度(推荐不写)
默认有符号
改成无符号:create table t1(id int unsigned)
形式 tinyint smallint mediumint int bigint
字节 1(255) 2 3 4 8
整形的限制:
不是容量限制,而是显示宽度
create table t1(id int(5) zerofill) 当查看的数是小于长度5,用0补上
浮点型
float double decimal
字节 4 8 (自定义)
给浮点设置设置宽度限制
float (m,d) m 表示整数部分的长度 n 表示小数点的不分
float(255,30)
double(255,30)
decimal(65,30)
create table t1(id float(255,30));
create table t2(id double(255,30));
create table t3(id decimal(65,30));
select * from t1:
select * from t2:
select * from t3: 完全正确
精确度: 由低到高 float -> double -> decimal
decimal 是准确的,不会丢失精度
字符串 char
字符串 varchar
分类
char 定长字符
varchar 变长字符(推荐,减少IO)
char(3) 在硬盘保存为3 字符长度
yxx exx lxx zxx char(3)
如果是char类型 ,数据不足,空格补全
varchar 在硬盘保存为1 字符长度
vharchar 支持最大的长度为65535
smysql自动去除空格 elect *from t1 where name='yh'
模糊查找 : elect *from t1 where name='%yh%'
选择
char 存取效率高/ 浪费存储空间
varchar 存取效率低于char/节省存储空间
字符串宽度: 指的是最大字符个数
字符串现出原形:
char_length(x) 字符的个数
我们可以设置sql模式 来让它现出原形
set global sql_mode = "PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES"
设置完成后重启msyql 再次查询长度
注意:mysql在查询时针对where 字段="值 "会忽略掉右面的空格,即where 字段="值"
如果时like模糊匹配就不会忽略右面的空格了
Char取值:每次固定取值
Varchar取值:前面加固定一到两个bytes
时间类型
year 年
date 1999-11-11
time 08:30
datatime/timestamp 1999-11-11 08:30
共同点: 时间存取通过字符串类型 都可以使用now()函数来插入当前时间
create table student(
id int primary key auto_increment,
name char(16),
born_year year,
birth date,
class_time time,
reg_time datetime
);
insert into student value(2,'zxx',2000,2018-11-11,now(),now());
枚举与集合
枚举:一个事物只有几种可能性
集合:用于描述一堆数据 集合中只能放数字
枚举enum('a','b','c'):多选一
集合set('a','b','c'):多选多
create table emp(
name varchar(15),
sex enum('male','female','unkown'),
hobbies set('read','music','yinshi','play')
);
insert into emp values
('zhangming','xxx','xxxx');
标签:
来源: https://www.cnblogs.com/liu--huan/p/9637309.html