MySQL数据表设计

1、数值类数据列类型


数据列类型


存储空间


说明


取值范围


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字节


大整数


带符号值:-263~263-1

无符号值:0~264-1


FLOAT


4或8字节


单精度浮点数


最小非零值:+- 1.175494351E-38

最大非零值:+- 3.402823466E+38


数据列类型


存储空间


说明


取值范围


DOUBLE


8字节


双精度浮点数


最小非零值:+- 2.225073E-308

最大非零值:+- 1.797693E+308


DECIMAL


自定义


以字符串形式表示的浮点数


取决于存储单元字节数

  整型注意事项:

    INT(3)、SMALLINT(3)等整型后面的数字不会影响数值的存储范围,只会影响显示

    整型后面的数字只有配合零填充的时候才有实际意义。

    整型后面的数字可以省略

  浮点型注意事项:

    浮点型后面的数字会将存入的数字四舍五入,例如:把一个1.234存入FLOAT(6,1)数据列中,结果是1.2,6代表显示长度,1代表小数位长度,会四舍五入。

2、字符串类数据列类型


数据列类型


存储空间


说明


取值范围


CHAR[(M)]


M字节


定长字符串


M字节


VARCHAR[(M)]


L+1字节


可变字符串


M字节


TINYBLOB,TINYTEXT


L+1字节


非常小的BLOB(二进制大对象)和文本串


28-1字节


BLOB,TEXT


L+2字节


小BLOB和文本串


216-1字节


MEDIUMBLOB,

MEDIUMTEXT


L+3字节


中等的BLOB和文本串


224-1字节


LONGBLOB,

LONGTEXT


L+4字节


大BLOB和文本串


232-1字节


ENUM(‘value1’,’value2’…)


1或2字节


枚举:可赋予某个枚举成员


65535个成员


SET(‘value1’,‘value2’…)


1,2,3,4或8字节


集合:可赋予多个集合成员


64个成员

  字符串类型注意事项:

    CHAR和VARCHAR类型的长度范围都在0~255之间

    在使用CHAR和VARCHAR类型时,当我们传入的实际的值的长度大于指定的长度,字符串会被截取至指定长度

    在使用CHAR类型时,如果我们传入的值的长度小于指定长度,实际长度会使用空格补至指定长度

    在使用VARCHAR类型时,如果我们传入的值的长度小于指定长度,实际长度即为传入字符串的长度,不会使用空格填补

    CHAR要比VARCHAR效率更高,当占用空间较大

    BLOB和TEXT类型是可以存放任意大数据的数据类型

    BLOB区分大小写,TEXT不区分大小写

    ENUM和SET类型是特殊的的串类型,其列值必须从固定的串集中选择

    ENUM只能选择其中一个值,SET可以选择多个值

3、日期和时间类数据列类型


数据列类型


存储空间


说明


取值范围


DATE


3 字节


“YYYY-MM-DD”格式表示的日期值


1000-01-01~9999-12-31


TIME


3 字节


“hh:mm:ss”格式表示的时间值


-838:59:59-838:59:59


DATETIME


8 字节


“YYYY-MM-DD hh:mm:ss”格式


1000-01-01 00:00:00~9999-12-31


TIMESTAMP


4 字节


“YYYYMMDDhhmmss”格式表示的时间戳


19700101000000-2037年的某个时刻


YEAR


1 字节


“YYYY”格式的年份值


1901~2155

  日期类型注意事项:

    存储日期时,我们可以使用整型来进行存储时间戳,这样做便于我们进行日期的计算

4、NULL值

  NULL值注意事项:

    NULL意味着“没有值”或“未知值”

    可以测试某个值是否为NULL

    不能对NULL值进行算术计算

    对NULL值进行算术运算,其结果还是NULL

    0或NULL都意味着假,其余值都意味着真

5、类型转换

  在MySQL的表达式中,如果某个数据值的类型与上下文所要求的类型不相符,MySQL则会根据将要进行的操作自动地对数据值进行类型转换。如:

    1+’2’ #会自动转换成1+2=3

    1+’abc’ #会自动转换成1+0=1

6、数据字段属性  

  UNSIGNED

    只能用于设置数值类型,不允许出现负数

    最大存储长度会增加一倍

  ZEROFILL

    只能用于设置数值类型,在数值之前会自动用0补齐不足的位数

  AUTO_INCREMENT

    用于设置字段的自动增长属性,每增加一条记录,该字段的值会自动加1

  NULL和NOT NULL

    默认为NULL,即插入值时没有在此字段插入值,默认为NULL值,如果指定了NOT NULL,则必须在插入值时在此字段填入值

  DEFAULT

    可以通过此属性来指定一个默认值,如果没有在此列添加值,那么默认添加此值

时间: 2024-08-06 19:45:26

