MySQL数据表的设计

数据表(Table)

数据表是数据库的基本组成元素,以记录(行)和字段(列)组成的二位结构用于储存数据。数据库由表结构和表内容组成,先建立表结构,然后才能输入数据。数据表结构设计主要包括字段名称,字段类型和字段属性的设置。在关系数据库中,为了确保数据的一致性和完整性,在创建表时除了必须指定字段名称、字段类型和字段属性外,还需要使用约束(constraint)、索引(index)、主键(primary key)和外键(foreign key)等功能属性。

数据值和列类型

对MuSQL中数据值的分类,有数值型、字符型、日期型和控制等,这和一般的编程语言的分类差不多。另外,MySQL数据库的表是一个二维表,由一个或多个数据列构成。每个数据列都有它的特定类型,该类型决定了MySQL如何看待该列数据,我们可以把整形数值存放在字符型的列中,MySQL则会把它当成字符串处理。MySQL中的列类型有三种:数值型、字符串类和日期/时间类。从大类来看列类型和数值类型一样,都是只有三种,但每一种列类型都还可细分。下面对各种列类型进行详细介绍。

数值类的数据列类型

| 数据列类型 | 存储空间 | 说明 | 取值范围 |
|: ----------------- |:-------------|: --------------------|----------------------|
| TINTINT | 1字节 | 非常小的整数 | 带符号值: -128 ~ 127
无符号值:0 ~ 256|
|SMALLINT | 2字节 | 较小的整数 |带符号值:-32 768 ~ 32768
无符号值:0 ~ 65535 |
| MEDIUMINT| 3字节 | 中等大小的整数 | 带符号值:-8 388 608 ~ 8 388 607
无符号值:0 ~ 16 777 215|
| INT| 4字节 | 标准整数 | 带符号值:-2 147 483 648 ~ 2 147 483 647
无符号值:0 ~ 4 294 967 295|
| BIGINT| 8字节 | 大整数 | 带符号值:-9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807
无符号值:0 ~ 18 446 744 073 709 551 615|
| FLOAT| 4 或 8字节 | 单精度浮点数 | 最小非零值:±1.175494351E-38
最大非零值:±3.402823466E+38|
| DOUBLE| 8字节 | 双精度浮点数 | 最小非零值:±2.2250738585072014E-308
最大非零值:±1.7976931348623157E+308|
| DECIMAL| 自定义 | 以字符串形式表示的浮点数 | 取决于储存单元字节数|
为了节省存储空间和提高数据库处理效率,我们应根据应用数据的取值范围来选择一个最合适的数据列类型。如果把一个超出数据列取值范围的数存入该列,则MySQL就会截断该值,如:我们把99999存入 SMALLINT(3)数据列里,因为SAMLLINT(3)的取值范围是-32 768 ~ 32768,所以就会截断成32767存储。显示宽度3 不会影响数值的存储,只影响显示。

字符串类数据列类型

字符串可以用老表示任何一种值,所以它是最基本的类型之一。

| 数据列类型 | 存储空间 | 说明 | 最大长度 |
|: ----------------------- |:-----------------|: --------------------|----------------------|
| CHAR[(M)] | M字节 | 定长字符串 | M字节 |
| VARCHAR[(M)] | L + 1字节 | 可变字符串 | M字节 |
| TINYBLOD,TINYTEXT | L + 1字节 | 非常小的BLOB(二进制大对象) 和文本串 | 2^6 - 1字节 |
| BLOB,TEXT | L + 2字节 | 小BLOB和文本串 | 2^16 - 1字节 |
| MEDIUMBLOB,DEDIUMTEXT | L + 3字节 | 中等BLOB和文本串 | 2^24 - 1字节 |
| LONGBLOB,LONGTEXT | L + 4字节 | 大BLOB和文本串 | 2^32 - 1字节 |
| ENUM('value1','value2',....) | 1或2 字节 | 枚举:可赋予某个枚举成员 | 65535个成员 |
| SET('value1','value2',....) | 1,2,3,4,8, 字节 |集合:可赋予某个集合成员 | 64个成员 |

字符串类数据列类型

