赞
踩
更过MySQL使用,点击查看专栏: MySQL数据库_命令详解
【语法】 create table [if not exists] `表名`( 字段名 字段类型 [null|not null][default 值][auto_increment][primary key][comment 备注], 字段名 字段类型, ..... 字段名 字段类型 )[engine=存储引擎] [charset=编码] [collate=校对集]; 【说明】 [if not exists] `表名` 判断表是否存在:存在-不管,不存在-创建 [null|not null] 声明字段值是否可以插入null数据 [default 值] 声明字段值如果没有录入数据则使用默认值 [primary key] 主键(特点:字段值不能重复且不能为null) [auto_increment] 自增(该属性必须配合primary key效果字段值自动增长1、2、3) [comment 备注] 声明字段的作用 [engine=存储引擎] 存储引擎 [charset=编码] 数据存储编码
1字节(Byte)= 8位(bit)
1KB = 1024 Byte(字节)
英文:1个字符 = 1个字节
中文:1个字符 = 等于3个字节(utf-8) 等于2个字节(gbk)
注意字符串类型对应的中文为字符。
类型 | 字节 | 范围(有符号) | 范围(无符号) |
---|---|---|---|
TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
SMALLINT | 2 | -32768 ~ 32767 | 0 ~ 65535 |
MEDIUMINT | 3 | -8388608 ~ 8388607 | 0 ~ 16777215 |
INT | 4 | -2147483648 ~ 2147483647 | 0 ~ 4294967295 |
BIGINT | 8 | -9223372036854775808 ~ 9223372036854775807 | 0 ~ 18446744073709551615 |
无符号数(unsigned)
create table tint2 (num tinyint(10) unsigned) charset=utf8;
insert into tint2 values (0);
insert into tint2 values (255);
...
tinyint(10)其中10表示存储宽度(存储宽度指:当插入数据位数不够则自动从左侧补0,必须加zerofill属性宽度才会生效)
浮点数 | 语法 | 占用字节 | 范围 | 精度范围 |
---|---|---|---|---|
单精度 | float(总长度,小数长度) | 4 | -3.4E+38~3.4E+38 | 大概为7位左右 |
双精度 | double(总长度,小数长度) | 8 | -1.79E+308~1.79E+308 | 大概为15位左右 |
定点数 | decimal(最大65,最大30) | 依赖于M和D的值 |
实际业务中的选择:
数据类型 | 描述 | 格式 | 占用字节 |
---|---|---|---|
datetime | 日期时间 | 年-月-日 小时:分钟:秒 | 8 |
date | 日期 | 年-月-日 | 4 |
time | 时间 | 小时:分钟:秒 | 3 |
year | 年份 | 年 | 1 |
timestamp | 时间戳 | 年-月-日 小时:分钟:秒 | 4 |
datetime(占8个字节)和timestamp(占4个字节)在表现上是一样。
timestamp和datetime的区别
实际业务中的选择:
参考文章:should-i-use-the-datetime-or-timestamp-data-type-in-mysql
MySQL中的timestamp通常用于跟踪记录的更改,并且通常在每次更改记录时进行更新。如果要存储特定值,则应使用datetime字段。 如果您想在使用UNIX时间戳还是本机MySQL日期时间字段之间做出选择,请采用本机格式。您可以通过这种方式在MySQL中进行计算, ("SELECT DATE_ADD(my_datetime, INTERVAL 1 DAY)")并且("SELECT UNIX_TIMESTAMP(my_datetime)")如果要使用PHP对记录进行查询,则可以很容易地将值的格式更改为UNIX时间戳。
ps. 在实际运用中时间类型使用int类型,但是也有公司使用datetime
说明:
选择int类型原因:int比datetime更节省空间
选择datetime类型原因:int同timestamp最大存储时间为2038年
为什么选择int的公司比datetime多
项目不同页面所需格式 | int类型 | datetime类型 |
---|---|---|
2017/3/8 | date('Y/m/d’,时间戳) | 先转时间戳,再date函数 |
2048-3-16 | date('Y-m-d’,时间戳) | 先转时间戳,再date函数 |
2014/03/33 12:30:02 | date(‘Y/m/d H:i:s’,时间戳) | 直接显示 |
刚刚、24小时前… | 调用函数传递时间戳 | 先转时间戳,再调用函数 |
数据类型 | 描述 |
---|---|
char(长度) | 定长字符(最多255个字符) |
varchar(长度) | 可变长度字符(65535个字符) |
tinytext | 大段文本(大块数据) 2^8-1=255个字符 |
text | 大段文本(大块数据) 2^16-1=65535个字符 |
mediumtext | 2^24-1 = 16777215个字符 |
longtext | 2^32-1 = 4294967295个字符 |
char的执行效率比varchar高(varchar回收空间、char不回收)
实际业务中的选择:
明确数据长度选择char反之用varchar,如:性别char(1) 标题varchar(60)
文章内容或者大块文字时选择text
只能从集合数据中获取一个值(单选)
语法:sex enum(‘男’, ‘女’)
MySQL枚举值是通过整型的数字来管理的,第一个值对应1,第二个值对应2依次类推
后期推荐使用tinyint类型:1-男,2-女
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。