mysql创建表时浮点型_创建表的完整语法 数字类型(整型 浮点型) 字符型 时间和日期类型 集合和枚举类型...

创建表的完整语法

create table 表名(

字段名称 数据类型[(长度) 约束条件],

字段名称 数据类型[(长度) 约束条件]

) ***** ;

必须的:表名 字段名 数据类型 *****

可选的:长度 约束条件 *****

长度用于设置数据的长度

数据类型也是一种约束,数据类型是规定这一列插入的数据的一个最基本的约束,一定要是什么数据类型的

而约束条件指的是除了满足这个数据类型之外的额外的规范,例如数据的长度,是否为空,范围等

如果添加的数据不符合我们的约束条件,有的会直接报错,有的会自动的修改使其符合条件

例如当我们限制了字符串的长度之后,如果插入一个超长的字符串,可能会出现两种结果:

1是超出范围的会直接被丢弃,插入最大长度不报错; 2,直接报错

注意: 字段名 和 表名 库名 都不能是mysql的关键字 比如select from not..... *****

这个和任何编程语法一样,定义的名字不能和关键字重复

数字类型

mysql支持的数字类型:

整型

*** *** *** ***** ***

tinyint smallint mediumint int bigint

字节数:1 2 3 4 8

默认情况下整型是有符号的 需要用一个二进制位存储符号

给整型加上 约束 unsigned来表示无符号

如果数据超出范围就尽可能保存最大的 例如 在无符号下 保存256 其实存的255

如果有符号 例如 tinyint 保存-1280 其实存的是-128 是最小值

这里有一个规律,如果我们存储的数据,超过了最大值,会默认按照最大值存储,如果小于最小值,会默认按照最小值存储

或者直接报错,具体报错与不报错,就看我们的严格模式设置与否,下面我们介绍一下如何设置严格模式

例如,在不报错的情况下,用int 存储,有符号,存储数据的范围是 -2**32 -- 2**32-1 超出了这个范围的数据就按照最大值或者最小值存储

修改严格模式:

查看当前模式 show variables like "sql_mode";

修改为严格模式 set global sql_mode = "STRICT_TRANS_TABLES";

严格模式下 如果值超出范围就直接报错,在一些版本中默认就是严格模式!

在我们的正常开发中,我们应该先判断数据的正确性,没有问题在发给数据库

怎么选择: 得根据实际情况来判断,能够保存你的数据的最小类型

长度限制对于整型的意义:

create table t10(id int(1));

insert into t10 value(454555);

select * from t10;

发现这个数也存储成功 说明 这里长度指的不是存储容量限制.而是显示的宽度

因为 int tinyint ...这个就已经确定了数字的存储宽度长度了

再加一个括号不能改变存储长度,只能改变现实宽度

如果你的数据超过了显示宽度 有几个显示几个

如果不足 则补全到指定长度 得告诉它用什么来补全

create table t13(id int(10) zerofill);

总结 数字的限制宽度不是容量限制 而是 显示宽度限制

要限制显示宽度

1.创建表时 给整型加上宽度

2.加上zerofill约束

浮点型: 小数型

分类: float ***** double **** decimal *****

字节数: 4 8 不确定(手动指定)

给浮点设置宽度限制

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 t19 where name = "yh"

当你在使用模糊搜索时 要注意 定长字符 后面可能会有空格 所以最好在后面加上百分号 %

select *from t19 where name like "yh";

% 任意个数的任意字符

_ 1个任意字符

如何选择

char

存取效率高

浪费存储空间

varchar

存取效率低于char

节省存储空间

使用起来感受不到区别 通常用的是char

char和varchar 长度都比较小 最大就是65535

大文本类型:

TEXT系列 TINYTEXT TEXT MEDIUMTEXT LONGTEXT 文本是带有编码

BLOB 系列 TINYBLOB BLOB MEDIUMBLOB LONGBLOB 也是字符数据 但是不带编码

二进制类型: 用于存储多媒体数据 比如视频 但是我们一般不会将多媒体数据存到数据 而是存储文件路径地址

BINARY系列 BINARY VARBINARY 存储二进制数据

时间和日期类型

分类

time 时分秒 HH:MM:SS ***

year 年份 ***

date 日期 年月日 ***

datetime 日期加时间 年月日 时分秒 年份最大是9999 *****

timestamp 时间戳 从1970-1-1开始算 年份最大是2037 *****

共同点: 时间的存取通过字符串类型

都可以使用now()函数来插入当前时间

datetime 和 时间戳都能够表示日期和时间

不同之处是: 年份最大范围不同

时间戳可以为空 代表当前时间

时间戳在你更新记录时 会自动更新为当前时间

集合和枚举类型

枚举 :多选一 **

用于描述 一个已知范围的数据 例如性别: 只有男 女 或其他

enum("man","woman","other")

总结: 枚举中只能是字符串类型

添加的数据只能是已经出现在枚举中的值

你的值只能是其中的一个

你也可以使用枚举值的序号来插入值 从1开始 多选1

集合:多选多 也可以多选一 **

用于描述一堆数据 比如你的兴趣爱好

set("watch movie","listen music","play game")

总结:集合中的数据 只能是字符串

添加的数据只能是已经出现在集合中的值

你的值可以是其中的任意几个

你也可以使用枚举值的序号来插入值 从1开始 但是只能给一个序号

多选多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值