| 数据列类型 | 存储空间 | 说明 | 最大长度 |
|: ----------------------- |:-----------------|: --------------------|----------------------|
| DATE | 3字节 | "YYYY-MM-DD"格式表示的日期值 | 1000-01-01 ~ 9999-12-31 |
| TIME | 3字节 | "hh:mm:ss"格式表示的时间值 | 1000-01-01 00:00:00 到 9999-12-31 23:59:59 |
| TIMESTAMP | 4字节 | "YYYYMMDDhhmmss"格式表示的时间戳 | 19700101000000 ~ 2037年的某个时刻 |
| YEAR | 1字节 | "YYYY"格式的年份值 | 1901 ~ 2155 |

NULL值

NULL 值可能使你感到奇怪,直到你习惯它。概念上,NULL意味着没有值或未知值,且它被看成与众不同的值。可以将NULL值插入到数据表中并从表中检索它们,也可以测试某个值是否为NULL,但不能对NULL值金像算术运算,如果对NULL值进行算数运算,其结果仍旧是NULL。在MySQL中,0或NULL都意味着假而其他意味着真。布尔运算的默认真值是1.

数据字段属性

1.UNSIGNED
该属性只能修饰数值类型,不允许数列出现负数。

2.ZEROFILL
该属性也只能用于设置数值类型,在数值类型前自动用0补足位数。

3.AUTO_INCREMENT
该属性用于设置字段的自动增量属性,当数值类型的字段设置为自增量属性时,每增加一条新的记录,该字段的值就自动加1,而且此字段的值不允许重复

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

5.DEFAULT
可以通过此属性来指定一个默认值,如果没有在此列添加值,那么默认添加此值。例如,在用户表user中可以将性别字段默认设置成“男”。

数据表对象管理

创建表

创建数据表的主要是定义表结构,包括数据表的名称,字段名,字段类型,约束和索引等。其基本语法如下

CREATE TABLE [IF NOT EXISTS] 表名称(
        字段名1  列类型  [属性]  [索引]  
        字段名2  列类型  [属性]  [索引]  
)[表类型] [表字符集]

修改表

修改表是指修改表的结构,在实际的应用中,当发现某个表的结构不满足要求时,可以用ALTER TABLE 语句来修改表的结构,包括添加新的字段、删除原有的字段、修改列的类型、属性、及索引,甚至可以修改表的目名称等。修改表的语法如下:

ALTER TABLE 表名 ACTION; ------------ #修改表的语法格式

ALTER TABLE 表名 ADD 字段名 <建表语句> [FIRST | AFTER 列名] #为指定的表添加新列

mysql> ALTER TABLE users ADD name VARCHAR(30) NOT NULL FIRST;
mysql> ALTER TABLE users ADD height DOUBLE NOT NULL  AFTER userpass;


为指定的数据表为了更改原有字段的类型,可使用CHANGE或MODIFY 子句。如果原列的名字和新列的名字相同,则change和Modify的作用相同。语法格式如下
>```
ALTER TABLE 表名CHANGE(MODIFY) 列表  <建表语句>      #为指定的表修改列类型
 mysql> ALTER TABLE users CHANGE telno phone INT UNSIGNED DEFAULT '0';

修改表名

ALTER TABLE 旧表名 RENAME AS 新表名       #为指定的数据表重新命名

删除表

DROP TABLE 旧表名 RENAME AS 新表名 #删除不再使用的数据表

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,888评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,677评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,386评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,726评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,729评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,337评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,902评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,807评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,349评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,439评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,567评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,242评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,933评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,420评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,531评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,995评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,585评论 2 359

推荐阅读更多精彩内容

  • 什么是数据库? 数据库是存储数据的集合的单独的应用程序。每个数据库具有一个或多个不同的API,用于创建,访问,管理...
    chen_000阅读 4,039评论 0 19
  • MySQL5.6从零开始学 第一章 初始mysql 1.1数据库基础 数据库是由一批数据构成的有序的集合,这些数据...
    星期四晚八点阅读 1,155评论 0 4
  • SQL SELECT 语句 一、查询SQL SELECT 语法 (1)SELECT 列名称 FROM 表名称 (2...
    有钱且幸福阅读 5,459评论 0 33
  • MySQL 数据库常用命令 1、MySQL常用命令 create database name; 创建数据库 use...
    55lover阅读 4,795评论 1 57
  • 开营仪式 如何一开口就拥有好人缘-课后感悟 Jenny+18 【干货整理记录】 一、怎样成为声音高手? 1.理解讲...
    秦悠然阅读 442评论 0 2