mysql建表语句_MySQL之完整建表语句及数据类型1.创建表的完整语法
create table 表名(
字段名称 数据类型[(长度) 约束条件],
字段名称 数据类型[(长度) 约束条件]
)
必须的:字段名 数据类型 表名
可选的:长度 约束条件
长度⽤于设置数据的长度
数据类型也是⼀种约束
约束指的是除了数据类型外的额外的规范
如果添加的数据超过了指定的长度范围,超出范围的就丢弃;
注意: 字段名 和 表名 库名 都不能是mysql的关键字 ⽐如
java手机号码正则表达式
2.数据类型
为什么需要将数据分类?
1.为了描述事物 更加准确
2.描述起来更⽅便
3.节省内存空间1a 你
utf8 下 5个字节1a b c
unicode 6个字节
mysql⽀持的数据类型:
整型
*** *** *** ***** ***tinyint smallint mediumintintbigint
字节数:1(255) 2 3 4 8
默认情况下整型是有符号的 需要⽤⼀个⼆进制位存储符号
给整型加上 约束 unsigned来表⽰⽆符号
create table t7(id tinyint unsigned);
如果数据超出范围就尽可能保存最⼤的 例如 在⽆符号下 保存256 其实存的255
如果有符号 例如 tinyint 保存-1280 其实存的是-128是最⼩值
修改严格模式:
以上特性的出现是因为 mysql处于⾮严格模式
查看当前模式 show variables like"sql_mode";
修改为严格模式  set global sql_mode = "STRICT_TRANS_TABLES";严格模式下 如果值超出范围就直接报错,在⼀些版本中默认就是严格模式!设置完严格模式之后,重启客户端:
因为带符号得tinyint最⼤⽀持127,所以直接报错
在我们的正常开发中,我们应该先判断数据的正确性,没有问题在发给数据库怎么选择: 得根据实际情况来判断,能够保存你的数据的最⼩类型
安装了java总是提示未安装长度限制对于整型的意义:
create table t10(id int(1));
insert into t10 value(5555555);
select *from t10;
发现这个数也存储成功
说明 这⾥长度指的不是存储容量限制
⽽是显⽰的宽度
如果你的数据超过了显⽰宽度 有⼏个显⽰⼏个
如果不⾜ 则补全到指定长度  得告诉它⽤什么来补全
create table t13(id int(10) zerofill);
总结 不是容量限制 ⽽是 显⽰宽度
要限制显⽰宽度
1.创建表时 给整型加上宽度
2.加上zerofill约束
浮点型: ⼩数型
分类: float *****  double **** decimal  *****
字节数:    4          8        不确定(⼿动指定)
integer可以为null吗给浮点设置宽度限制
float(m,d)
double(m,d)
decimal(m,d)
长度说明 *****
m表⽰ 这个浮点数整体的长度
d表⽰ ⼩数部分的长度
例如: float(5,3)  最⼤值: 99.999
区别 *****
相同点: ⼩数部分最⼤长度都是30
float和double的最⼤长度为255
不同点: decimal的整体最⼤长度65
精度不同
double ⽐ float 精度⾼
decimal 是准确的 不会丢失精度
如何选择:你对精确度要求⾼你就使⽤ decimal
字符型
分类
char  定长,简单粗暴,浪费空间,存取速度快
varchar 变长,精准,节省空间,存取速度慢
char类型的长度是固定 ⽆论你存储的数据有多长 占⽤的容量都⼀样
char(3)  存储的数据为 "a"  在硬盘保存的数据还是占3字符长度  实际保存的是"a  " varchar 长度是可变的 存储的数据有多长就占⽤多长
varchar(3)  存储的数据为 "a" 在硬盘保存的数据还是占1字符长度  实际保存的是"a" yxx exx lxx zxx cx wxx  char(3)
(1bytes+yx)(1bytes+exx)(1bytes+lx)(1bytes+zxx)  varchar(3)
如果是可变长度 则有问题 不知道数据从哪⾥开始到哪⾥结束  所以需要有⼀个位置保存数据的长度vharchar 能⽀持的最⼤长度是65535  ⽤于保存数据长度的数据最长两个bytes
如果是char类型  如果你的数据不⾜指定长度 就在后⾯⽤空格补全
验证:
数通工程师还吃香吗使⽤⼀个 char_length的函数 可以查看字符的长度
create table t18(a char(4),b varchar(4));
insert into t18 value("x","x");
select char_length(a),char_length(b) from t18;
两个字段的长度都为1
结论:
这是因为 mysql在存储时 ⾃动加上的空格 对使⽤者⽽⾔是没有意义的 所以mysql⾃动帮你处理掉空格了我们可以设置sql模式 来让它现出原形
set global sql_mode = "PAD_CHAR_TO_FULL_LENGTH,STRICT_TRANS_TABLES"
设置完成后重启msyql 再次查询长度
注意:
当你在执⾏这样的查询语句时  mysql会⾃动将参数末尾的空格去除
select *from t18 where  name = "a"
当你在使⽤模糊搜索时 要注意 定长字符 后⾯可能会有空格 所以最好在后⾯加上百分号 %
select *from t18 where  name like "a";
% 任意个数的任意字符
_ 1个任意字符
如何选择
char
存取效率⾼
浪费存储空间
varchar
存取效率低于char
节省存储空间
使⽤起来感受不到区别 通常⽤的是char
char和varchar 长度都⽐较⼩ 最⼤就是65535
⼤⽂本类型:
page对象是什么TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT    ⽂本是带有编码
BLOB 系列    TINYBLOB BLOB MEDIUMBLOB LONGBLOB 也是字符数据 但是不带编码
⼆进制类型: ⽤于存储多媒体数据 ⽐如视频  但是我们⼀般不会将多媒体数据存到数据 ⽽是存储⽂件路径地址BINARY系列 BINARY VARBINARY    存储⼆进制数据
分类
time  时分秒  HH:MM:SSmysql语句分类
year  年份
date  ⽇期  年⽉⽇
datetime ⽇期加时间 年⽉⽇ 时分秒    年份最⼤是9999
timestamp 时间戳  从1970-1-1开始算    年份最⼤是2037

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。