MySQL数据表设计的相关文章

Linux上检查MySQL数据表的存储引擎类型三板斧

MySQl主要使用两种存储引擎:MyISAM 和 Innodb.MyISAM是非事务的,因此拥有读取更快,然而InnoDB完全支持细颗粒度的事务锁定(比如:commit/rollback).当你创建一张新的MySQL表时,你要选择它的类型(也就是存储引擎).如果没有选择,你就会使用与预设置的默认引擎. 如果你想要知道已经存在的MySQL数据表的类型,这里有几种方法达到. 方法一 如果你可以访问phpMyAdmin,你可以从phpMyAdmin找出默认的数据库类型.从phpMyAdmin中选中数据

随机获取Mysql数据表的一条或多条记录

随机获得Mysql数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password......)表(有一百多万条记录)为例,对比讲解下几个方法效率问题: select * from users order by rand() LIMIT 1 执行该sql语句,老半天没有反应,最后被迫手动停止执行,怎个伤人了得啊!后来我查了一下MYSQL手册,里面针对RAND()的提示大概意思就是,在 ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被

【原创】C#搭建足球赛事资料库与预测平台(4) 比赛信息数据表设计

        本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html 开源C#彩票数据资料库系列文章总目录:http://www.cnblogs.com/asxinyu/p/4329642.html 本篇文章开始将逐步介绍使用C#搭建足球赛事资料库与预测平台的相关细节.还是先从数据库开始,从本文开始将逐步对每个核心实体类和数据库设计相关的内容进行讲解,并公布源代码,至于能不能跑起来,看的看个人努力.由于没有时间将所有相关业务都简述

用Myisamchk让MySQL数据表更健康

用Myisamchk让MySQL数据表更健康 2011-03-15 09:15 水太深 ITPUB 字号:T | T 为了让MySQL数据库中的数据表“更健康”,就需要对其进行定期体检.在这里笔者推荐使用Myisamchk工具来对数据表进行不定期的检查.同时笔者给出了一些相关的注意事项以及使用技巧. AD:51CTO 网+首届APP创新评选大赛火热启动——超百万资源等你拿! 在MySQL数据库中,数据表数以百计,数据库管理员不可能有这么多的时间和精力去依次检查表的有效性,所以他们急需要一种工具,

[Sqoop]将Mysql数据表导入到Hive

业务背景 mysql数据表YHD_CATEG_PRIOR结构如下: -- Table "YHD_CATEG_PRIOR" DDL CREATE TABLE `YHD_CATEG_PRIOR` ( `category_id` int(11) NOT NULL COMMENT '类目ID', `category_name` varchar(250) DEFAULT NULL COMMENT '类目名称', `category_level` int(11) DEFAULT '0' COMME

MySQL 数据表修复及数据恢复

1. MYSQL数据表在什么情况下容易损坏? 服务器突然断电导致数据文件损坏. 强制关机,没有先关闭mysql 服务等. 2. 数据表损坏后的主要现象是什么? 从表中选择数据之时,得到如下错误:Incorrect key file for table: ‘…’. Try to repair it 查询不能在表中找到行或返回不完全的数据. Error: Table ‘p’ is marked as crashed and should be repaired . 打开表失败: Can’t open

MySQL数据表碎片整理

在MySQL中,我们经常会使用VARCHAR.TEXT.BLOB等可变长度的文本数据类型.不过,当我们使用这些数据类型之后,我们就不得不做一些额外的工作--MySQL数据表碎片整理. 那么,为什么在使用这些数据类型之后,我们就要对MySQL定期进行碎片整理呢? 现在,我们先来看一个具体的例子.在这里,我们使用如下SQL语句在MySQL自带的TEST数据库中创建名为DEMO的数据表并插入5条测试数据. --创建DEMO表  id int unsigned,  body text  ) engine

mysql数据表增删改查

http://www.runoob.com/mysql/mysql-tutorial.html 一.MySQL 创建数据表 创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (column_name column_type); 以下例子中我们将在 RUNOOB 数据库中创建数据表runoob_tbl: CREATE TABLE IF NOT EXISTS `runoob_tbl`

navicat如何导出mysql数据表结构

我们在创建数据库时会对字段进行设置,比如类型.长度等,如果字段多的话一个个设置非常麻烦,可以从其他地方已有的表导入数据表结构,怎么操作呢?我们拿navicat导出mysql数据表结构为例: 1.点击“工具”–>数据传输. 2.在弹出的窗口里左边可以选择需要导出的表,右边选择连接或文件(我要导出sql文件,所以我选的是文件)选择导出的位置. 3.如果只是想导出表结构而不需要表的数据,那么点击“高级”–>把“插入记录”前的勾去掉.如果需要导出数据,那么默认打勾就可以, 4.点击开始,直到进度条走到